Fix identityref wildcards
[mdsal.git] / binding / yang-binding / src / test / java / org / opendaylight / yangtools / yang / binding / CodeHelpersTest.java
index a3d81ea2d2fe2650134c12f64e25f3deafa2d8a1..102ce23fcbce7b46541991d139ae18bdca2715e1 100644 (file)
@@ -7,7 +7,10 @@
  */
 package org.opendaylight.yangtools.yang.binding;
 
+import static org.hamcrest.CoreMatchers.allOf;
+import static org.hamcrest.CoreMatchers.endsWith;
 import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.startsWith;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
@@ -29,6 +32,24 @@ public class CodeHelpersTest {
         assertThat(iae.getCause(), instanceOf(ClassCastException.class));
     }
 
+    @Test
+    public void testCheckedFieldCastIdentity() {
+        assertNull(CodeHelpers.checkFieldCastIdentity(Identity.class, "foo", null));
+        assertSame(Identity.class, CodeHelpers.checkFieldCastIdentity(Identity.class, "foo", Identity.class));
+        assertSame(DerivedIdentity.class, CodeHelpers.checkFieldCastIdentity(Identity.class, "foo",
+            DerivedIdentity.class));
+
+        IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
+            () -> CodeHelpers.checkFieldCastIdentity(Identity.class, "foo", new Object()));
+        assertThat(iae.getMessage(), allOf(
+            startsWith("Invalid input value \"java.lang.Object"),
+            endsWith("\" for property \"foo\"")));
+
+        iae = assertThrows(IllegalArgumentException.class,
+            () -> CodeHelpers.checkFieldCastIdentity(Identity.class, "foo", BaseIdentity.class));
+        assertThat(iae.getCause(), instanceOf(ClassCastException.class));
+    }
+
     @Test
     public void testCheckListFieldCast() {
         assertNull(CodeHelpers.checkListFieldCast(CodeHelpersTest.class, "foo", null));
@@ -45,6 +66,29 @@ public class CodeHelpersTest {
         assertThat(iae.getCause(), instanceOf(ClassCastException.class));
     }
 
+    @Test
+    public void testCheckListFieldCastIdentity() {
+        assertNull(CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", null));
+        assertSame(List.of(), CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", List.of()));
+
+        final var list = List.of(Identity.class);
+        assertSame(list, CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", list));
+        final var derivedList = List.of(DerivedIdentity.class);
+        assertSame(derivedList, CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", derivedList));
+
+        IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
+            () -> CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", Collections.singletonList(null)));
+        assertThat(iae.getCause(), instanceOf(NullPointerException.class));
+
+        iae = assertThrows(IllegalArgumentException.class,
+            () -> CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", List.of(new Object())));
+        assertThat(iae.getCause(), instanceOf(ClassCastException.class));
+
+        iae = assertThrows(IllegalArgumentException.class,
+            () -> CodeHelpers.checkListFieldCastIdentity(Identity.class, "foo", List.of(BaseIdentity.class)));
+        assertThat(iae.getCause(), instanceOf(ClassCastException.class));
+    }
+
     @Test
     public void testCheckSetFieldCast() {
         assertNull(CodeHelpers.checkSetFieldCast(CodeHelpersTest.class, "foo", null));
@@ -60,4 +104,35 @@ public class CodeHelpersTest {
             () -> CodeHelpers.checkSetFieldCast(CodeHelpersTest.class, "foo", Set.of(new Object())));
         assertThat(iae.getCause(), instanceOf(ClassCastException.class));
     }
+
+    @Test
+    public void testCheckSetFieldCastIdentity() {
+        assertNull(CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", null));
+        assertSame(Set.of(), CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", Set.of()));
+
+        final var set = Set.of(Identity.class);
+        assertSame(set, CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", set));
+        final var derivedSet = Set.of(DerivedIdentity.class);
+        assertSame(derivedSet, CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", derivedSet));
+
+        IllegalArgumentException iae = assertThrows(IllegalArgumentException.class,
+            () -> CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", Collections.singleton(null)));
+        assertThat(iae.getCause(), instanceOf(NullPointerException.class));
+
+        iae = assertThrows(IllegalArgumentException.class,
+            () -> CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", Set.of(new Object())));
+        assertThat(iae.getCause(), instanceOf(ClassCastException.class));
+
+        iae = assertThrows(IllegalArgumentException.class,
+            () -> CodeHelpers.checkSetFieldCastIdentity(Identity.class, "foo", Set.of(BaseIdentity.class)));
+        assertThat(iae.getCause(), instanceOf(ClassCastException.class));
+    }
+
+    private interface Identity extends BaseIdentity {
+
+    }
+
+    private interface DerivedIdentity extends Identity {
+
+    }
 }