2 * Copyright (c) 2017 Pantheon Technologies s.r.o. 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.xml;
10 import static org.junit.Assert.assertNotNull;
12 import org.junit.AfterClass;
13 import org.junit.BeforeClass;
14 import org.junit.Test;
15 import org.opendaylight.yangtools.util.xml.UntrustedXML;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.common.QNameModule;
18 import org.opendaylight.yangtools.yang.common.Revision;
19 import org.opendaylight.yangtools.yang.common.XMLNamespace;
20 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
21 import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
22 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
23 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
24 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
26 public class Bug8675Test {
27 private static final QNameModule FOO = QNameModule.create(XMLNamespace.of("foo"), Revision.of("2017-06-13"));
29 private static EffectiveModelContext schemaContext;
32 public static void setup() {
33 schemaContext = YangParserTestUtils.parseYang("""
48 container cont-in-list {}
55 leaf inner-ordinary-leaf {
61 container top-level-container {
62 container inner-container-1 {}
63 container inner-container-2 {}
66 anyxml top-level-anyxml;
72 leaf-list top-level-leaf-list {
79 public static void cleanup() {
84 public void testParsingEmptyElements() throws Exception {
85 final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream(
87 final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
88 final var result = new NormalizationResultHolder();
89 final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
90 final var xmlParser = XmlParserStream.create(streamWriter,
91 Inference.ofDataTreePath(schemaContext, QName.create(FOO, "top-level-container")));
92 xmlParser.parse(reader);
94 final var transformedInput = result.getResult().data();
95 assertNotNull(transformedInput);
99 public void testParsingEmptyRootElement() throws Exception {
100 final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug8675/foo-2.xml");
101 final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
102 final var result = new NormalizationResultHolder();
103 final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
104 final var xmlParser = XmlParserStream.create(streamWriter,
105 Inference.ofDataTreePath(schemaContext, QName.create(FOO, "top-level-container")));
106 xmlParser.parse(reader);
108 final var transformedInput = result.getResult().data();
109 assertNotNull(transformedInput);
113 public void testListAsRootElement() throws Exception {
114 final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug8675/foo-3.xml");
115 final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
116 final var result = new NormalizationResultHolder();
117 final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
118 final var xmlParser = XmlParserStream.create(streamWriter,
119 Inference.ofDataTreePath(schemaContext, QName.create(FOO, "top-level-list")));
120 xmlParser.parse(reader);
122 final var transformedInput = result.getResult().data();
123 assertNotNull(transformedInput);
127 public void testAnyXmlAsRootElement() throws Exception {
128 final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug8675/foo-4.xml");
129 final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
130 final var result = new NormalizationResultHolder();
131 final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
132 final var xmlParser = XmlParserStream.create(streamWriter,
133 Inference.ofDataTreePath(schemaContext, QName.create(FOO, "top-level-anyxml")));
134 xmlParser.parse(reader);
136 final var transformedInput = result.getResult().data();
137 assertNotNull(transformedInput);
141 public void testLeafAsRootElement() throws Exception {
142 final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug8675/foo-5.xml");
143 final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
144 final var result = new NormalizationResultHolder();
145 final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
146 final var xmlParser = XmlParserStream.create(streamWriter,
147 Inference.ofDataTreePath(schemaContext, QName.create(FOO, "top-level-leaf")));
148 xmlParser.parse(reader);
150 final var transformedInput = result.getResult().data();
151 assertNotNull(transformedInput);
155 public void testLeafListAsRootElement() throws Exception {
156 final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/bug8675/foo-6.xml");
157 final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
158 final var result = new NormalizationResultHolder();
159 final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
160 final var xmlParser = XmlParserStream.create(streamWriter,
161 Inference.ofDataTreePath(schemaContext, QName.create(FOO, "top-level-leaf-list")));
162 xmlParser.parse(reader);
164 final var transformedInput = result.getResult().data();
165 assertNotNull(transformedInput);