Fix nested augmentations
[yangtools.git] / data / yang-data-api / src / test / java / org / opendaylight / yangtools / yang / data / api / schema / stream / YT1433Test.java
diff --git a/data/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/stream/YT1433Test.java b/data/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/stream/YT1433Test.java
new file mode 100644 (file)
index 0000000..6bc5b5d
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2022 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.data.api.schema.stream;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.io.IOException;
+import java.util.Set;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
+
+public class YT1433Test {
+    private static EffectiveModelContext CONTEXT;
+
+    @BeforeAll
+    public static void beforeAll() {
+        CONTEXT = YangParserTestUtils.parseYangResourceDirectory("/YT1433");
+    }
+
+    @Test
+    public void testContainerAugmentContainer() throws IOException {
+        final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
+
+        final QName bar = QName.create("foo", "bar");
+        final QName baz = QName.create("foo", "baz");
+
+        final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
+            .node(QName.create("foo", "foo"))
+            .node(AugmentationIdentifier.create(Set.of(bar)))
+            .node(bar)
+            .node(AugmentationIdentifier.create(Set.of(baz)))
+            .node(baz)
+            .build();
+
+        try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
+            try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
+                // No-op
+            }
+        }
+
+        assertEquals("(foo)foo(container)\n"
+            + "  AugmentationIdentifier{childNames=[(foo)bar]}(augmentation)\n"
+            + "    (foo)bar(container)\n"
+            + "      AugmentationIdentifier{childNames=[(foo)baz]}(augmentation)\n"
+            + "        (foo)baz(container)\n"
+            + "        (end)\n"
+            + "      (end)\n"
+            + "    (end)\n"
+            + "  (end)\n"
+            + "(end)\n", streamWriter.result());
+    }
+
+    @Test
+    public void testChoiceAugmentCointainer() throws IOException {
+        final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
+
+        final QName bar = QName.create("bar", "bar");
+        final QName baz = QName.create("bar", "baz");
+
+        final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
+            .node(QName.create("bar", "foo"))
+            .node(bar)
+            .node(baz)
+            .build();
+
+        try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
+            try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
+                // No-op
+            }
+        }
+
+        assertEquals("(bar)foo(choice)\n"
+            + "  (bar)bar(container)\n"
+            + "    (bar)baz(container)\n"
+            + "    (end)\n"
+            + "  (end)\n"
+            + "(end)\n", streamWriter.result());
+    }
+}