Populate model/ hierarchy
[yangtools.git] / model / yang-model-util / src / test / java / org / opendaylight / yangtools / yang / model / util / SchemaNodeUtilsTest.java
1 /*
2  * Copyright (c) 2014 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.model.util;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertTrue;
13 import static org.mockito.Mockito.doReturn;
14 import static org.mockito.Mockito.mock;
15
16 import com.google.common.collect.ImmutableSet;
17 import java.util.Collection;
18 import java.util.Collections;
19 import java.util.Set;
20 import org.junit.Test;
21 import org.junit.runner.RunWith;
22 import org.mockito.junit.MockitoJUnitRunner;
23 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.CopyableNode;
27 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
28 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
29 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
30 import org.opendaylight.yangtools.yang.model.api.InputSchemaNode;
31 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
32 import org.opendaylight.yangtools.yang.model.api.Module;
33 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
34 import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
35 import org.opendaylight.yangtools.yang.model.api.OutputSchemaNode;
36 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
37
38 @Deprecated
39 @RunWith(MockitoJUnitRunner.StrictStubs.class)
40 public class SchemaNodeUtilsTest {
41     @Test
42     public void testTraversal() {
43         final Module mockedModule = mockDataNodeContainer(Module.class);
44
45         final ContainerSchemaNode mockedAugmentingContainer = mockCopyableNode(true, mock(ContainerSchemaNode.class));
46         final ContainerSchemaNode mockedContainer = mockCopyableNode(false, mockDataNodeContainer(
47             ContainerSchemaNode.class));
48
49         final ListSchemaNode mockedList = mockCopyableNode(false, mockDataNodeContainer(ListSchemaNode.class));
50
51         final ChoiceSchemaNode mockedChoice = mockCopyableNode(false, mock(ChoiceSchemaNode.class));
52         final CaseSchemaNode mockedCase1 = mockDataNodeContainer(CaseSchemaNode.class);
53         final CaseSchemaNode mockedCase2 = mockDataNodeContainer(CaseSchemaNode.class);
54         doReturn(ImmutableSet.of(mockedCase1, mockedCase2)).when(mockedChoice).getCases();
55
56         final Set<DataSchemaNode> childNodes = ImmutableSet.of(mockedAugmentingContainer, mockedContainer, mockedList,
57                 mockedChoice);
58         doReturn(childNodes).when(mockedModule).getChildNodes();
59
60         final NotificationDefinition mockedNotification = mockDataNodeContainer(NotificationDefinition.class);
61         final ContainerSchemaNode mockedContainerInNotification = mockCopyableNode(false,
62             mockDataNodeContainer(ContainerSchemaNode.class));
63         final Set<DataSchemaNode> notificationChildNodes = ImmutableSet.of(mockedContainerInNotification);
64         doReturn(notificationChildNodes).when(mockedNotification).getChildNodes();
65         final Set<NotificationDefinition> notifications = ImmutableSet.of(mockedNotification);
66
67         doReturn(notifications).when(mockedModule).getNotifications();
68
69         final RpcDefinition mockedRpc = mockOperationDefinition(mock(RpcDefinition.class));
70         final InputSchemaNode mockedContainerInRpcInput = mockDataNodeContainer(InputSchemaNode.class);
71         final ListSchemaNode mockedListInRpcInputContainer = mockCopyableNode(false,
72             mockDataNodeContainer(ListSchemaNode.class));
73         final Set<DataSchemaNode> rpcInputChildNodes = ImmutableSet.of(mockedListInRpcInputContainer);
74         doReturn(rpcInputChildNodes).when(mockedContainerInRpcInput).getChildNodes();
75         doReturn(mockedContainerInRpcInput).when(mockedRpc).getInput();
76         final Set<RpcDefinition> rpcs = ImmutableSet.of(mockedRpc);
77
78         doReturn(rpcs).when(mockedModule).getRpcs();
79
80         final GroupingDefinition mockedGrouping = mockDataNodeContainer(GroupingDefinition.class);
81         final Set<GroupingDefinition> groupings = ImmutableSet.of(mockedGrouping);
82
83         doReturn(groupings).when(mockedModule).getGroupings();
84
85         final Collection<? extends ContainerSchemaNode> containers = SchemaNodeUtils.getAllContainers(mockedModule);
86         assertEquals(2, containers.size());
87         assertFalse(containers.contains(mockedAugmentingContainer));
88         assertTrue(containers.contains(mockedContainer));
89         assertTrue(containers.contains(mockedContainerInNotification));
90     }
91
92     @Deprecated
93     private static <T extends CopyableNode> T mockCopyableNode(final boolean augmenting, final T node) {
94         doReturn(augmenting).when(node).isAugmenting();
95         return node;
96     }
97
98     private static <T extends DataNodeContainer> T mockDataNodeContainer(final Class<T> clazz) {
99         final T mock = mock(clazz);
100         doReturn(Collections.emptyList()).when(mock).getChildNodes();
101         doReturn(Collections.emptySet()).when(mock).getGroupings();
102         doReturn(Collections.emptySet()).when(mock).getTypeDefinitions();
103         return mock;
104     }
105
106     private static <T extends OperationDefinition> T mockOperationDefinition(final T mock) {
107         doReturn(Collections.emptySet()).when(mock).getTypeDefinitions();
108         doReturn(mockDataNodeContainer(OutputSchemaNode.class)).when(mock).getOutput();
109         return mock;
110     }
111 }