Reviewers: scottb,

Description:
Brian Stoler cooked up this dynamic proxy factory to allow JUnit tests
of objects that rely on generated Messages classes.

Is this the right package for it? GWTMockUtilities live here so it
seemed right.

What suite can I wire the unit test into?


Please review this at http://gwt-code-reviews.appspot.com/48809

Affected files:
   user/src/com/google/gwt/junit/FakeMessagesMaker.java
   user/src/com/google/gwt/junit/FakeMessagesMakerTest.java


Index: user/src/com/google/gwt/junit/FakeMessagesMaker.java
===============================================================
--- user/src/com/google/gwt/junit/FakeMessagesMaker.java        (revision 0)
+++ user/src/com/google/gwt/junit/FakeMessagesMaker.java        (revision 0)
@@ -0,0 +1,33 @@
+package com.google.gwt.junit;
+
+import com.google.gwt.i18n.client.Messages;
+
+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 Messages} 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>
+ * See {...@link FakeMessagesMakerTest} for a sample use.
+ */
+public class FakeMessagesMaker implements InvocationHandler {
+  public static <T extends Messages> T create(Class<T> messagesClass) {
+    return messagesClass.cast(Proxy.newProxyInstance(
+        FakeMessagesMaker.class.getClassLoader(),
+        new Class[] { messagesClass },
+        new FakeMessagesMaker()));
+  }
+
+  public Object invoke(Object proxy, Method method, Object[] args)
+      throws Throwable {
+    String name = method.getName();
+
+    return (args == null || args.length == 0) ? name : name
+        + Arrays.asList(args);
+  }
+}
Index: user/src/com/google/gwt/junit/FakeMessagesMakerTest.java
===============================================================
--- user/src/com/google/gwt/junit/FakeMessagesMakerTest.java    (revision 0)
+++ user/src/com/google/gwt/junit/FakeMessagesMakerTest.java    (revision 0)
@@ -0,0 +1,29 @@
+package com.google.gwt.junit;
+
+import com.google.gwt.i18n.client.Messages;
+
+import junit.framework.TestCase;
+
+public class FakeMessagesMakerTest extends TestCase {
+  interface MyMessages extends Messages {
+    @DefaultMessage("Isn''t this the fakiest?")
+    @Description("A sample message to be tested.")
+    String myMessage();
+
+    @DefaultMessage("Isn''t this the fakiest? Pick one: {1} or {2}?")
+    @Description("A sample message with parameters.")
+    String myArgumentedMessage(@Example("yes") String yes,
+        @Example("no") String no);
+  }
+
+  public void testSimple() {
+    MyMessages messages = FakeMessagesMaker.create(MyMessages.class);
+    assertEquals("myMessage", messages.myMessage());
+  }
+
+  public void testArgs() {
+    MyMessages messages = FakeMessagesMaker.create(MyMessages.class);
+    assertEquals("myArgumentedMessage[oui, non]",
+        messages.myArgumentedMessage("oui", "non"));
+  }
+}




--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to