Add support for opaque anydata XML output
[yangtools.git] / yang / yang-data-codec-xml / src / test / java / org / opendaylight / yangtools / yang / data / codec / xml / AnydataSerializeTest.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 static org.junit.Assert.assertEquals;
11
12 import java.io.IOException;
13 import java.io.StringWriter;
14 import java.util.Collection;
15 import javax.xml.stream.XMLOutputFactory;
16 import javax.xml.stream.XMLStreamException;
17 import javax.xml.stream.XMLStreamWriter;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.junit.runners.Parameterized;
21 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
22 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
23 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
24 import org.opendaylight.yangtools.yang.data.util.schema.opaque.OpaqueDataBuilder;
25 import org.opendaylight.yangtools.yang.data.util.schema.opaque.OpaqueDataContainerBuilder;
26 import org.opendaylight.yangtools.yang.data.util.schema.opaque.OpaqueDataListBuilder;
27
28 @RunWith(Parameterized.class)
29 public class AnydataSerializeTest extends AbstractAnydataTest {
30
31     @Parameterized.Parameters(name = "{0}")
32     public static Collection<Object[]> data() {
33         return TestFactories.junitParameters();
34     }
35
36     private final XMLOutputFactory factory;
37
38     public AnydataSerializeTest(final String factoryMode, final XMLOutputFactory factory) {
39         this.factory = factory;
40     }
41
42     @Test
43     public void testOpaqueAnydata() throws XMLStreamException, IOException {
44         final StringWriter writer = new StringWriter();
45         final XMLStreamWriter xmlStreamWriter = factory.createXMLStreamWriter(writer);
46
47         final NormalizedNodeStreamWriter xmlNormalizedNodeStreamWriter = XMLStreamNormalizedNodeStreamWriter.create(
48             xmlStreamWriter, SCHEMA_CONTEXT);
49         final NormalizedNodeWriter normalizedNodeWriter = NormalizedNodeWriter.forStreamWriter(
50             xmlNormalizedNodeStreamWriter);
51         normalizedNodeWriter.write(Builders.opaqueAnydataBuilder().withNodeIdentifier(FOO_NODEID)
52             .withValue(new OpaqueDataBuilder().withAccurateLists(false)
53                 .withRoot(
54                     new OpaqueDataListBuilder().withIdentifier(BAR_NODEID)
55                     .withChild(new OpaqueDataContainerBuilder().withIdentifier(BAR_NODEID).build())
56                     .build())
57                 .build())
58             .build());
59         normalizedNodeWriter.flush();
60
61         final String serializedXml = writer.toString();
62         assertEquals("<foo xmlns=\"test-anydata\"><bar/></foo>", serializedXml);
63     }
64 }