aae6a5ef3bc331b6f95cd4cfece9461e6c5095a4
[yangtools.git] / yang / yang-model-util / src / test / java / org / opendaylight / yangtools / yang / model / util / DataNodeIteratorTest.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.Sets;
17 import java.util.Collections;
18 import java.util.NoSuchElementException;
19 import java.util.Set;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
23 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
26 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
28 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
29 import org.opendaylight.yangtools.yang.model.api.Module;
30 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
31 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
32
33 public class DataNodeIteratorTest {
34
35     private DataNodeIterator dataNodeIterator;
36
37     @Before
38     public void setUp() {
39         DataNodeContainer dataNodeContainer = mock(DataNodeContainer.class);
40         this.dataNodeIterator = new DataNodeIterator(dataNodeContainer);
41     }
42
43     @Test(expected = IllegalArgumentException.class)
44     public void createDataNodeIteratorWithNullArgument() {
45         new DataNodeIterator(null);
46     }
47
48     @Test(expected = UnsupportedOperationException.class)
49     public void removeFromEmptyDataNodeContainer() {
50         dataNodeIterator.remove();
51     }
52
53     @Test(expected = NoSuchElementException.class)
54     public void tryNextOnEmptyDataContainer() {
55         dataNodeIterator.next();
56     }
57
58     @Test
59     public void createDataNodeIteratorWith() {
60         assertFalse("Has no next", dataNodeIterator.hasNext());
61         assertEquals("Should be empty list", Collections.EMPTY_LIST, dataNodeIterator.allChoices());
62         assertEquals("Should be empty list", Collections.EMPTY_LIST, dataNodeIterator.allContainers());
63         assertEquals("Should be empty list", Collections.EMPTY_LIST, dataNodeIterator.allTypedefs());
64         assertEquals("Should be empty list", Collections.EMPTY_LIST, dataNodeIterator.allGroupings());
65         assertEquals("Should be empty list", Collections.EMPTY_LIST, dataNodeIterator.allLists());
66     }
67
68     @Test
69     public void testTraversal() {
70         final Module mockedModule = mock(Module.class);
71
72         final ContainerSchemaNode mockedAugmentingContainer = mock(ContainerSchemaNode.class);
73         doReturn(true).when(mockedAugmentingContainer).isAugmenting();
74
75         final ContainerSchemaNode mockedContainer = mock(ContainerSchemaNode.class);
76
77         final ListSchemaNode mockedList = mock(ListSchemaNode.class);
78
79         final ChoiceSchemaNode mockedChoice = mock(ChoiceSchemaNode.class);
80         final ChoiceCaseNode mockedCase1 = mock(ChoiceCaseNode.class);
81         final ChoiceCaseNode mockedCase2 = mock(ChoiceCaseNode.class);
82         final Set<ChoiceCaseNode> cases = Sets.newHashSet(mockedCase1, mockedCase2);
83         doReturn(cases).when(mockedChoice).getCases();
84
85         final Set<DataSchemaNode> childNodes = Sets.newHashSet(mockedAugmentingContainer, mockedContainer, mockedList,
86                 mockedChoice);
87         doReturn(childNodes).when(mockedModule).getChildNodes();
88
89         final NotificationDefinition mockedNotification = mock(NotificationDefinition.class);
90         final ContainerSchemaNode mockedContainerInNotification = mock(ContainerSchemaNode.class);
91         final Set<DataSchemaNode> notificationChildNodes = Sets.newHashSet(mockedContainerInNotification);
92         doReturn(notificationChildNodes).when(mockedNotification).getChildNodes();
93         final Set<NotificationDefinition> notifications = Sets.newHashSet(mockedNotification);
94
95         doReturn(notifications).when(mockedModule).getNotifications();
96
97         final RpcDefinition mockedRpc = mock(RpcDefinition.class);
98         final ContainerSchemaNode mockedContainerInRpcInput = mock(ContainerSchemaNode.class);
99         final ListSchemaNode mockedListInRpcInputContainer = mock(ListSchemaNode.class);
100         final Set<DataSchemaNode> rpcInputChildNodes = Sets.newHashSet(mockedListInRpcInputContainer);
101         doReturn(rpcInputChildNodes).when(mockedContainerInRpcInput).getChildNodes();
102         doReturn(mockedContainerInRpcInput).when(mockedRpc).getInput();
103         final Set<RpcDefinition> rpcs = Sets.newHashSet(mockedRpc);
104
105         doReturn(rpcs).when(mockedModule).getRpcs();
106
107         final GroupingDefinition mockedGrouping = mock(GroupingDefinition.class);
108         final Set<GroupingDefinition> groupings = Sets.newHashSet(mockedGrouping);
109
110         doReturn(groupings).when(mockedModule).getGroupings();
111
112         final DataNodeIterator dataNodeIterator = new DataNodeIterator(mockedModule);
113         assertFalse(dataNodeIterator.allContainers().contains(mockedAugmentingContainer));
114         assertTrue(dataNodeIterator.allContainers().contains(mockedContainer));
115         assertTrue(dataNodeIterator.allLists().contains(mockedList));
116         assertTrue(dataNodeIterator.allChoices().contains(mockedChoice));
117         assertTrue(dataNodeIterator.allChoices().get(0).getCases().contains(mockedCase1));
118         assertTrue(dataNodeIterator.allChoices().get(0).getCases().contains(mockedCase2));
119         assertTrue(dataNodeIterator.allContainers().contains(mockedContainerInNotification));
120         assertTrue(dataNodeIterator.allLists().contains(mockedListInRpcInputContainer));
121         assertTrue(dataNodeIterator.allGroupings().contains(mockedGrouping));
122     }
123 }