Convert yang-data-impl to a JPMS module
[yangtools.git] / yang / yang-data-impl / src / test / java / org / opendaylight / yangtools / yang / data / impl / schema / tree / YT776Test.java
index 322e6837a9ab19867e850013039e3db8768c1f7b..2e8f7d7b9645110059ab0335edae6890d8d77de1 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
+import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.choiceBuilder;
 import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.containerBuilder;
 import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.leafBuilder;
 import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.leafSetBuilder;
@@ -30,7 +31,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class YT776Test {
     private static final QName MODULE = QName.create("yt776", "yt776");
@@ -38,7 +39,7 @@ public class YT776Test {
     private static final QName OBJECT = QName.create(MODULE, "object");
     private static final QName OBJECT_ID = QName.create(MODULE, "object-id");
     private static final NodeIdentifier OBJECT_LIST = new NodeIdentifier(OBJECT);
-    private static final NodeIdentifierWithPredicates OBJECT_ITEM = new NodeIdentifierWithPredicates(OBJECT,
+    private static final NodeIdentifierWithPredicates OBJECT_ITEM = NodeIdentifierWithPredicates.of(OBJECT,
         ImmutableMap.of(OBJECT_ID, "1"));
     private static final LeafNode<?> OBJECT_ID_LEAF = leafBuilder().withNodeIdentifier(new NodeIdentifier(OBJECT_ID))
             .withValue("1").build();
@@ -47,16 +48,23 @@ public class YT776Test {
     private static final QName NESTED = QName.create(MODULE, "nested");
     private static final QName NESTED_ATTRIBUTE = QName.create(MODULE, "nested-attribute");
     private static final NodeIdentifier NESTED_LIST = new NodeIdentifier(NESTED);
-    private static final NodeIdentifierWithPredicates NESTED_ITEM = new NodeIdentifierWithPredicates(NESTED,
+    private static final NodeIdentifierWithPredicates NESTED_ITEM = NodeIdentifierWithPredicates.of(NESTED,
         ImmutableMap.of(NESTED_ATTRIBUTE, "foo"));
 
-    private static SchemaContext SCHEMA_CONTEXT;
+    private static final NodeIdentifier ANY_OF = new NodeIdentifier(QName.create(MODULE, "any-of"));
+    private static final QName SOME_LEAF = QName.create(MODULE, "some-leaf");
+    private static final NodeIdentifier SOME_LEAF_ID = new NodeIdentifier(SOME_LEAF);
+    private static final QName SOME_LIST = QName.create(MODULE, "some-list");
+    private static final NodeIdentifier SOME_LIST_ID = new NodeIdentifier(SOME_LIST);
+    private static final NodeIdentifierWithPredicates SOME_LIST_ITEM = NodeIdentifierWithPredicates.of(SOME_LIST,
+                ImmutableMap.of(SOME_LEAF, "foo"));
+    private static EffectiveModelContext SCHEMA_CONTEXT;
 
     private DataTree dataTree;
 
     @BeforeClass
     public static void beforeClass() {
-        SCHEMA_CONTEXT = TestModel.createTestContext("/yt776/yt776.yang");
+        SCHEMA_CONTEXT = TestModel.createTestContext("/yt776.yang");
     }
 
     @AfterClass
@@ -212,6 +220,31 @@ public class YT776Test {
         commit(mod);
     }
 
+    @Test
+    public void testDisappearInChoice() throws DataValidationFailedException {
+        DataTreeModification mod = dataTree.takeSnapshot().newModification();
+        // Initialize choice with list
+        mod.write(YangInstanceIdentifier.create(BOX), containerBuilder().withNodeIdentifier(BOX)
+            .withChild(choiceBuilder().withNodeIdentifier(ANY_OF)
+                .withChild(mapBuilder().withNodeIdentifier(SOME_LIST_ID)
+                    .withChild(mapEntryBuilder()
+                        .withNodeIdentifier(SOME_LIST_ITEM)
+                        .withChild(leafBuilder().withNodeIdentifier(SOME_LEAF_ID).withValue("foo").build())
+                        .build())
+                    .build())
+                .build())
+            .build());
+        commit(mod);
+
+        // Now delete the single item, causing the list to fizzle, while creating the alterinative case
+        mod = dataTree.takeSnapshot().newModification();
+        mod.delete(YangInstanceIdentifier.create(BOX, ANY_OF, SOME_LIST_ID, SOME_LIST_ITEM));
+        mod.write(YangInstanceIdentifier.create(BOX, ANY_OF, SOME_LEAF_ID),
+            leafBuilder().withNodeIdentifier(SOME_LEAF_ID).withValue("foo").build());
+
+        commit(mod);
+    }
+
     private DataTreeModification write(final ContainerNode data) throws DataValidationFailedException {
         final DataTreeModification mod = dataTree.takeSnapshot().newModification();
         mod.write(YangInstanceIdentifier.create(BOX), data);