BUG-4688: switch revisions from Date to Revision
[yangtools.git] / yang / yang-data-api / src / test / java / org / opendaylight / yangtools / yang / data / api / PathArgumentListTest.java
1 /*
2  * Copyright (c) 2015 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;
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.junit.Assert.fail;
14
15 import com.google.common.collect.UnmodifiableIterator;
16 import java.net.URI;
17 import java.util.HashMap;
18 import java.util.Map;
19 import org.junit.Test;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.common.QNameModule;
22 import org.opendaylight.yangtools.yang.common.Revision;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
24
25 public class PathArgumentListTest {
26     private static final class TestClass extends PathArgumentList {
27         @Override
28         public UnmodifiableIterator<PathArgument> iterator() {
29             return null;
30         }
31
32         @Override
33         public PathArgument get(final int index) {
34             return null;
35         }
36
37         @Override
38         public int size() {
39             return 0;
40         }
41     }
42
43     @Test
44     public void testIsEmpty() {
45         assertFalse(new TestClass().isEmpty());
46     }
47
48     @Test
49     public void testProtections() {
50         final PathArgumentList l = new TestClass();
51
52         try {
53             l.remove(null);
54             fail();
55         } catch (UnsupportedOperationException e) {
56             // Expected
57         }
58
59         try {
60             l.addAll(null);
61             fail();
62         } catch (UnsupportedOperationException e) {
63             // Expected
64         }
65
66         try {
67             l.removeAll(null);
68             fail();
69         } catch (UnsupportedOperationException e) {
70             // Expected
71         }
72
73         try {
74             l.retainAll(null);
75             fail();
76         } catch (UnsupportedOperationException e) {
77             // Expected
78         }
79
80         try {
81             l.clear();
82             fail();
83         } catch (UnsupportedOperationException e) {
84             // Expected
85         }
86
87         try {
88             l.addAll(0, null);
89             fail();
90         } catch (UnsupportedOperationException e) {
91             // Expected
92         }
93     }
94
95     @Test
96     public void testPathArgument() {
97         final QNameModule qNameModule = QNameModule.create(URI.create("urn:opendaylight.test2"),
98             Revision.valueOf("2015-08-08"));
99         final QName qNameRoot = QName.create(qNameModule, "root");
100         final QName qNameList = QName.create(qNameModule, "list");
101         final QName qNameLeaf = QName.create(qNameModule, "leaf-a");
102         final Map<QName, Object> entryLeaf = new HashMap<>();
103         entryLeaf.put(qNameList, "leaf");
104         final YangInstanceIdentifier.NodeIdentifierWithPredicates nodeIdentifierWithPredicates =
105             new YangInstanceIdentifier.NodeIdentifierWithPredicates(qNameList , entryLeaf);
106         final YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.of(qNameRoot).node(qNameList)
107                 .node(nodeIdentifierWithPredicates).node(qNameLeaf);
108         final PathArgument pathArgumentToRoot = yangInstanceIdentifier.getAncestor(1).getPathArguments().iterator()
109                 .next();
110         final StackedPathArguments stackedPathArguments = (StackedPathArguments)yangInstanceIdentifier
111             .getPathArguments();
112         assertTrue(yangInstanceIdentifier.pathArgumentsEqual(yangInstanceIdentifier));
113         assertEquals(pathArgumentToRoot, stackedPathArguments.get(0));
114         assertEquals(4, stackedPathArguments.size());
115         assertTrue(stackedPathArguments.contains(pathArgumentToRoot));
116         assertEquals(0, stackedPathArguments.indexOf(pathArgumentToRoot));
117         assertEquals(0, stackedPathArguments.lastIndexOf(pathArgumentToRoot));
118
119         final StackedReversePathArguments stackedReversePathArguments =
120             (StackedReversePathArguments)yangInstanceIdentifier.getReversePathArguments();
121         final QName rootQname = pathArgumentToRoot.getNodeType();
122         final QName leafQname = stackedReversePathArguments.get(0).getNodeType();
123         assertEquals(qNameRoot, rootQname);
124         assertEquals(qNameLeaf, leafQname);
125         assertEquals(4, stackedReversePathArguments.size());
126         assertTrue(stackedReversePathArguments.contains(pathArgumentToRoot));
127         assertEquals(3, stackedReversePathArguments.indexOf(pathArgumentToRoot));
128         assertEquals(3, stackedReversePathArguments.lastIndexOf(pathArgumentToRoot));
129
130         final StackedYangInstanceIdentifier stackedYangInstanceIdentifier = (StackedYangInstanceIdentifier)
131                 yangInstanceIdentifier;
132         final StackedYangInstanceIdentifier stackedYangInstanceIdentifierClone = stackedYangInstanceIdentifier.clone();
133         final YangInstanceIdentifier yangInstanceIdentifier1 = stackedYangInstanceIdentifier.getAncestor(4);
134         assertEquals(stackedYangInstanceIdentifier, stackedYangInstanceIdentifierClone);
135         assertEquals(stackedReversePathArguments, yangInstanceIdentifier1.getReversePathArguments());
136
137         try {
138             stackedYangInstanceIdentifier.getAncestor(12);
139             fail();
140         } catch (IllegalArgumentException e) {
141             // Expected
142         }
143     }
144 }