Sho SHIMIZU
Committed by Gerrit Code Review

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

Change-Id: I5488c1065a8f83abb110ad67276c30eb719ccd01
...@@ -77,8 +77,7 @@ public final class ContinuousResource implements Resource { ...@@ -77,8 +77,7 @@ public final class ContinuousResource implements Resource {
77 String typeName = (String) id.components().get(id.components().size() - 1); 77 String typeName = (String) id.components().get(id.components().size() - 1);
78 boolean foundInLeaf = typeName.equals(ancestor.getCanonicalName()); 78 boolean foundInLeaf = typeName.equals(ancestor.getCanonicalName());
79 boolean foundInAncestor = id.components().subList(0, id.components().size()).stream() 79 boolean foundInAncestor = id.components().subList(0, id.components().size()).stream()
80 - .map(Object::getClass) 80 + .filter(x -> ancestor.isAssignableFrom(x.getClass()))
81 - .filter(x -> x.equals(ancestor))
82 .findAny() 81 .findAny()
83 .isPresent(); 82 .isPresent();
84 return foundInAncestor || foundInLeaf; 83 return foundInAncestor || foundInLeaf;
......
...@@ -66,8 +66,7 @@ public final class DiscreteResource implements Resource { ...@@ -66,8 +66,7 @@ public final class DiscreteResource implements Resource {
66 checkNotNull(ancestor); 66 checkNotNull(ancestor);
67 67
68 return id.components().stream() 68 return id.components().stream()
69 - .map(Object::getClass) 69 + .filter(x -> ancestor.isAssignableFrom(x.getClass()))
70 - .filter(x -> x.equals(ancestor))
71 .findAny() 70 .findAny()
72 .isPresent(); 71 .isPresent();
73 } 72 }
......
...@@ -52,6 +52,7 @@ public class ContinuousResourceTest { ...@@ -52,6 +52,7 @@ public class ContinuousResourceTest {
52 public void testTypeOf() { 52 public void testTypeOf() {
53 ContinuousResource continuous = Resources.continuous(D1, P1, Bandwidth.class) 53 ContinuousResource continuous = Resources.continuous(D1, P1, Bandwidth.class)
54 .resource(BW1.bps()); 54 .resource(BW1.bps());
55 +
55 assertThat(continuous.isTypeOf(DeviceId.class), is(false)); 56 assertThat(continuous.isTypeOf(DeviceId.class), is(false));
56 assertThat(continuous.isTypeOf(PortNumber.class), is(false)); 57 assertThat(continuous.isTypeOf(PortNumber.class), is(false));
57 assertThat(continuous.isTypeOf(Bandwidth.class), is(true)); 58 assertThat(continuous.isTypeOf(Bandwidth.class), is(true));
...@@ -61,6 +62,7 @@ public class ContinuousResourceTest { ...@@ -61,6 +62,7 @@ public class ContinuousResourceTest {
61 public void testSubTypeOf() { 62 public void testSubTypeOf() {
62 ContinuousResource continuous = Resources.continuous(D1, P1, Bandwidth.class) 63 ContinuousResource continuous = Resources.continuous(D1, P1, Bandwidth.class)
63 .resource(BW1.bps()); 64 .resource(BW1.bps());
65 +
64 assertThat(continuous.isSubTypeOf(DeviceId.class), is(true)); 66 assertThat(continuous.isSubTypeOf(DeviceId.class), is(true));
65 assertThat(continuous.isSubTypeOf(PortNumber.class), is(true)); 67 assertThat(continuous.isSubTypeOf(PortNumber.class), is(true));
66 assertThat(continuous.isSubTypeOf(Bandwidth.class), is(true)); 68 assertThat(continuous.isSubTypeOf(Bandwidth.class), is(true));
...@@ -68,11 +70,46 @@ public class ContinuousResourceTest { ...@@ -68,11 +70,46 @@ public class ContinuousResourceTest {
68 } 70 }
69 71
70 @Test 72 @Test
71 - public void testValueAs() { 73 + public void testSubTypeOfObject() {
74 + ContinuousResource continuous = Resources.continuous(D1, P1, Bandwidth.class)
75 + .resource(BW1.bps());
76 +
77 + assertThat(continuous.isSubTypeOf(Object.class), is(true));
78 + }
79 +
80 + @Test
81 + public void testValueAsPrimitiveDouble() {
72 ContinuousResource resource = Resources.continuous(D1, P1, Bandwidth.class) 82 ContinuousResource resource = Resources.continuous(D1, P1, Bandwidth.class)
73 .resource(BW1.bps()); 83 .resource(BW1.bps());
74 84
75 Optional<Double> volume = resource.valueAs(double.class); 85 Optional<Double> volume = resource.valueAs(double.class);
76 assertThat(volume.get(), is(BW1.bps())); 86 assertThat(volume.get(), is(BW1.bps()));
77 } 87 }
88 +
89 + @Test
90 + public void testValueAsDouble() {
91 + ContinuousResource resource = Resources.continuous(D1, P1, Bandwidth.class)
92 + .resource(BW1.bps());
93 +
94 + Optional<Double> value = resource.valueAs(Double.class);
95 + assertThat(value.get(), is(BW1.bps()));
96 + }
97 +
98 + @Test
99 + public void testValueAsObject() {
100 + ContinuousResource resource = Resources.continuous(D1, P1, Bandwidth.class)
101 + .resource(BW1.bps());
102 +
103 + Optional<Double> value = resource.valueAs(Double.class);
104 + assertThat(value.get(), is(BW1.bps()));
105 + }
106 +
107 + @Test
108 + public void testValueAsIncompatibleType() {
109 + ContinuousResource resource = Resources.continuous(D1, P1, Bandwidth.class)
110 + .resource(BW1.bps());
111 +
112 + Optional<VlanId> value = resource.valueAs(VlanId.class);
113 + assertThat(value, is(Optional.empty()));
114 + }
78 } 115 }
......
...@@ -76,6 +76,7 @@ public class DiscreteResourceTest { ...@@ -76,6 +76,7 @@ public class DiscreteResourceTest {
76 @Test 76 @Test
77 public void testTypeOf() { 77 public void testTypeOf() {
78 DiscreteResource discrete = Resources.discrete(D1, P1, VLAN1).resource(); 78 DiscreteResource discrete = Resources.discrete(D1, P1, VLAN1).resource();
79 +
79 assertThat(discrete.isTypeOf(DeviceId.class), is(false)); 80 assertThat(discrete.isTypeOf(DeviceId.class), is(false));
80 assertThat(discrete.isTypeOf(PortNumber.class), is(false)); 81 assertThat(discrete.isTypeOf(PortNumber.class), is(false));
81 assertThat(discrete.isTypeOf(VlanId.class), is(true)); 82 assertThat(discrete.isTypeOf(VlanId.class), is(true));
...@@ -84,6 +85,7 @@ public class DiscreteResourceTest { ...@@ -84,6 +85,7 @@ public class DiscreteResourceTest {
84 @Test 85 @Test
85 public void testSubTypeOf() { 86 public void testSubTypeOf() {
86 DiscreteResource discrete = Resources.discrete(D1, P1, VLAN1).resource(); 87 DiscreteResource discrete = Resources.discrete(D1, P1, VLAN1).resource();
88 +
87 assertThat(discrete.isSubTypeOf(DeviceId.class), is(true)); 89 assertThat(discrete.isSubTypeOf(DeviceId.class), is(true));
88 assertThat(discrete.isSubTypeOf(PortNumber.class), is(true)); 90 assertThat(discrete.isSubTypeOf(PortNumber.class), is(true));
89 assertThat(discrete.isSubTypeOf(VlanId.class), is(true)); 91 assertThat(discrete.isSubTypeOf(VlanId.class), is(true));
...@@ -91,6 +93,13 @@ public class DiscreteResourceTest { ...@@ -91,6 +93,13 @@ public class DiscreteResourceTest {
91 } 93 }
92 94
93 @Test 95 @Test
96 + public void testSubTypeOfObject() {
97 + DiscreteResource discrete = Resources.discrete(D1, P1, VLAN1).resource();
98 +
99 + assertThat(discrete.isSubTypeOf(Object.class), is(true));
100 + }
101 +
102 + @Test
94 public void testValueAs() { 103 public void testValueAs() {
95 DiscreteResource resource = Resources.discrete(D1).resource(); 104 DiscreteResource resource = Resources.discrete(D1).resource();
96 105
......