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 -~----------~----~----~----~------~----~------~--~---