/*
* Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.yangtools.yang.model.util;
import com.google.common.collect.Sets;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
import java.util.Collections;
import java.util.NoSuchElementException;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
public class DataNodeIteratorTest {
private DataNodeIterator dataNodeIterator;
@Before
public void setUp() {
DataNodeContainer dataNodeContainer = mock(DataNodeContainer.class);
this.dataNodeIterator = new DataNodeIterator(dataNodeContainer);
}
@Test(expected=IllegalArgumentException.class)
public void createDataNodeIteratorWithNullArgument() {
new DataNodeIterator(null);
}
@Test(expected=UnsupportedOperationException.class)
public void removeFromEmptyDataNodeContainer() {
dataNodeIterator.remove();
}
@Test(expected = NoSuchElementException.class)
public void tryNextOnEmptyDataContainer() {
dataNodeIterator.next();
}
@Test
public void createDataNodeIteratorWith() {
assertFalse("Has no next", dataNodeIterator.hasNext());
assertEquals("Should be empty list", Collections.EMPTY_LIST, dataNodeIterator.allChoices());
assertEquals("Should be empty list", Collections.EMPTY_LIST, dataNodeIterator.allContainers());
assertEquals("Should be empty list", Collections.EMPTY_LIST, dataNodeIterator.allTypedefs());
assertEquals("Should be empty list", Collections.EMPTY_LIST, dataNodeIterator.allGroupings());
assertEquals("Should be empty list", Collections.EMPTY_LIST, dataNodeIterator.allLists());
}
@Test
public void testTraversal() {
final Module mockedModule = mock(Module.class);
final ContainerSchemaNode mockedAugmentingContainer = mock(ContainerSchemaNode.class);
doReturn(true).when(mockedAugmentingContainer).isAugmenting();
final ContainerSchemaNode mockedContainer = mock(ContainerSchemaNode.class);
final ListSchemaNode mockedList = mock(ListSchemaNode.class);
final ChoiceSchemaNode mockedChoice = mock(ChoiceSchemaNode.class);
final ChoiceCaseNode mockedCase1 = mock(ChoiceCaseNode.class);
final ChoiceCaseNode mockedCase2 = mock(ChoiceCaseNode.class);
final Set<ChoiceCaseNode> cases = Sets.newHashSet(mockedCase1, mockedCase2);
doReturn(cases).when(mockedChoice).getCases();
final Set<DataSchemaNode> childNodes = Sets.newHashSet(mockedAugmentingContainer, mockedContainer, mockedList, mockedChoice);
doReturn(childNodes).when(mockedModule).getChildNodes();
final NotificationDefinition mockedNotification = mock(NotificationDefinition.class);
final ContainerSchemaNode mockedContainerInNotification = mock(ContainerSchemaNode.class);
final Set<DataSchemaNode> notificationChildNodes = Sets.newHashSet(mockedContainerInNotification);
doReturn(notificationChildNodes).when(mockedNotification).getChildNodes();
final Set<NotificationDefinition> notifications = Sets.newHashSet(mockedNotification);
doReturn(notifications).when(mockedModule).getNotifications();
final RpcDefinition mockedRpc = mock(RpcDefinition.class);
final ContainerSchemaNode mockedContainerInRpcInput = mock(ContainerSchemaNode.class);
final ListSchemaNode mockedListInRpcInputContainer = mock(ListSchemaNode.class);
final Set<DataSchemaNode> rpcInputChildNodes = Sets.newHashSet(mockedListInRpcInputContainer);
doReturn(rpcInputChildNodes).when(mockedContainerInRpcInput).getChildNodes();
doReturn(mockedContainerInRpcInput).when(mockedRpc).getInput();
final Set<RpcDefinition> rpcs = Sets.newHashSet(mockedRpc);
doReturn(rpcs).when(mockedModule).getRpcs();
final GroupingDefinition mockedGrouping = mock(GroupingDefinition.class);
final Set<GroupingDefinition> groupings = Sets.newHashSet(mockedGrouping);
doReturn(groupings).when(mockedModule).getGroupings();
final DataNodeIterator dataNodeIterator = new DataNodeIterator(mockedModule);
assertFalse(dataNodeIterator.allContainers().contains(mockedAugmentingContainer));
assertTrue(dataNodeIterator.allContainers().contains(mockedContainer));
assertTrue(dataNodeIterator.allLists().contains(mockedList));
assertTrue(dataNodeIterator.allChoices().contains(mockedChoice));
assertTrue(dataNodeIterator.allChoices().get(0).getCases().contains(mockedCase1));
assertTrue(dataNodeIterator.allChoices().get(0).getCases().contains(mockedCase2));
assertTrue(dataNodeIterator.allContainers().contains(mockedContainerInNotification));
assertTrue(dataNodeIterator.allLists().contains(mockedListInRpcInputContainer));
assertTrue(dataNodeIterator.allGroupings().contains(mockedGrouping));
}
}