Convert yang-data-codec-xml to JUnit5
[yangtools.git] / codec / yang-data-codec-xml / src / test / java / org / opendaylight / yangtools / yang / data / codec / xml / Bug8675Test.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.data.codec.xml;
9
10 import static org.junit.jupiter.api.Assertions.assertNotNull;
11
12 import org.junit.jupiter.api.AfterAll;
13 import org.junit.jupiter.api.BeforeAll;
14 import org.junit.jupiter.api.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;
25
26 class Bug8675Test {
27     private static final QNameModule FOO = QNameModule.create(XMLNamespace.of("foo"), Revision.of("2017-06-13"));
28
29     private static EffectiveModelContext schemaContext;
30
31     @BeforeAll
32     static void setup() {
33         schemaContext = YangParserTestUtils.parseYang("""
34             module foo {
35               namespace foo;
36               prefix foo;
37               revision 2017-06-13;
38
39               list top-level-list {
40                 key key-leaf;
41                 leaf key-leaf {
42                   type string;
43                 }
44                 leaf ordinary-leaf {
45                   type string;
46                 }
47
48                 container cont-in-list {}
49
50                 list inner-list {
51                   key inner-key-leaf;
52                   leaf inner-key-leaf {
53                     type string;
54                   }
55                   leaf inner-ordinary-leaf {
56                     type string;
57                   }
58                 }
59               }
60
61               container top-level-container {
62                 container inner-container-1 {}
63                 container inner-container-2 {}
64               }
65
66               anyxml top-level-anyxml;
67
68               leaf top-level-leaf {
69                 type int32;
70               }
71
72               leaf-list top-level-leaf-list {
73                 type int32;
74               }
75             }""");
76     }
77
78     @AfterAll
79     static void cleanup() {
80         schemaContext = null;
81     }
82
83     @Test
84     void testParsingEmptyElements() throws Exception {
85         final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream(
86                 "/bug8675/foo.xml");
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);
93
94         final var transformedInput = result.getResult().data();
95         assertNotNull(transformedInput);
96     }
97
98     @Test
99     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);
107
108         final var transformedInput = result.getResult().data();
109         assertNotNull(transformedInput);
110     }
111
112     @Test
113     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);
121
122         final var transformedInput = result.getResult().data();
123         assertNotNull(transformedInput);
124     }
125
126     @Test
127     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);
135
136         final var transformedInput = result.getResult().data();
137         assertNotNull(transformedInput);
138     }
139
140     @Test
141     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);
149
150         final var transformedInput = result.getResult().data();
151         assertNotNull(transformedInput);
152     }
153
154     @Test
155     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);
163
164         final var transformedInput = result.getResult().data();
165         assertNotNull(transformedInput);
166     }
167 }