Fix bug of Resource#isSubTypeOf() and improve unit test coverage

Change-Id: I5488c1065a8f83abb110ad67276c30eb719ccd01
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java b/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java
index 33e25c5..f5a9f46 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/ContinuousResource.java
@@ -77,8 +77,7 @@
         String typeName = (String) id.components().get(id.components().size() - 1);
         boolean foundInLeaf = typeName.equals(ancestor.getCanonicalName());
         boolean foundInAncestor = id.components().subList(0, id.components().size()).stream()
-                .map(Object::getClass)
-                .filter(x -> x.equals(ancestor))
+                .filter(x -> ancestor.isAssignableFrom(x.getClass()))
                 .findAny()
                 .isPresent();
         return foundInAncestor || foundInLeaf;
diff --git a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java
index cc3b30a..6504f6d 100644
--- a/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java
+++ b/core/api/src/main/java/org/onosproject/net/newresource/DiscreteResource.java
@@ -66,8 +66,7 @@
         checkNotNull(ancestor);
 
         return id.components().stream()
-                .map(Object::getClass)
-                .filter(x -> x.equals(ancestor))
+                .filter(x -> ancestor.isAssignableFrom(x.getClass()))
                 .findAny()
                 .isPresent();
     }
diff --git a/core/api/src/test/java/org/onosproject/net/newresource/ContinuousResourceTest.java b/core/api/src/test/java/org/onosproject/net/newresource/ContinuousResourceTest.java
index c5952ae..29f5350 100644
--- a/core/api/src/test/java/org/onosproject/net/newresource/ContinuousResourceTest.java
+++ b/core/api/src/test/java/org/onosproject/net/newresource/ContinuousResourceTest.java
@@ -52,6 +52,7 @@
     public void testTypeOf() {
         ContinuousResource continuous = Resources.continuous(D1, P1, Bandwidth.class)
                 .resource(BW1.bps());
+
         assertThat(continuous.isTypeOf(DeviceId.class), is(false));
         assertThat(continuous.isTypeOf(PortNumber.class), is(false));
         assertThat(continuous.isTypeOf(Bandwidth.class), is(true));
@@ -61,6 +62,7 @@
     public void testSubTypeOf() {
         ContinuousResource continuous = Resources.continuous(D1, P1, Bandwidth.class)
                 .resource(BW1.bps());
+
         assertThat(continuous.isSubTypeOf(DeviceId.class), is(true));
         assertThat(continuous.isSubTypeOf(PortNumber.class), is(true));
         assertThat(continuous.isSubTypeOf(Bandwidth.class), is(true));
@@ -68,11 +70,46 @@
     }
 
     @Test
-    public void testValueAs() {
+    public void testSubTypeOfObject() {
+        ContinuousResource continuous = Resources.continuous(D1, P1, Bandwidth.class)
+                .resource(BW1.bps());
+
+        assertThat(continuous.isSubTypeOf(Object.class), is(true));
+    }
+
+    @Test
+    public void testValueAsPrimitiveDouble() {
         ContinuousResource resource = Resources.continuous(D1, P1, Bandwidth.class)
                 .resource(BW1.bps());
 
         Optional<Double> volume = resource.valueAs(double.class);
         assertThat(volume.get(), is(BW1.bps()));
     }
+
+    @Test
+    public void testValueAsDouble() {
+        ContinuousResource resource = Resources.continuous(D1, P1, Bandwidth.class)
+                .resource(BW1.bps());
+
+        Optional<Double> value = resource.valueAs(Double.class);
+        assertThat(value.get(), is(BW1.bps()));
+    }
+
+    @Test
+    public void testValueAsObject() {
+        ContinuousResource resource = Resources.continuous(D1, P1, Bandwidth.class)
+                .resource(BW1.bps());
+
+        Optional<Double> value = resource.valueAs(Double.class);
+        assertThat(value.get(), is(BW1.bps()));
+    }
+
+    @Test
+    public void testValueAsIncompatibleType() {
+        ContinuousResource resource = Resources.continuous(D1, P1, Bandwidth.class)
+                .resource(BW1.bps());
+
+        Optional<VlanId> value = resource.valueAs(VlanId.class);
+        assertThat(value, is(Optional.empty()));
+    }
 }
diff --git a/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceTest.java b/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceTest.java
index 0001c70..612ef1a 100644
--- a/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceTest.java
+++ b/core/api/src/test/java/org/onosproject/net/newresource/DiscreteResourceTest.java
@@ -76,6 +76,7 @@
     @Test
     public void testTypeOf() {
         DiscreteResource discrete = Resources.discrete(D1, P1, VLAN1).resource();
+
         assertThat(discrete.isTypeOf(DeviceId.class), is(false));
         assertThat(discrete.isTypeOf(PortNumber.class), is(false));
         assertThat(discrete.isTypeOf(VlanId.class), is(true));
@@ -84,6 +85,7 @@
     @Test
     public void testSubTypeOf() {
         DiscreteResource discrete = Resources.discrete(D1, P1, VLAN1).resource();
+
         assertThat(discrete.isSubTypeOf(DeviceId.class), is(true));
         assertThat(discrete.isSubTypeOf(PortNumber.class), is(true));
         assertThat(discrete.isSubTypeOf(VlanId.class), is(true));
@@ -91,6 +93,13 @@
     }
 
     @Test
+    public void testSubTypeOfObject() {
+        DiscreteResource discrete = Resources.discrete(D1, P1, VLAN1).resource();
+
+        assertThat(discrete.isSubTypeOf(Object.class), is(true));
+    }
+
+    @Test
     public void testValueAs() {
         DiscreteResource resource = Resources.discrete(D1).resource();