Convert yang-data-codec-xml to JUnit5
[yangtools.git] / codec / yang-data-codec-xml / src / test / java / org / opendaylight / yangtools / yang / data / codec / xml / Bug8803Test.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.assertFalse;
11 import static org.junit.jupiter.api.Assertions.assertNotNull;
12
13 import java.io.StringWriter;
14 import javax.xml.stream.XMLOutputFactory;
15 import org.junit.jupiter.api.AfterAll;
16 import org.junit.jupiter.api.BeforeAll;
17 import org.junit.jupiter.params.ParameterizedTest;
18 import org.junit.jupiter.params.provider.ArgumentsSource;
19 import org.opendaylight.yangtools.util.xml.UntrustedXML;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
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.model.util.SchemaInferenceStack.Inference;
26 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
27
28 class Bug8803Test {
29     private static EffectiveModelContext SCHEMA_CONTEXT;
30
31     @BeforeAll
32     static void beforeClass() {
33         SCHEMA_CONTEXT = YangParserTestUtils.parseYang("""
34             module bar {
35               namespace bar-ns;
36               prefix bar;
37
38               import foo {
39                 prefix foo;
40               }
41
42               augment "/foo:top-cont/foo:keyed-list" {
43                 leaf iid-leaf {
44                   type instance-identifier;
45                 }
46               }
47             }""", """
48             module baz {
49               namespace baz-ns;
50               prefix baz;
51
52               container top-cont {
53                 list keyed-list {
54                   key key-leaf;
55                   leaf key-leaf {
56                     type int32;
57                   }
58                 }
59               }
60             }""", """
61             module foo {
62               namespace foo-ns;
63               prefix foo;
64
65               container top-cont {
66                 list keyed-list {
67                   key key-leaf;
68                   leaf key-leaf {
69                     type int32;
70                   }
71                 }
72               }
73             }""");
74     }
75
76     @AfterAll
77     static void afterClass() {
78         SCHEMA_CONTEXT = null;
79     }
80
81     @ParameterizedTest(name = "{0}")
82     @ArgumentsSource(TestFactories.class)
83     void test(final String factoryMode, final XMLOutputFactory factory) throws Exception {
84         final var resourceAsStream = Bug8803Test.class.getResourceAsStream("/bug8803/foo.xml");
85
86         // deserialization
87         final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
88
89         final var result = new NormalizationResultHolder();
90         final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
91         final XmlParserStream xmlParser = XmlParserStream.create(streamWriter,
92             Inference.ofDataTreePath(SCHEMA_CONTEXT, QName.create("foo-ns", "top-cont")));
93         xmlParser.parse(reader);
94         final var transformedInput = result.getResult().data();
95         assertNotNull(transformedInput);
96
97         // serialization
98         final var writer = new StringWriter();
99         final var xmlStreamWriter = factory.createXMLStreamWriter(writer);
100
101         final var xmlNormalizedNodeStreamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlStreamWriter,
102             SCHEMA_CONTEXT);
103
104         final var normalizedNodeWriter = NormalizedNodeWriter.forStreamWriter(xmlNormalizedNodeStreamWriter);
105         normalizedNodeWriter.write(transformedInput);
106         normalizedNodeWriter.flush();
107
108         final String serializedXml = writer.toString();
109         assertFalse(serializedXml.isEmpty());
110     }
111 }