Committed by
Gerrit Code Review
Fix bug of Resource#isSubTypeOf() and improve unit test coverage
Change-Id: I5488c1065a8f83abb110ad67276c30eb719ccd01
Showing
4 changed files
with
49 additions
and
5 deletions
| ... | @@ -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 | ... | ... |
-
Please register or login to post a comment