Remove coercion to null in Element#getPropertyObject
Now that Boolean and Doubles are never boxed, the coercion to null
meant that getPropertyObject will actually coerce a boolean false or
number 0 or NaN to null rather than returning a java.lang.Boolean or
java.lang.Double respectively.
There's a small breaking change for empty-string values that would
no longer be coerced to null.
Bug: #9455
Change-Id: I1afd13443845e7509989c4d44f6858cb709ca92d
Bug-Link: https://github.com/gwtproject/gwt/issues/9455
diff --git a/user/src/com/google/gwt/dom/client/Element.java b/user/src/com/google/gwt/dom/client/Element.java
index 55a3899..ef8bf34 100644
--- a/user/src/com/google/gwt/dom/client/Element.java
+++ b/user/src/com/google/gwt/dom/client/Element.java
@@ -401,7 +401,7 @@
* @return the property value
*/
public final native Object getPropertyObject(String name) /*-{
- return this[name] || null;
+ return this[name];
}-*/;
/**
diff --git a/user/test/com/google/gwt/dom/client/ElementTest.java b/user/test/com/google/gwt/dom/client/ElementTest.java
index db8ba28..0b4fafa 100644
--- a/user/test/com/google/gwt/dom/client/ElementTest.java
+++ b/user/test/com/google/gwt/dom/client/ElementTest.java
@@ -521,6 +521,22 @@
JavaScriptObject jso = createTrivialJSO();
div.setPropertyJSO("tintin", jso);
assertEquals(jso, div.getPropertyJSO("tintin"));
+
+ assertNull(div.getPropertyObject("inexistant_property_at_least_we_hope_so"));
+ div.setPropertyObject("baz", Boolean.TRUE);
+ assertEquals(Boolean.TRUE, div.getPropertyObject("baz"));
+ div.setPropertyObject("baz", Boolean.FALSE);
+ assertEquals(Boolean.FALSE, div.getPropertyObject("baz"));
+ div.setPropertyObject("baz", 42.0);
+ assertEquals(42.0, div.getPropertyObject("baz"));
+ div.setPropertyObject("baz", 0.0);
+ assertEquals(0.0, div.getPropertyObject("baz"));
+ div.setPropertyObject("baz", Double.NaN);
+ assertTrue(Double.isNaN((Double) div.getPropertyObject("baz")));
+ div.setPropertyObject("baz", "tintin");
+ assertEquals("tintin", div.getPropertyObject("baz"));
+ div.setPropertyObject("baz", "");
+ assertEquals("", div.getPropertyObject("baz"));
}
/**