import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
+import org.opendaylight.yangtools.yang.model.util.EffectiveAugmentationSchema;
/**
* Utility for emitting a {@link YangInstanceIdentifier} into a {@link NormalizedNodeStreamWriter} as a set of
final var arg = it.next();
if (arg instanceof AugmentationIdentifier) {
if (!(parent instanceof AugmentationTarget)) {
- throw new IOException(parent + " does not support augmentations, cannot resolve" + arg);
+ throw new IOException(parent + " does not support augmentations, cannot resolve " + arg);
}
if (reuse) {
throw new IOException(parent + " is expecting a nested item, cannot resolve " + arg);
}
final var augId = (AugmentationIdentifier) arg;
- parent = enterAugmentation((AugmentationTarget) parent, augId);
+ if (parent instanceof DataNodeContainer) {
+ parent = new EffectiveAugmentationSchema(enterAugmentation((AugmentationTarget) parent, augId),
+ (DataNodeContainer) parent);
+ } else if (parent instanceof ChoiceSchemaNode) {
+ throw new IOException(parent + " should not use addressing through " + arg);
+ } else {
+ throw new IOException("Unhandled parent " + parent + " while resolving " + arg);
+ }
writer.startAugmentationNode(augId);
} else if (arg instanceof NodeWithValue) {
if (!(parent instanceof LeafListSchemaNode)) {
--- /dev/null
+/*
+ * 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());
+ }
+}