Add a static method UIObject.ensureDebugId(Element, String) that allows users to add a debug ID to an arbitrary element. Patch by: jlabanca Review by: knorton (desk review) git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@2851 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/UIObject.java b/user/src/com/google/gwt/user/client/ui/UIObject.java index 9759631..d6279a1 100644 --- a/user/src/com/google/gwt/user/client/ui/UIObject.java +++ b/user/src/com/google/gwt/user/client/ui/UIObject.java
@@ -102,6 +102,11 @@ // parameters public void ensureDebugId(UIObject uiObject, String id) { } + + @SuppressWarnings("unused") + // parameters + public void ensureDebugId(Element elem, String id) { + } } /** @@ -113,6 +118,11 @@ public void ensureDebugId(UIObject uiObject, String id) { uiObject.onEnsureDebugId(id); } + + @Override + public void ensureDebugId(Element elem, String id) { + UIObject.ensureDebugId(elem, "", id); + } } public static final String DEBUG_ID_PREFIX = "gwt-debug-"; @@ -130,6 +140,29 @@ private static final String NULL_HANDLE_MSG = "Null widget handle. If you " + "are creating a composite, ensure that initWidget() has been called."; + /** + * <p> + * Ensure that elem has an ID property set, which allows it to integrate with + * third-party libraries and test tools. If elem already has an ID, this + * method WILL override it. The ID that you specify will be prefixed by the + * static string {@link #DEBUG_ID_PREFIX}. + * </p> + * + * <p> + * This method will be compiled out and will have no effect unless you inherit + * the DebugID module in your gwt.xml file by adding the following line: + * + * <pre class="code"> + * <inherits name="com.google.gwt.user.Debug"/></pre> + * </p> + * + * @param elem the target {@link Element} + * @param id the ID to set on the element + */ + public static void ensureDebugId(Element elem, String id) { + debugIdImpl.ensureDebugId(elem, id); + } + public static native boolean isVisible(Element elem) /*-{ return (elem.style.display != 'none'); }-*/; @@ -476,7 +509,7 @@ */ public com.google.gwt.user.client.Element getElement() { assert (element != null) : MISSING_ELEMENT_ERROR; - return (com.google.gwt.user.client.Element)element; + return (com.google.gwt.user.client.Element) element; } /** @@ -752,7 +785,7 @@ * @param elem the object's element */ protected final void setElement(Element elem) { - setElement((com.google.gwt.user.client.Element)elem); + setElement((com.google.gwt.user.client.Element) elem); } /**
diff --git a/user/test/com/google/gwt/user/client/ui/UIObjectTest.java b/user/test/com/google/gwt/user/client/ui/UIObjectTest.java index a3ff445..7c151f1 100644 --- a/user/test/com/google/gwt/user/client/ui/UIObjectTest.java +++ b/user/test/com/google/gwt/user/client/ui/UIObjectTest.java
@@ -112,6 +112,25 @@ assertEquals("primary", o.getStylePrimaryName()); } + public void testDebugIdOnElement() { + // Test basic set + Element oElem = DOM.createDiv(); + UIObject.ensureDebugId(oElem, "test1"); + assertDebugId("test1", oElem); + + // Test override with new ID + UIObject.ensureDebugId(oElem, "test2"); + assertDebugId("test2", oElem); + + // Test setting actual id + DOM.setElementProperty(oElem, "id", "mytest"); + assertEquals("mytest", DOM.getElementProperty(oElem, "id")); + + // Test overriding with debug ID succeeds if ID present + UIObject.ensureDebugId(oElem, "test3"); + assertDebugId("test3", oElem); + } + public void testDebugId() { // Test basic set MyObject o = new MyObject();