Adds detailed JsType interface instanceof tests.
Adds and organizes tests of instanceof from any of
{jsoWithSyntheticProto, jsoSansProto, jsoWithNativeButtonProto,
javaImplementorOfInterfaceWithProto} to any of {Object,
JsTypeInterfaceWithSameProto, JsTypeInterfaceWithRelatedProto,
JsTypeInterfaceWithUnrelatedProto, RelatedJavaInterface,
UnrelatedJavaInterface}
Change-Id: Iab77ca9cc839659ba1a5ba97af8c5d9cecbfaf33
Review-Link: https://gwt-review.googlesource.com/#/c/11770/
diff --git a/user/test/com/google/gwt/core/client/interop/JsTypeTest.java b/user/test/com/google/gwt/core/client/interop/JsTypeTest.java
index 7d3a111..6eac110 100644
--- a/user/test/com/google/gwt/core/client/interop/JsTypeTest.java
+++ b/user/test/com/google/gwt/core/client/interop/JsTypeTest.java
@@ -193,36 +193,59 @@
assertNotNull(button);
}
- public void testInstanceOf() {
- assertTrue(createMyJsInterface() instanceof MyJsInterface);
+ public void testInstanceOf_jsoWithSyntheticProto() {
+ Object object = createMyJsInterface();
- // JsTypes without prototypes can cross-cast like JSOs
- assertTrue(createMyJsInterface() instanceof ElementLikeJsInterface);
+ assertTrue(object instanceof Object);
+ assertFalse(object instanceof HTMLAnotherElement);
+ assertFalse(object instanceof HTMLButtonElement);
+ assertFalse(object instanceof HTMLElement);
+ assertFalse(object instanceof Iterator);
+ assertTrue(object instanceof MyJsInterface);
+ assertTrue(object instanceof ElementLikeJsInterface);
}
- public void testInstanceOfNative() {
- Object obj = createNativeButton();
- assertTrue(obj instanceof Object);
- assertTrue(obj instanceof HTMLButtonElement);
- assertTrue(obj instanceof HTMLElement);
- assertFalse(obj instanceof Iterator);
- assertTrue(obj instanceof HTMLAnotherElement);
- assertFalse(obj instanceof MyJsInterface);
+ public void testInstanceOf_jsoSansProto() {
+ Object object = JavaScriptObject.createObject();
- // to foil type tightening
- obj = alwaysTrue() ? new MyCustomHtmlButtonWithIterator() : null;
- assertTrue(obj instanceof Object);
- assertTrue(obj instanceof HTMLButtonElement);
- assertTrue(obj instanceof HTMLElement);
- assertTrue(obj instanceof Iterable);
+ assertTrue(object instanceof Object);
+ assertFalse(object instanceof HTMLAnotherElement);
+ assertFalse(object instanceof HTMLButtonElement);
+ assertFalse(object instanceof HTMLElement);
+ assertFalse(object instanceof Iterator);
+ assertFalse(object instanceof MyJsInterface);
+ assertTrue(object instanceof ElementLikeJsInterface);
+ }
+
+ public void testInstanceOf_jsoWithNativeButtonProto() {
+ Object object = createNativeButton();
+
+ assertTrue(object instanceof Object);
+ assertTrue(object instanceof HTMLAnotherElement);
+ assertTrue(object instanceof HTMLButtonElement);
+ assertTrue(object instanceof HTMLElement);
+ assertFalse(object instanceof Iterator);
+ assertFalse(object instanceof MyJsInterface);
+ assertTrue(object instanceof ElementLikeJsInterface);
+ }
+
+ public void testInstanceOf_javaImplementorOfInterfaceWithProto() {
+ // Foils type tightening.
+ Object object = alwaysTrue() ? new MyCustomHtmlButtonWithIterator() : new Object();
+
+ assertTrue(object instanceof Object);
+ assertTrue(object instanceof HTMLAnotherElement);
+ assertTrue(object instanceof HTMLButtonElement);
+ assertTrue(object instanceof HTMLElement);
+ assertTrue(object instanceof Iterable);
/*
* TODO: this works, but only because Object can't be type-tightened to HTMLElement. But it will
- * evaluate statically to false for HTMLElement instanceof HTMLAnotherElement. Depending on
- * what the spec decides, fix JTypeOracle so that canTheoreticallyCast returns the appropriate
+ * evaluate statically to false for HTMLElement instanceof HTMLAnotherElement. Depending on what
+ * the spec decides, fix JTypeOracle so that canTheoreticallyCast returns the appropriate
* result, as well as add a test here that can be type-tightened.
*/
- assertTrue(obj instanceof HTMLAnotherElement);
- assertFalse(obj instanceof MyJsInterface);
+ assertFalse(object instanceof MyJsInterface);
+ assertTrue(object instanceof ElementLikeJsInterface);
}
public void testInstanceOfWithNameSpace() {