Author: [email protected]
Date: Fri Jul 10 07:02:01 2009
New Revision: 5711
Added:
trunk/user/src/com/google/gwt/junit/FakeMessagesMaker.java
trunk/user/test/com/google/gwt/junit/FakeMessagesMakerTest.java
trunk/user/test/com/google/gwt/junit/JUnitSuite.java
Modified:
trunk/user/src/com/google/gwt/user/client/ui/HTMLPanel.java
trunk/user/test/com/google/gwt/user/client/ui/HTMLPanelTest.java
Log:
HTMLPanel now allows an arbitrary element to be set as its root, new
constructor HTMLPanel(String tag, String html)
http://gwt-code-reviews.appspot.com/39802
Introduces FakeMessagesMaker, to allow JUnit (non-GWTTestCase) testing
of objects that rely on generated Messages objects.
http://gwt-code-reviews.appspot.com/48809
Added: trunk/user/src/com/google/gwt/junit/FakeMessagesMaker.java
==============================================================================
--- (empty file)
+++ trunk/user/src/com/google/gwt/junit/FakeMessagesMaker.java Fri Jul 10
07:02:01 2009
@@ -0,0 +1,48 @@
+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>
+ * Note that the default message text is very consciously not made
available
+ * through the fake, to help tests ensure that specific translations of
+ * localized text are not relied upon.
+ * <p>
+ * Sample use:
+ *
+ * <pre>interface MyMessages extends Messages {
+ * @DefaultMessage("Isn''t this the fakiest?")
+ * @Description("A sample message to be tested.")
+ * String myMessage();
+ * }
+ *
+ * public void testSimple() {
+ * MyMessages messages = FakeMessagesMaker.create(MyMessages.class);
+ * assertEquals("myMessage", messages.myMessage());
+ * }
+ * </pre>
+ */
+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);
+ }
+}
Modified: trunk/user/src/com/google/gwt/user/client/ui/HTMLPanel.java
==============================================================================
--- trunk/user/src/com/google/gwt/user/client/ui/HTMLPanel.java (original)
+++ trunk/user/src/com/google/gwt/user/client/ui/HTMLPanel.java Fri Jul 10
07:02:01 2009
@@ -40,16 +40,29 @@
}
/**
- * Creates an HTML panel with the specified HTML contents. Any element
within
- * this HTML that has a specified id can contain a child widget.
+ * Creates an HTML panel with the specified HTML contents inside a DIV
+ * element. Any element within this HTML that has a specified id can
contain a
+ * child widget.
*
* @param html the panel's HTML
*/
public HTMLPanel(String html) {
- setElement(DOM.createDiv());
- DOM.setInnerHTML(getElement(), html);
+ this("div", html);
}
+ /**
+ * Creates an HTML panel whose root element has the given tag, and with
the
+ * specified HTML contents. Any element within this HTML that has a
specified
+ * id can contain a child widget.
+ *
+ * @param tag the tag of the root element
+ * @param html the panel's HTML
+ */
+ public HTMLPanel(String tag, String html) {
+ setElement(DOM.createElement(tag));
+ DOM.setInnerHTML(getElement(), html);
+ }
+
/**
* Adds a child widget to the panel, contained within the HTML element
* specified by a given id.
Added: trunk/user/test/com/google/gwt/junit/FakeMessagesMakerTest.java
==============================================================================
--- (empty file)
+++ trunk/user/test/com/google/gwt/junit/FakeMessagesMakerTest.java Fri Jul
10 07:02:01 2009
@@ -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"));
+ }
+}
Added: trunk/user/test/com/google/gwt/junit/JUnitSuite.java
==============================================================================
--- (empty file)
+++ trunk/user/test/com/google/gwt/junit/JUnitSuite.java Fri Jul 10
07:02:01 2009
@@ -0,0 +1,34 @@
+package com.google.gwt.junit;
+
+import com.google.gwt.junit.client.BenchmarkTest;
+import com.google.gwt.junit.client.GWTTestCaseTest;
+import com.google.gwt.junit.remote.BrowserManagerServerTest;
+import com.google.gwt.junit.tools.GWTTestSuite;
+
+import junit.framework.Test;
+
+/**
+ * Tests of the junit package.
+ */
+public class JUnitSuite {
+ public static Test suite() {
+ GWTTestSuite suite = new GWTTestSuite("Test for suite for
com.google.gwt.junit");
+
+ suite.addTestSuite(FakeMessagesMakerTest.class);
+
+ // client
+ // Suppressed due to flakiness on Linux
+ // suite.addTestSuite(BenchmarkTest.class);
+ suite.addTestSuite(GWTTestCaseTest.class);
+
+ // These two are intended only to be run manually. See class comments
+ // suite.addTestSuite(ParallelRemoteTest.class);
+ // suite.addTestSuite(TestManualAsync.class);
+
+ // remote
+ // Run manually only, launches servers that die on port contention
+ // suite.addTestSuite(BrowserManagerServerTest.class);
+
+ return suite;
+ }
+}
Modified: trunk/user/test/com/google/gwt/user/client/ui/HTMLPanelTest.java
==============================================================================
--- trunk/user/test/com/google/gwt/user/client/ui/HTMLPanelTest.java
(original)
+++ trunk/user/test/com/google/gwt/user/client/ui/HTMLPanelTest.java Fri
Jul 10 07:02:01 2009
@@ -1,12 +1,12 @@
/*
* Copyright 2008 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
@@ -117,6 +117,28 @@
Node next = button.getElement().getNextSibling();
assertEquals("bar", next.getNodeValue());
+ }
+
+ /**
+ * Tests arbitrary root tag
+ */
+ public void testCustomRootTag() {
+ HTMLPanel hp = new HTMLPanel("table", "<tr><td>Hello <span
id='labelHere'></span></td></tr>");
+ InlineLabel label = new InlineLabel("World");
+ hp.addAndReplaceElement(label, "labelHere");
+
+ Element parent = label.getElement().getParentElement();
+ assertEquals("td", parent.getTagName().toLowerCase());
+
+ parent = parent.getParentElement();
+ assertEquals("tr", parent.getTagName().toLowerCase());
+
+ while (parent != null && parent != hp.getElement()) {
+ parent = parent.getParentElement();
+ }
+
+ assertNotNull(parent);
+ assertEquals("table", parent.getTagName().toLowerCase());
}
/**
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---