Matthew Dempsky has submitted this change and it was merged.

Change subject: Add FakeSafeHtmlTemplatesMaker
......................................................................


Add FakeSafeHtmlTemplatesMaker

Similar to FakeMessagesMaker and FakeCssMaker, this class allows Java
tests to create instances of SafeHtmlTemplates without needing to call
GWT.create()

JUnitSuite updated accordingly.

Change-Id: Ib9a4afc15c0b7210cd9355186b92655ff5c68631
---
A user/src/com/google/gwt/junit/FakeSafeHtmlTemplatesMaker.java
A user/test/com/google/gwt/junit/FakeSafeHtmlTemplatesMakerTest.java
M user/test/com/google/gwt/junit/JUnitSuite.java
3 files changed, 125 insertions(+), 0 deletions(-)

Approvals:
  Matthew Dempsky: Looks good to me, approved
  Leeroy Jenkins: Verified



diff --git a/user/src/com/google/gwt/junit/FakeSafeHtmlTemplatesMaker.java b/user/src/com/google/gwt/junit/FakeSafeHtmlTemplatesMaker.java
new file mode 100644
index 0000000..1e97ff1
--- /dev/null
+++ b/user/src/com/google/gwt/junit/FakeSafeHtmlTemplatesMaker.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * 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 com.google.gwt.junit;
+
+import com.google.gwt.safehtml.client.SafeHtmlTemplates;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.Arrays;
+
+/**
+ * Helper to make a fake implementation of any {@link SafeHtmlTemplates}
+ * interface via reflection, for use in JUnit tests. (This will not work in
+ * GWTTestCase.) All calls to the returned object return the method name
+ * followed by the passed parameters as a list surrounded by [].
+ * <p>
+ * Sample use:
+ *
+ * <pre>interface MyTemplates extends SafeHtmlTemplates {
+ * &#64;Template("<span class=\"{3}\">{0}: <a href=\"{1}\">{2}</a></span>") + * SafeHtml messageWithLink(SafeHtml message, String url, String linkText,
+ *     String style);
+ * }
+ *
+ * public void testWithArgs() {
+ * MyTemplates templates = FakeSafeHtmlTemplatesMaker.create(MyTemplates.class);
+ *   SafeHtml message = SafeHtmlUtils.fromString("message");
+ *   assertEquals("messageWithLink[message, url, link, style]",
+ * templates.messageWithLink(message, "url", "link", "style").asString());
+ * }
+ * </pre>
+ */
+public class FakeSafeHtmlTemplatesMaker implements InvocationHandler {
+ public static <T extends SafeHtmlTemplates> T create(Class<T> templatesClass) {
+    return templatesClass.cast(Proxy.newProxyInstance(
+        FakeSafeHtmlTemplatesMaker.class.getClassLoader(),
+        new Class[] {templatesClass},
+        new FakeSafeHtmlTemplatesMaker()));
+  }
+
+  public Object invoke(Object proxy, Method method, Object[] args)
+      throws Throwable {
+    String name = method.getName();
+
+    if (args == null || args.length == 0) {
+      return SafeHtmlUtils.fromString(name);
+    }
+
+    // SafeHtml does not implement toString(), so use asString() instead.
+    for (int i = 0; i < args.length; i++) {
+      if (args[i] instanceof SafeHtml) {
+        args[i] = ((SafeHtml) args[i]).asString();
+      }
+    }
+
+    String result = name + Arrays.asList(args);
+    return SafeHtmlUtils.fromString(result);
+  }
+}
diff --git a/user/test/com/google/gwt/junit/FakeSafeHtmlTemplatesMakerTest.java b/user/test/com/google/gwt/junit/FakeSafeHtmlTemplatesMakerTest.java
new file mode 100644
index 0000000..97583ef
--- /dev/null
+++ b/user/test/com/google/gwt/junit/FakeSafeHtmlTemplatesMakerTest.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * 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 com.google.gwt.junit;
+
+import com.google.gwt.safehtml.client.SafeHtmlTemplates;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests of FakeSafeHtmlTemplatesMaker.
+ */
+public class FakeSafeHtmlTemplatesMakerTest extends TestCase {
+  interface MyTemplates extends SafeHtmlTemplates {
+
+    @Template("<span class=\"someclass\">Some message here</span>")
+    SafeHtml mySimpleTemplate();
+
+    @Template("<span class=\"{3}\">{0}: <a href=\"{1}\">{2}</a></span>")
+    SafeHtml messageWithLink(SafeHtml message, String url, String linkText,
+        String style);
+  }
+
+  public void testSimple() {
+ MyTemplates templates = FakeSafeHtmlTemplatesMaker.create(MyTemplates.class); + assertEquals("mySimpleTemplate", templates.mySimpleTemplate().asString());
+  }
+
+  public void testArgs() {
+ MyTemplates templates = FakeSafeHtmlTemplatesMaker.create(MyTemplates.class);
+    SafeHtml message = SafeHtmlUtils.fromString("message");
+    assertEquals("messageWithLink[message, url, link, style]",
+ templates.messageWithLink(message, "url", "link", "style").asString());
+  }
+}
diff --git a/user/test/com/google/gwt/junit/JUnitSuite.java b/user/test/com/google/gwt/junit/JUnitSuite.java
index 46a4bb4..4e4900e 100644
--- a/user/test/com/google/gwt/junit/JUnitSuite.java
+++ b/user/test/com/google/gwt/junit/JUnitSuite.java
@@ -54,6 +54,7 @@

     suite.addTestSuite(FakeCssMakerTest.class);
     suite.addTestSuite(FakeMessagesMakerTest.class);
+    suite.addTestSuite(FakeSafeHtmlTemplatesMakerTest.class);
     suite.addTestSuite(GWTMockUtilitiesTest.class);
     suite.addTestSuite(GWTTestCaseNoClientTest.class);


--
To view, visit https://gwt-review.googlesource.com/3581
To unsubscribe, visit https://gwt-review.googlesource.com/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib9a4afc15c0b7210cd9355186b92655ff5c68631
Gerrit-PatchSet: 4
Gerrit-Project: gwt
Gerrit-Branch: master
Gerrit-Owner: Jason Heim <[email protected]>
Gerrit-Reviewer: Leeroy Jenkins <[email protected]>
Gerrit-Reviewer: Matthew Dempsky <[email protected]>

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors
--- You received this message because you are subscribed to the Google Groups "GWT Contributors" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to