2 * Copyright (c) 2016 Cisco Systems, Inc. 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.api.schema.stream;
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertSame;
12 import static org.mockito.Mockito.doCallRealMethod;
13 import static org.mockito.Mockito.doReturn;
15 import java.io.IOException;
16 import java.util.List;
18 import javax.xml.transform.dom.DOMSource;
19 import org.junit.jupiter.api.Test;
20 import org.junit.jupiter.api.extension.ExtendWith;
21 import org.mockito.Mock;
22 import org.mockito.junit.jupiter.MockitoExtension;
23 import org.opendaylight.yangtools.yang.common.QName;
24 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
25 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
26 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
27 import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
28 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
29 import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode;
30 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
31 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
32 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
33 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedContainer;
34 import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode;
35 import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode;
36 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
37 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
38 import org.opendaylight.yangtools.yang.data.api.schema.UserLeafSetNode;
39 import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode;
41 @ExtendWith(MockitoExtension.class)
42 class NormalizedNodeWriterTest {
43 private static final NodeIdentifier NODE_ID = new NodeIdentifier(QName.create("test", "nodeId"));
44 private static final QName QNAME1 = QName.create("test", "qname1");
45 private static final QName QNAME2 = QName.create("test", "qname2");
48 private DOMSourceAnyxmlNode anyxml;
50 private ChoiceNode choice;
52 private ContainerNode container;
54 private LeafNode<String> leaf;
56 private LeafSetEntryNode<String> leafSetEntry;
58 private MapEntryNode mapEntry;
60 private SystemLeafSetNode<String> systemLeafSet;
62 private SystemMapNode systemMap;
64 private UnkeyedListEntryNode unkeyedListEntry;
66 private UnkeyedListNode unkeyedList;
68 private UserLeafSetNode<String> userLeafSet;
70 private UserMapNode userMap;
73 void testNormalizedNodeWriter() throws IOException {
74 final var loggingWriter = new LoggingNormalizedNodeStreamWriter();
75 try (var writer = NormalizedNodeWriter.forStreamWriter(loggingWriter, true)) {
77 assertEquals(loggingWriter, writer.getWriter());
79 doReturn(new NodeWithValue<>(QNAME1, "leaflist-value-1")).when(leafSetEntry).name();
80 doReturn("leaflist-value-1").when(leafSetEntry).body();
81 assertSame(writer, writer.write(leafSetEntry));
83 doReturn("leaf-value-1").when(leaf).body();
84 doReturn(NODE_ID).when(leaf).name();
85 assertSame(writer, writer.write(leaf));
87 doCallRealMethod().when(anyxml).bodyObjectModel();
88 doReturn(NODE_ID).when(anyxml).name();
89 doReturn(new DOMSource()).when(anyxml).body();
90 assertSame(writer, writer.write(anyxml));
92 mockContainer(container);
93 assertSame(writer, writer.write(container));
95 doReturn(NodeIdentifierWithPredicates.of(QNAME1, NODE_ID.getNodeType(), "list-key-value-1"))
96 .when(mapEntry).name();
97 doReturn(leaf).when(mapEntry).childByArg(NODE_ID);
98 doReturn(1).when(mapEntry).size();
99 doReturn(List.of(leaf)).when(mapEntry).body();
100 assertSame(writer, writer.write(mapEntry));
102 mockContainer(unkeyedListEntry);
103 assertSame(writer, writer.write(unkeyedListEntry));
105 mockContainer(choice);
106 assertSame(writer, writer.write(choice));
108 final var value = Set.of(unkeyedListEntry);
109 doReturn(NODE_ID).when(unkeyedList).name();
110 doReturn(1).when(unkeyedList).size();
111 doReturn(value).when(unkeyedList).body();
112 assertSame(writer, writer.write(unkeyedList));
114 mockContainer(userMap);
115 assertSame(writer, writer.write(userMap));
117 mockContainer(systemMap);
118 assertSame(writer, writer.write(systemMap));
120 mockContainer(userLeafSet);
121 assertSame(writer, writer.write(userLeafSet));
123 mockContainer(systemLeafSet);
124 assertSame(writer, writer.write(systemLeafSet));
129 try (var writer = NormalizedNodeWriter.forStreamWriter(loggingWriter, false)) {
130 assertSame(writer, writer.write(mapEntry));
134 private static void mockContainer(final NormalizedContainer<?> container) {
135 doReturn(NODE_ID).when(container).name();
136 doReturn(0).when(container).size();
137 doReturn(List.of()).when(container).body();