2 * Copyright © 2020 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.jupiter.api.Assertions.assertFalse;
12 import java.io.StringWriter;
13 import javax.xml.stream.XMLOutputFactory;
14 import org.junit.jupiter.api.AfterAll;
15 import org.junit.jupiter.api.BeforeAll;
16 import org.junit.jupiter.params.ParameterizedTest;
17 import org.junit.jupiter.params.provider.ArgumentsSource;
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.stream.NormalizedNodeWriter;
22 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
23 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
24 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
25 import org.xmlunit.builder.DiffBuilder;
28 private static final QName IDENT_ONE = QName.create("foo-namespace", "ident-one");
29 private static final QName IDENTITYREF_LEAF = QName.create("foo-namespace", "identityref-leaf");
30 private static final QName LEAF_CONTAINER = QName.create("foo-namespace", "leaf-container");
31 private static final QName UNION_IDENTITYREF_LEAF = QName.create("foo-namespace", "union-identityref-leaf");
33 private static EffectiveModelContext MODEL_CONTEXT;
36 static void beforeClass() {
37 MODEL_CONTEXT = YangParserTestUtils.parseYang("""
39 namespace "foo-namespace";
57 container leaf-container {
58 leaf union-identityref-leaf {
61 leaf identityref-leaf {
71 static void afterClass() {
75 @ParameterizedTest(name = "{0}")
76 @ArgumentsSource(TestFactories.class)
77 void testLeafOfIdentityRefTypeNNToXmlSerialization(final String factoryMode, final XMLOutputFactory factory)
79 final var diff = DiffBuilder
80 .compare(serializeToXml(factory, Builders.containerBuilder()
81 .withNodeIdentifier(NodeIdentifier.create(LEAF_CONTAINER))
82 .withChild(Builders.leafBuilder()
83 .withNodeIdentifier(NodeIdentifier.create(IDENTITYREF_LEAF))
88 <?xml version="1.0" encoding="UTF-8"?>
90 <leaf-container xmlns="foo-namespace">
91 <identityref-leaf xmlns:prefix="foo-namespace">ident-one</identityref-leaf>
96 assertFalse(diff.hasDifferences(), diff.toString());
99 @ParameterizedTest(name = "{0}")
100 @ArgumentsSource(TestFactories.class)
101 void testLeafOfUnionWithIdentityRefNNToXmlSerialization(final String factoryMode, final XMLOutputFactory factory)
103 final var diff = DiffBuilder
104 .compare(serializeToXml(factory, Builders.containerBuilder()
105 .withNodeIdentifier(NodeIdentifier.create(LEAF_CONTAINER))
106 .withChild(Builders.leafBuilder()
107 .withNodeIdentifier(NodeIdentifier.create(UNION_IDENTITYREF_LEAF))
108 .withValue(IDENT_ONE)
112 <?xml version="1.0" encoding="UTF-8"?>
114 <leaf-container xmlns="foo-namespace">
115 <union-identityref-leaf xmlns:prefix="foo-namespace">ident-one</union-identityref-leaf>
116 </leaf-container>""")
120 assertFalse(diff.hasDifferences(), diff.toString());
123 private static String serializeToXml(final XMLOutputFactory factory, final ContainerNode normalizedNode)
125 final var sw = new StringWriter();
126 try (var nnsw = XMLStreamNormalizedNodeStreamWriter.create(factory.createXMLStreamWriter(sw), MODEL_CONTEXT)) {
127 NormalizedNodeWriter.forStreamWriter(nnsw).write(normalizedNode);
129 return sw.toString();