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() {