Modernize mocking in yang-data-api
[yangtools.git] / data / yang-data-api / src / test / java / org / opendaylight / yangtools / yang / data / api / schema / stream / NormalizedNodeWriterTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. 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.api.schema.stream;
9
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;
14
15 import java.io.IOException;
16 import java.util.List;
17 import java.util.Set;
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;
40
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");
46
47     @Mock
48     private DOMSourceAnyxmlNode anyxml;
49     @Mock
50     private ChoiceNode choice;
51     @Mock
52     private ContainerNode container;
53     @Mock
54     private LeafNode<String> leaf;
55     @Mock
56     private LeafSetEntryNode<String> leafSetEntry;
57     @Mock
58     private MapEntryNode mapEntry;
59     @Mock
60     private SystemLeafSetNode<String> systemLeafSet;
61     @Mock
62     private SystemMapNode systemMap;
63     @Mock
64     private UnkeyedListEntryNode unkeyedListEntry;
65     @Mock
66     private UnkeyedListNode unkeyedList;
67     @Mock
68     private UserLeafSetNode<String> userLeafSet;
69     @Mock
70     private UserMapNode userMap;
71
72     @Test
73     void testNormalizedNodeWriter() throws IOException {
74         final var loggingWriter = new LoggingNormalizedNodeStreamWriter();
75         try (var writer = NormalizedNodeWriter.forStreamWriter(loggingWriter, true)) {
76
77             assertEquals(loggingWriter, writer.getWriter());
78
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));
82
83             doReturn("leaf-value-1").when(leaf).body();
84             doReturn(NODE_ID).when(leaf).name();
85             assertSame(writer, writer.write(leaf));
86
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));
91
92             mockContainer(container);
93             assertSame(writer, writer.write(container));
94
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));
101
102             mockContainer(unkeyedListEntry);
103             assertSame(writer, writer.write(unkeyedListEntry));
104
105             mockContainer(choice);
106             assertSame(writer, writer.write(choice));
107
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));
113
114             mockContainer(userMap);
115             assertSame(writer, writer.write(userMap));
116
117             mockContainer(systemMap);
118             assertSame(writer, writer.write(systemMap));
119
120             mockContainer(userLeafSet);
121             assertSame(writer, writer.write(userLeafSet));
122
123             mockContainer(systemLeafSet);
124             assertSame(writer, writer.write(systemLeafSet));
125
126             writer.flush();
127         }
128
129         try (var writer = NormalizedNodeWriter.forStreamWriter(loggingWriter, false)) {
130             assertSame(writer, writer.write(mapEntry));
131         }
132     }
133
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();
138     }
139 }