2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.data.codec.gson;
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
12 import static org.junit.jupiter.api.Assertions.assertNotNull;
14 import com.google.gson.stream.JsonReader;
15 import java.io.StringReader;
17 import org.junit.jupiter.api.Test;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
20 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
21 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
22 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
23 import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
24 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
25 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
29 void newParserLeafRefTest() throws Exception {
30 final var context = YangParserTestUtils.parseYang("""
35 revision "2016-01-22" {
36 description "Initial version";
53 path "/bar:root/bar:l1";
59 path "/bar:root/bar:l2";
65 path "/bar:root/bar:l3";
95 prefix bar; revision-date 2016-01-22;
98 revision "2016-01-22" {
99 description "Initial version";
114 path "/bar:root/bar:l1";
119 assertNotNull(context);
121 verifyNormalizedNodeResult(context);
124 private static void verifyNormalizedNodeResult(final EffectiveModelContext context) throws Exception {
125 final var inputJson = TestUtils.loadTextFile("/bug-4969/json/foo.json");
126 final var result = new NormalizationResultHolder();
127 final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
128 final var jsonParser = JsonParserStream.create(streamWriter,
129 JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(context));
130 jsonParser.parse(new JsonReader(new StringReader(inputJson)));
132 final var root = assertInstanceOf(ContainerNode.class, result.getResult().data());
133 final var ref1 = assertInstanceOf(LeafNode.class, root.childByArg(NodeIdentifier.create(
134 QName.create("foo", "2016-01-22", "ref1"))));
135 final var ref2 = assertInstanceOf(LeafNode.class, root.childByArg(NodeIdentifier.create(
136 QName.create("foo", "2016-01-22", "ref2"))));
137 final var ref3 = assertInstanceOf(LeafNode.class, root.childByArg(NodeIdentifier.create(
138 QName.create("foo", "2016-01-22", "ref3"))));
139 final var ref4 = assertInstanceOf(LeafNode.class, root.childByArg(NodeIdentifier.create(
140 QName.create("foo", "2016-01-22", "ref4"))));
142 assertEquals(Set.of("a"), ref1.body());
143 assertEquals(Set.of("a", "b"), ref2.body());
144 assertEquals(Set.of("a", "b", "c"), ref3.body());
145 assertEquals(Set.of("a", "b", "c", "d"), ref4.body());
149 void newParserLeafRefTest2() throws Exception {
150 final var context = YangParserTestUtils.parseYang("""
151 module augment-leafref-module {
152 namespace "augment:leafref:module";
154 revision 2014-12-16 {
156 typedef leafreftype {
158 path "/auglfrfmo:cont/auglfrfmo:lf3";
167 module leafref-module {
168 namespace "leafref:module";
170 import augment-leafref-module { prefix augleafref; revision-date 2014-12-16; }
171 revision 2013-11-18 {
183 type augleafref:leafreftype;
187 assertNotNull(context);
189 parseJsonToNormalizedNodes(context);
192 private static void parseJsonToNormalizedNodes(final EffectiveModelContext context) throws Exception {
193 final var inputJson = TestUtils.loadTextFile("/leafref/json/data.json");
194 final var result = new NormalizationResultHolder();
195 final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
196 final var jsonParser = JsonParserStream.create(streamWriter,
197 JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(context));
198 jsonParser.parse(new JsonReader(new StringReader(inputJson)));
199 final var transformedInput = result.getResult().data();
200 assertNotNull(transformedInput);