3ea2029b7eda9dc99089464a4e94f51e3c116507
[yangtools.git] / codec / yang-data-codec-xml / src / test / java / org / opendaylight / yangtools / yang / data / codec / xml / AbstractAnydataTest.java
1 /*
2  * Copyright (c) 2019 PANTHEON.tech, 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 java.io.ByteArrayInputStream;
11 import java.io.InputStream;
12 import java.io.StringWriter;
13 import java.nio.charset.StandardCharsets;
14 import javax.xml.transform.Transformer;
15 import javax.xml.transform.TransformerException;
16 import javax.xml.transform.TransformerFactory;
17 import javax.xml.transform.dom.DOMSource;
18 import javax.xml.transform.stream.StreamResult;
19 import org.junit.AfterClass;
20 import org.junit.BeforeClass;
21 import org.opendaylight.yangtools.yang.common.QName;
22 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
23 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
24 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
25 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
26 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
27
28 public abstract class AbstractAnydataTest extends AbstractXmlTest {
29     static final QName FOO_QNAME = QName.create("test-anydata", "foo");
30     static final QName CONT_QNAME = QName.create(FOO_QNAME, "cont");
31     static final QName CONT_ANY_QNAME = QName.create(FOO_QNAME, "cont-any");
32     static final QName CONT_LEAF_QNAME = QName.create(FOO_QNAME, "cont-leaf");
33
34     static final NodeIdentifier FOO_NODEID = NodeIdentifier.create(FOO_QNAME);
35     static final NodeIdentifier CONT_NODEID = NodeIdentifier.create(CONT_QNAME);
36     static final NodeIdentifier CONT_ANY_NODEID = NodeIdentifier.create(CONT_ANY_QNAME);
37     static final NodeIdentifier CONT_LEAF_NODEID = NodeIdentifier.create(CONT_LEAF_QNAME);
38
39     static final LeafNode<String> CONT_LEAF = ImmutableNodes.leafNode(CONT_LEAF_NODEID, "abc");
40
41     static EffectiveModelContext SCHEMA_CONTEXT;
42
43     @BeforeClass
44     public static void beforeClass() throws Exception {
45         SCHEMA_CONTEXT = YangParserTestUtils.parseYang("""
46             module test-anydata {
47               yang-version 1.1;
48               namespace test-anydata;
49               prefix ta;
50
51               anydata foo;
52
53               container cont {
54                 anydata cont-any;
55                 leaf cont-leaf {
56                   type string;
57                 }
58                 leaf empty-leaf {
59                   type empty;
60                 }
61                 container bar {
62                   leaf cont-leaf {
63                     type string;
64                   }
65                 }
66               }
67
68               list lst {
69                 leaf cont-leaf {
70                   type string;
71                 }
72                 leaf-list my-leafs {
73                   type string;
74                 }
75               }
76             }""");
77     }
78
79     @AfterClass
80     public static void afterClass() {
81         SCHEMA_CONTEXT = null;
82     }
83
84     static DOMSourceAnydata toDOMSource(final String str) {
85         return new DOMSourceAnydata(new DOMSource(
86             // DOMSource must have a single document element, which we are ignoring
87             readXmlToDocument(toInputStream("<IGNORED>" + str + "</IGNORED>")).getDocumentElement()));
88     }
89
90     static InputStream toInputStream(final String str) {
91         return new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8));
92     }
93
94     /**
95      * Transform DomSource object to formatted XML string.
96      * @param node {@link DOMSource}
97      * @return {@link String}
98      * @throws TransformerException Internal {@link Transformer} exception
99      */
100     static String getXmlFromDOMSource(final DOMSource node) throws TransformerException {
101         final var writer = new StringWriter();
102         final var transformer = TransformerFactory.newInstance().newTransformer();
103         transformer.transform(node, new StreamResult(writer));
104         return writer.toString();
105     }
106 }