You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by et...@apache.org on 2008/01/08 23:15:56 UTC
svn commit: r610196 [2/2] - in /incubator/shindig/trunk/java/gadgets: ./
src/main/java/org/apache/shindig/gadgets/
src/main/java/org/apache/shindig/gadgets/http/ src/main/webapp/WEB-INF/
src/test/java/org/apache/shindig/gadgets/
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java?rev=610196&r1=610195&r2=610196&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/GadgetRenderingServlet.java Tue Jan 8 14:15:54 2008
@@ -22,12 +22,12 @@
import org.apache.shindig.gadgets.GadgetServer;
import org.apache.shindig.gadgets.GadgetSpec;
import org.apache.shindig.gadgets.GadgetView;
+import org.apache.shindig.gadgets.JsFeatureLoader;
import org.apache.shindig.gadgets.JsLibrary;
import org.apache.shindig.gadgets.MessageBundle;
import org.apache.shindig.gadgets.RemoteContentFetcher;
+import org.apache.shindig.gadgets.RenderingContext;
import org.apache.shindig.gadgets.UserPrefs;
-import org.json.JSONException;
-import org.json.JSONObject;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
@@ -36,11 +36,13 @@
import java.net.URLEncoder;
import java.util.Enumeration;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -49,16 +51,14 @@
* Servlet for rendering Gadgets, typically in an IFRAME.
*/
public class GadgetRenderingServlet extends HttpServlet {
- private final GadgetServer gadgetServer;
- private final String jsServicePath;
+ private GadgetServer gadgetServer;
+ private String jsServicePath;
+ private GadgetFeatureRegistry registry;
private static final String USERPREF_PARAM_PREFIX = "up_";
private static final String LIBS_PARAM_NAME = "libs";
private static final String JS_FILE_SUFFIX = ".js";
public static final String DEFAULT_JS_SERVICE_PATH = "js/";
- static {
- GadgetFeatureRegistry.register("analytics", null, AnalyticsFeature.class);
- }
/**
* Creates a {@code GadgetRenderingServlet} with default executor,
@@ -71,6 +71,30 @@
new BasicRemoteContentFetcher(1024 * 1024));
}
+ @Override
+ @SuppressWarnings("unchecked")
+ public void init(ServletConfig config) {
+ ServletContext context = config.getServletContext();
+ String coreFeatures = context.getInitParameter("core-js-features");
+ String otherFeatures = context.getInitParameter("other-js-features");
+ String jsPath = context.getInitParameter("js-service-path");
+ if (jsPath == null) {
+ jsPath = DEFAULT_JS_SERVICE_PATH;
+ }
+ jsServicePath = jsPath;
+ try {
+ registry = new GadgetFeatureRegistry(coreFeatures);
+ gadgetServer.setGadgetFeatureRegistry(registry);
+ if (otherFeatures != null) {
+ JsFeatureLoader jsLoader = new JsFeatureLoader();
+ jsLoader.loadFeatures(otherFeatures, registry);
+ }
+ } catch (GadgetException e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ }
+
/**
* A la carte rendering server creation.
* @param executor
@@ -86,8 +110,6 @@
gadgetServer.setMessageBundleCache(mbCache);
gadgetServer.setSpecCache(specCache);
gadgetServer.setContentFetcher(fetcher);
- // TODO: make injectable
- jsServicePath = DEFAULT_JS_SERVICE_PATH;
}
@Override
@@ -125,12 +147,11 @@
gadget = gadgetServer.processGadget(gadgetId,
getPrefsFromRequest(req),
context.getLocale(),
- GadgetServer.RenderingContext.GADGET);
+ RenderingContext.GADGET);
+ outputGadget(gadget, resp);
} catch (GadgetServer.GadgetProcessException e) {
outputErrors(e, resp);
}
-
- outputGadget(gadget, resp);
}
private void outputGadget(Gadget gadget, HttpServletResponse resp)
@@ -162,20 +183,25 @@
"body{margin: 0px;padding: 0px;background-color:white;}" +
"</style>");
markup.append("</head><body>");
+ StringBuilder externJs = new StringBuilder();
+ StringBuilder inlineJs = new StringBuilder();
+ String externFmt = "<script src=\"%s\"></script>\n";
for (JsLibrary library : gadget.getJsLibraries()) {
- markup.append(library.toString());
+ if (library.getType() == JsLibrary.Type.URL) {
+ externJs.append(String.format(externFmt, library.getContent()));
+ } else {
+ inlineJs.append(library.getContent()).append("\n");
+ }
}
- JSONObject json = new JSONObject();
- try {
- json.put("proxyUrl", "http://www.gmodules.com/ig/proxy?url=%url%");
- json.put("jsonProxyUrl", "/gadgets/proxy?url=%url%&output=js");
- } catch (JSONException e) {
- // This shouldn't ever happen.
+ if (inlineJs.length() > 0) {
+ markup.append("<script><!--\n").append(inlineJs)
+ .append("\n-->\n</script>");
+ }
+ if (externJs.length() > 0) {
+ markup.append(externJs);
}
- markup.append("<script>gadgets.IO.init(" +json.toString()+ ");</script>");
markup.append(gadget.getContentData());
- // TODO: use renamespaced API
-
+ markup.append("<script>gadgets.util.runOnLoadHandlers();</script>");
markup.append("</body></html>");
resp.getOutputStream().print(markup.toString());
@@ -188,12 +214,8 @@
// TODO: userprefs on the fragment rather than query string
String prefsQuery = getPrefsQueryString(gadget.getUserPrefValues());
String libsQuery = null;
- try {
- libsQuery = getLibsQueryString(gadget.getJsLibraries());
- } catch (GadgetException e) {
- resp.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
- return;
- }
+
+ libsQuery = getLibsQueryString(gadget.getRequires().keySet());
URI redirURI = gadget.getContentHref();
try {
@@ -228,11 +250,12 @@
resp.getOutputStream().print(markup.toString());
}
+ @SuppressWarnings("unchecked")
private UserPrefs getPrefsFromRequest(HttpServletRequest req) {
Map<String, String> prefs = new HashMap<String, String>();
- Enumeration paramNames = req.getParameterNames();
+ Enumeration<String> paramNames = req.getParameterNames();
while (paramNames.hasMoreElements()) {
- String paramName = (String)paramNames.nextElement();
+ String paramName = paramNames.nextElement();
if (paramName.startsWith(USERPREF_PARAM_PREFIX)) {
String prefName = paramName.substring(USERPREF_PARAM_PREFIX.length());
prefs.put(prefName, req.getParameter(paramName));
@@ -241,55 +264,43 @@
return new UserPrefs(prefs);
}
- private String getPrefsQueryString(Map<String, String> prefVals) {
- StringBuilder builder = new StringBuilder();
- for (Map.Entry<String, String> prefEntry : prefVals.entrySet()) {
- builder.append("&");
+ private String getPrefsQueryString(UserPrefs prefVals) {
+ StringBuilder buf = new StringBuilder();
+ for (Map.Entry<String, String> prefEntry : prefVals.getPrefs().entrySet()) {
+ buf.append("&");
try {
- builder.append(USERPREF_PARAM_PREFIX +
- URLEncoder.encode(prefEntry.getKey(), "UTF8") +
- "=" +
- URLEncoder.encode(prefEntry.getValue(), "UTF8"));
+ buf.append(USERPREF_PARAM_PREFIX)
+ .append(URLEncoder.encode(prefEntry.getKey(), "UTF8"))
+ .append("=")
+ .append(URLEncoder.encode(prefEntry.getValue(), "UTF8"));
} catch (UnsupportedEncodingException e) {
// If UTF8 is somehow not supported, we may as well bail.
// Not a whole lot we can do without such support.
throw new RuntimeException("Unexpected error: UTF8 not supported.");
}
}
- return builder.toString();
+ return buf.toString();
}
- private String getLibsQueryString(List<JsLibrary> jsLibs)
- throws GadgetException {
- StringBuilder libBuilder = new StringBuilder();
- libBuilder.append("&").append(LIBS_PARAM_NAME).append("=");
- libBuilder.append(jsServicePath);
- StringBuilder errBuilder = new StringBuilder();
- int numErrs = 0;
- for (int i = 0; i < jsLibs.size(); ++i) {
- if (i > 0) {
- // Builds a consolidated lib spec, collapsing several features into
- // a single <script src="libspec"/> tag load for type=URL gadgets
- libBuilder.append(JsLibrary.ALIAS_SEPARATOR);
- }
- JsLibrary jsLib = jsLibs.get(i);
- String alias = jsLib.getAlias();
- if (alias == null) {
- numErrs++;
- errBuilder.append(" ").append(jsLib.getFeature());
+ private String getLibsQueryString(Set<String> features) {
+ StringBuilder buf = new StringBuilder();
+ buf.append("&").append(LIBS_PARAM_NAME).append("=");
+ buf.append(jsServicePath);
+ if (features.size() == 0) {
+ buf.append("core");
+ } else {
+ boolean first = false;
+ for (String feature : features) {
+ if (first) {
+ first = false;
+ } else {
+ buf.append(":");
+ }
+ buf.append(feature);
}
}
- libBuilder.append(JS_FILE_SUFFIX);
-
- if (numErrs > 0) {
- throw new GadgetException(
- GadgetException.Code.UNSUPPORTED_FEATURE,
- String.format("The following feature%s not supported " +
- "for type=url gadgets:%s",
- numErrs == 1 ? " is" : "s are",
- errBuilder.toString()));
- }
+ buf.append(JS_FILE_SUFFIX);
- return libBuilder.toString();
+ return buf.toString();
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/JsServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/JsServlet.java?rev=610196&r1=610195&r2=610196&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/JsServlet.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/JsServlet.java Tue Jan 8 14:15:54 2008
@@ -13,10 +13,21 @@
*/
package org.apache.shindig.gadgets.http;
+import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.GadgetFeatureFactory;
+import org.apache.shindig.gadgets.GadgetFeatureRegistry;
+import org.apache.shindig.gadgets.JsFeatureLoader;
import org.apache.shindig.gadgets.JsLibrary;
+import org.apache.shindig.gadgets.JsLibraryFeatureFactory;
+import org.apache.shindig.gadgets.RenderingContext;
import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -26,11 +37,31 @@
* Used by type=URL gadgets in loading JavaScript resources.
*/
public class JsServlet extends HttpServlet {
+ private GadgetFeatureRegistry registry;
+
+ @Override
+ public void init(ServletConfig config) {
+ ServletContext context = config.getServletContext();
+ String coreFeatures = context.getInitParameter("core-js-features");
+ String otherFeatures = context.getInitParameter("other-js-features");
+ String jsPath = context.getInitParameter("js-service-path");
+ try {
+ registry = new GadgetFeatureRegistry(coreFeatures);
+ if (otherFeatures != null) {
+ JsFeatureLoader jsLoader = new JsFeatureLoader();
+ jsLoader.loadFeatures(otherFeatures, registry);
+ }
+ } catch (GadgetException e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+ }
+
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
// Use the last component as filename; prefix is ignored
- String path = req.getServletPath();
+ String path = req.getPathTranslated();
String[] pathComponents = path.split("/");
String resourceName = pathComponents[pathComponents.length-1];
if (resourceName.endsWith(".js")) {
@@ -38,24 +69,59 @@
resourceName = resourceName.substring(
0, resourceName.length() - ".js".length());
}
-
- String containerParam = req.getParameter("c");
- boolean isContainer =
- (containerParam != null && containerParam.equals("1"));
- String jsData = null;
- if (isContainer) {
- jsData = JsLibrary.getContainerJs(resourceName);
+
+ Set<String> needed = new HashSet<String>();
+ if (resourceName.contains(":")) {
+ needed.addAll(Arrays.asList(resourceName.split(":")));
} else {
- jsData = JsLibrary.getGadgetJs(resourceName);
+ needed.add(resourceName);
}
-
- if (jsData == null) {
+
+ Set<GadgetFeatureRegistry.Entry> found
+ = new HashSet<GadgetFeatureRegistry.Entry>();
+ Set<String> missing = new HashSet<String>();
+
+ if (registry.getIncludedFeatures(needed, found, missing)) {
+ String containerParam = req.getParameter("c");
+ RenderingContext context;
+ context = containerParam != null && containerParam.equals("1") ?
+ RenderingContext.CONTAINER :
+ RenderingContext.GADGET;
+
+ StringBuilder jsData = new StringBuilder();
+
+ Set<GadgetFeatureRegistry.Entry> done
+ = new HashSet<GadgetFeatureRegistry.Entry>();
+ do {
+ for (GadgetFeatureRegistry.Entry entry : found) {
+ if (!done.contains(entry) &&
+ done.containsAll(entry.getDependencies())) {
+ GadgetFeatureFactory feature = entry.getFeature();
+ if (feature instanceof JsLibraryFeatureFactory) {
+ JsLibraryFeatureFactory jsLib = (JsLibraryFeatureFactory)feature;
+ for (JsLibrary lib : jsLib.getLibraries(context)) {
+ // TODO: type url js files fail here.
+ // TODO: resolve dependencies correctly.
+ if (lib.getType() != JsLibrary.Type.URL) {
+ jsData.append(lib.getContent());
+ }
+ }
+ }
+ done.add(entry);
+ }
+ }
+ } while (done.size() != found.size());
+
+ if (jsData.length() == 0) {
+ resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
+
+ resp.setContentType("text/javascript");
+ resp.setContentLength(jsData.length());
+ resp.getOutputStream().write(jsData.toString().getBytes());
+ } else {
resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return;
}
-
- resp.setContentType("text/javascript");
- resp.setContentLength(jsData.length());
- resp.getOutputStream().write(jsData.getBytes());
}
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ProxyHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ProxyHandler.java?rev=610196&r1=610195&r2=610196&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ProxyHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ProxyHandler.java Tue Jan 8 14:15:54 2008
@@ -64,7 +64,7 @@
} catch (JSONException e) {
output = "";
}
-
+ response.setStatus(HttpServletResponse.SC_OK);
setCachingHeaders(response);
response.setContentType("application/json; charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename=p.txt");
@@ -81,7 +81,7 @@
RemoteContent results = fetcher.fetch(origin);
int status = results.getHttpStatusCode();
response.setStatus(status);
- if (status == 200) {
+ if (status == HttpServletResponse.SC_OK) {
// Fill out the response.
setCachingHeaders(response);
Map<String, List<String>> headers = results.getAllHeaders();
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ProxyServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ProxyServlet.java?rev=610196&r1=610195&r2=610196&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ProxyServlet.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ProxyServlet.java Tue Jan 8 14:15:54 2008
@@ -26,6 +26,7 @@
public class ProxyServlet extends HttpServlet {
private final static ProxyHandler handler = new ProxyHandler();
+ @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String output = request.getParameter("output");
Modified: incubator/shindig/trunk/java/gadgets/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/webapp/WEB-INF/web.xml?rev=610196&r1=610195&r2=610196&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/webapp/WEB-INF/web.xml (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/webapp/WEB-INF/web.xml Tue Jan 8 14:15:54 2008
@@ -19,7 +19,15 @@
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
-
+ <!-- configuration -->
+ <context-param>
+ <param-name>core-js-features</param-name>
+ <param-value>res://core-features/</param-value>
+ </context-param>
+ <context-param>
+ <param-name>other-js-features</param-name>
+ <param-value>res://features/</param-value>
+ </context-param>
<!-- Render a Gadget -->
<servlet>
@@ -48,4 +56,14 @@
<url-pattern>/proxy</url-pattern>
</servlet-mapping>
+ <!-- javascript serving -->
+ <servlet>
+ <servlet-name>js</servlet-name>
+ <servlet-class>org.apache.shindig.gadgets.http.JsServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>js</servlet-name>
+ <url-pattern>/js/*</url-pattern>
+ </servlet-mapping>
</web-app>
Added: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetBlacklistTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetBlacklistTest.java?rev=610196&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetBlacklistTest.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetBlacklistTest.java Tue Jan 8 14:15:54 2008
@@ -0,0 +1,82 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.shindig.gadgets;
+
+import junit.framework.TestCase;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.net.URI;
+import java.util.regex.PatternSyntaxException;
+
+public class BasicGadgetBlacklistTest extends TestCase {
+
+ private URI someUri;
+
+ @Override
+ protected void setUp() throws Exception {
+ someUri = new URI("http://bla.com/foo.xml");
+ }
+
+ private GadgetBlacklist createBlacklist(String contents) throws IOException {
+ File temp = File.createTempFile("blacklist_test", ".txt");
+ BufferedWriter out = new BufferedWriter(new FileWriter(temp));
+ out.write(contents);
+ out.close();
+ return new BasicGadgetBlacklist(temp);
+ }
+
+ public void testEmptyBlacklist() throws Exception {
+ GadgetBlacklist bl = createBlacklist("");
+ assertFalse(bl.isBlacklisted(someUri));
+ }
+
+ public void testExactMatches() throws Exception {
+ GadgetBlacklist bl = createBlacklist(someUri + "\nhttp://baz.com/foo.xml");
+ assertFalse(bl.isBlacklisted(new URI("http://random.com/uri.xml")));
+ assertTrue(bl.isBlacklisted(someUri));
+ }
+
+ public void testExactMatchesWithCaseMixture() throws Exception {
+ GadgetBlacklist bl = createBlacklist(someUri + "\nhttp://BAZ.com/foo.xml");
+ assertTrue(bl.isBlacklisted(someUri));
+ assertTrue(bl.isBlacklisted(new URI("http://BLA.com/foo.xml")));
+ assertTrue(bl.isBlacklisted(new URI("http://baz.com/foo.xml")));
+ }
+
+ public void testIgnoredCommentsAndWhitespace() throws Exception {
+ GadgetBlacklist bl = createBlacklist(
+ "# comment\n \t" + someUri + " \n # comment\n\n");
+ assertTrue(bl.isBlacklisted(someUri));
+ }
+
+ public void testRegexpMatches() throws Exception {
+ GadgetBlacklist bl = createBlacklist("REGEXP http://bla.com/.*");
+ assertTrue(bl.isBlacklisted(someUri));
+ assertTrue(bl.isBlacklisted(new URI("http://bla.com/bar.xml")));
+ assertFalse(bl.isBlacklisted(new URI("http://blo.com/bar.xml")));
+ }
+
+ public void testInvalidRegularExpression() throws Exception {
+ try {
+ GadgetBlacklist bl = createBlacklist("REGEXP +http://bla.com/.*");
+ fail();
+ } catch (PatternSyntaxException ex) {
+ // success
+ }
+ }
+
+}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java?rev=610196&r1=610195&r2=610196&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetServerTest.java Tue Jan 8 14:15:54 2008
@@ -27,8 +27,6 @@
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.isA;
-import org.apache.shindig.gadgets.EasyMockTestCase;
-
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@@ -41,7 +39,9 @@
@SuppressWarnings(value="unchecked")
final GadgetDataCache<MessageBundle> bundleCache = mock(GadgetDataCache.class);
- public GadgetServerTest() {
+ public GadgetServerTest() throws GadgetException {
+ GadgetFeatureRegistry registry = new GadgetFeatureRegistry(null);
+ gadgetServer.setGadgetFeatureRegistry(registry);
gadgetServer.setContentFetcher(fetcher);
gadgetServer.setSpecCache(specCache);
gadgetServer.setMessageBundleCache(bundleCache);
@@ -56,7 +56,7 @@
replay();
Gadget gadget = gadgetServer.processGadget(DATETIME_ID, UserPrefs.EMPTY, EN_US_LOCALE,
- GadgetServer.RenderingContext.GADGET);
+ RenderingContext.GADGET);
verify();
}
@@ -65,7 +65,7 @@
replay();
Gadget gadget = gadgetServer.processGadget(DATETIME_ID, UserPrefs.EMPTY, EN_US_LOCALE,
- GadgetServer.RenderingContext.GADGET);
+ RenderingContext.GADGET);
assertSame(DATETIME_SPEC, gadget.getBaseSpec());
verify();
}
@@ -79,7 +79,7 @@
replay();
Gadget gadget = gadgetServer.processGadget(DATETIME_ID, UserPrefs.EMPTY, EN_US_LOCALE,
- GadgetServer.RenderingContext.GADGET);
+ RenderingContext.GADGET);
assertEquals("Hello, World!", gadget.getTitle());
assertEquals("Goodbye, World!", gadget.getContentData());
verify();
Added: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetSpecParserTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetSpecParserTest.java?rev=610196&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetSpecParserTest.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/GadgetSpecParserTest.java Tue Jan 8 14:15:54 2008
@@ -0,0 +1,52 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.shindig.gadgets;
+
+import junit.framework.TestCase;
+
+import java.net.URI;
+
+public class GadgetSpecParserTest extends TestCase {
+
+ private static final GadgetSpecParser parser = new GadgetSpecParser();
+
+ private static class BasicGadgetId implements GadgetView.ID {
+ URI uri;
+ public URI getURI() {
+ return uri;
+ }
+ int moduleId;
+ public int getModuleId() {
+ return moduleId;
+ }
+ public String getKey() {
+ return uri.toString();
+ }
+ }
+
+ public void testBasicGadget() throws Exception {
+ BasicGadgetId id = new BasicGadgetId();
+ id.uri = new URI("http://example.org/text.xml");
+ id.moduleId = 1;
+ byte[] xml = ("<?xml version=\"1.0\"?>" +
+ "<Module>" +
+ "<ModulePrefs title=\"Hello, world!\"/>" +
+ "<Content type=\"html\">Hello!</Content>" +
+ "</Module>").getBytes();
+ GadgetSpec spec = parser.parse(id, xml);
+
+ assertEquals("Hello!", spec.getContentData());
+ assertEquals("Hello, world!", spec.getTitle());
+ }
+}