2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2024 Ericsson
4 * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
21 package org.oran.smo.yangtools.parser.util.test;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertNull;
27 import static org.junit.Assert.assertTrue;
28 import static org.junit.Assert.fail;
32 import org.junit.Test;
34 import org.oran.smo.yangtools.parser.PrefixResolver;
35 import org.oran.smo.yangtools.parser.model.schema.ModuleAndNamespaceResolver;
36 import org.oran.smo.yangtools.parser.util.InstanceIdentifier;
37 import org.oran.smo.yangtools.parser.util.InstanceIdentifier.Step;
38 import org.oran.smo.yangtools.parser.util.NamespaceModuleIdentifier;
40 public class InstanceIdentifierTest {
43 public void test___xml___ok() {
45 final PrefixResolver prefixResolver = new PrefixResolver();
46 prefixResolver.addMapping("ns1", "namespace1");
47 prefixResolver.addMapping("ns2", "namespace2");
48 prefixResolver.addMapping("ns3", "namespace3");
50 final InstanceIdentifier ii0 = InstanceIdentifier.parseXmlEncodedString("", prefixResolver);
51 assertTrue(ii0.getSteps().isEmpty());
53 // - - - - - - - - - - - -
55 final InstanceIdentifier ii1 = InstanceIdentifier.parseXmlEncodedString(" \t", prefixResolver);
56 assertTrue(ii1.getSteps().isEmpty());
58 // - - - - - - - - - - - -
60 final InstanceIdentifier ii2 = InstanceIdentifier.parseXmlEncodedString("/ns1:node1", prefixResolver);
61 assertEquals(1, ii2.getSteps().size());
63 assertEquals("node1", ii2.getSteps().get(0).getDataNodeNsai().getIdentifier());
64 assertEquals("namespace1", ii2.getSteps().get(0).getDataNodeNsai().getNamespace());
65 assertNull(ii2.getSteps().get(0).getDataNodeNsai().getModuleName());
66 assertNull(ii2.getSteps().get(0).getPredicateKeyValues());
67 assertNull(ii2.getSteps().get(0).getPredicateLeafListMemberValue());
68 assertNull(ii2.getSteps().get(0).getPredicateListEntryOrLeafListMemberIndex());
70 // - - - - - - - - - - - -
72 final InstanceIdentifier ii3 = InstanceIdentifier.parseXmlEncodedString("/ns1:node1/ns2 : node2", prefixResolver);
73 assertEquals(2, ii3.getSteps().size());
75 assertEquals("node1", ii3.getSteps().get(0).getDataNodeNsai().getIdentifier());
76 assertEquals("namespace1", ii3.getSteps().get(0).getDataNodeNsai().getNamespace());
77 assertNull(ii3.getSteps().get(0).getDataNodeNsai().getModuleName());
78 assertNull(ii3.getSteps().get(0).getPredicateKeyValues());
79 assertNull(ii3.getSteps().get(0).getPredicateLeafListMemberValue());
80 assertNull(ii3.getSteps().get(0).getPredicateListEntryOrLeafListMemberIndex());
82 assertEquals("node2", ii3.getSteps().get(1).getDataNodeNsai().getIdentifier());
83 assertEquals("namespace2", ii3.getSteps().get(1).getDataNodeNsai().getNamespace());
84 assertNull(ii3.getSteps().get(1).getDataNodeNsai().getModuleName());
85 assertNull(ii3.getSteps().get(1).getPredicateKeyValues());
86 assertNull(ii3.getSteps().get(1).getPredicateLeafListMemberValue());
87 assertNull(ii3.getSteps().get(1).getPredicateListEntryOrLeafListMemberIndex());
89 // - - - - - - - - - - - -
91 final InstanceIdentifier ii4 = InstanceIdentifier.parseXmlEncodedString("/ns1:node1/node2", prefixResolver); // technically that's illegal syntax, but we will encounter it in the wild.
92 assertEquals(2, ii4.getSteps().size());
94 assertEquals("node1", ii4.getSteps().get(0).getDataNodeNsai().getIdentifier());
95 assertEquals("namespace1", ii4.getSteps().get(0).getDataNodeNsai().getNamespace());
96 assertNull(ii4.getSteps().get(0).getDataNodeNsai().getModuleName());
97 assertNull(ii4.getSteps().get(0).getPredicateKeyValues());
98 assertNull(ii4.getSteps().get(0).getPredicateLeafListMemberValue());
99 assertNull(ii4.getSteps().get(0).getPredicateListEntryOrLeafListMemberIndex());
101 assertEquals("node2", ii4.getSteps().get(1).getDataNodeNsai().getIdentifier());
102 assertEquals("namespace1", ii4.getSteps().get(1).getDataNodeNsai().getNamespace());
103 assertNull(ii4.getSteps().get(1).getDataNodeNsai().getModuleName());
104 assertNull(ii4.getSteps().get(1).getPredicateKeyValues());
105 assertNull(ii4.getSteps().get(1).getPredicateLeafListMemberValue());
106 assertNull(ii4.getSteps().get(1).getPredicateListEntryOrLeafListMemberIndex());
108 // - - - - - - - - - - - -
110 final InstanceIdentifier ii5 = InstanceIdentifier.parseXmlEncodedString("/ns1:node1[ns2:leaf = 'A.BC']",
112 assertEquals(1, ii5.getSteps().size());
114 assertEquals("node1", ii5.getSteps().get(0).getDataNodeNsai().getIdentifier());
115 assertEquals("namespace1", ii5.getSteps().get(0).getDataNodeNsai().getNamespace());
116 assertNull(ii5.getSteps().get(0).getDataNodeNsai().getModuleName());
117 assertNull(ii5.getSteps().get(0).getPredicateLeafListMemberValue());
118 assertNull(ii5.getSteps().get(0).getPredicateListEntryOrLeafListMemberIndex());
120 final Map<NamespaceModuleIdentifier, String> ii5KeyValues0 = ii5.getSteps().get(0).getPredicateKeyValues();
121 assertNotNull(ii5KeyValues0);
122 assertEquals(1, ii5KeyValues0.size());
124 assertTrue(ii5KeyValues0.containsKey(new NamespaceModuleIdentifier("namespace2", null, "leaf")));
125 assertEquals("A.BC", ii5KeyValues0.get(new NamespaceModuleIdentifier("namespace2", null, "leaf")));
127 // - - - - - - - - - - - -
129 final InstanceIdentifier ii6 = InstanceIdentifier.parseXmlEncodedString("/ns1:node1[leaf=\"'AB.C'\"]",
130 prefixResolver); // technically that's illegal syntax, but we will encounter it in the wild.
131 assertEquals(1, ii6.getSteps().size());
133 assertEquals("node1", ii6.getSteps().get(0).getDataNodeNsai().getIdentifier());
134 assertEquals("namespace1", ii6.getSteps().get(0).getDataNodeNsai().getNamespace());
136 final Map<NamespaceModuleIdentifier, String> ii6KeyValues0 = ii6.getSteps().get(0).getPredicateKeyValues();
137 assertNotNull(ii6KeyValues0);
138 assertEquals(1, ii6KeyValues0.size());
140 assertTrue(ii6KeyValues0.containsKey(new NamespaceModuleIdentifier("namespace1", null, "leaf")));
141 assertEquals("'AB.C'", ii6KeyValues0.get(new NamespaceModuleIdentifier("namespace1", null, "leaf")));
143 // - - - - - - - - - - - -
145 final InstanceIdentifier ii7 = InstanceIdentifier.parseXmlEncodedString(
146 "/ns1:node1[ns2:leaf=\"ABC\"][ns3:other-leaf=''] ", prefixResolver);
147 assertEquals(1, ii7.getSteps().size());
149 assertEquals("node1", ii7.getSteps().get(0).getDataNodeNsai().getIdentifier());
150 assertEquals("namespace1", ii7.getSteps().get(0).getDataNodeNsai().getNamespace());
152 final Map<NamespaceModuleIdentifier, String> ii7KeyValues0 = ii7.getSteps().get(0).getPredicateKeyValues();
153 assertNotNull(ii7KeyValues0);
154 assertEquals(2, ii7KeyValues0.size());
156 assertTrue(ii7KeyValues0.containsKey(new NamespaceModuleIdentifier("namespace2", null, "leaf")));
157 assertEquals("ABC", ii7KeyValues0.get(new NamespaceModuleIdentifier("namespace2", null, "leaf")));
158 assertTrue(ii7KeyValues0.containsKey(new NamespaceModuleIdentifier("namespace3", null, "other-leaf")));
159 assertEquals("", ii7KeyValues0.get(new NamespaceModuleIdentifier("namespace3", null, "other-leaf")));
161 // - - - - - - - - - - - -
163 final InstanceIdentifier ii8 = InstanceIdentifier.parseXmlEncodedString(
164 "/ns1:node1[ns2:leaf='ABC'] [other-leaf=XYZ]", prefixResolver); // technically that's illegal syntax, but we will encounter it in the wild.
165 assertEquals(1, ii8.getSteps().size());
167 assertEquals("node1", ii8.getSteps().get(0).getDataNodeNsai().getIdentifier());
168 assertEquals("namespace1", ii8.getSteps().get(0).getDataNodeNsai().getNamespace());
169 assertNull(ii8.getSteps().get(0).getDataNodeNsai().getModuleName());
171 final Map<NamespaceModuleIdentifier, String> ii8KeyValues0 = ii8.getSteps().get(0).getPredicateKeyValues();
172 assertNotNull(ii8KeyValues0);
173 assertEquals(2, ii8KeyValues0.size());
175 assertTrue(ii8KeyValues0.containsKey(new NamespaceModuleIdentifier("namespace2", null, "leaf")));
176 assertEquals("ABC", ii8KeyValues0.get(new NamespaceModuleIdentifier("namespace2", null, "leaf")));
177 assertTrue(ii8KeyValues0.containsKey(new NamespaceModuleIdentifier("namespace1", null, "other-leaf")));
178 assertEquals("XYZ", ii8KeyValues0.get(new NamespaceModuleIdentifier("namespace1", null, "other-leaf")));
180 // - - - - - - - - - - - -
182 final InstanceIdentifier ii9 = InstanceIdentifier.parseXmlEncodedString("/ns1:node1[4]", prefixResolver);
183 assertEquals(1, ii9.getSteps().size());
185 assertEquals("node1", ii9.getSteps().get(0).getDataNodeNsai().getIdentifier());
186 assertEquals("namespace1", ii9.getSteps().get(0).getDataNodeNsai().getNamespace());
187 assertNull(ii9.getSteps().get(0).getPredicateKeyValues());
188 assertNull(ii9.getSteps().get(0).getPredicateLeafListMemberValue());
190 assertNotNull(ii9.getSteps().get(0).getPredicateListEntryOrLeafListMemberIndex());
191 assertEquals(new Integer(4), ii9.getSteps().get(0).getPredicateListEntryOrLeafListMemberIndex());
193 // - - - - - - - - - - - -
195 final InstanceIdentifier ii10 = InstanceIdentifier.parseXmlEncodedString("/ns1:node1[.='A B C']", prefixResolver);
196 assertEquals(1, ii10.getSteps().size());
198 assertEquals("node1", ii10.getSteps().get(0).getDataNodeNsai().getIdentifier());
199 assertEquals("namespace1", ii10.getSteps().get(0).getDataNodeNsai().getNamespace());
200 assertNull(ii10.getSteps().get(0).getPredicateKeyValues());
201 assertNull(ii10.getSteps().get(0).getPredicateListEntryOrLeafListMemberIndex());
203 assertNotNull(ii10.getSteps().get(0).getPredicateLeafListMemberValue());
204 assertEquals("A B C", ii10.getSteps().get(0).getPredicateLeafListMemberValue());
206 // - - - - - - - - - - - -
208 final InstanceIdentifier ii11 = InstanceIdentifier.parseXmlEncodedString(
209 "/ns1:node1/ns2:node2[5]/ns3:node3[.='ABC']/ns1:node1[ns2:leaf2='XYZ']/ns3:node3[ns1:leaf1='EFG'][ns2:leaf2='RST']",
211 assertEquals(5, ii11.getSteps().size());
213 assertEquals("node1", ii11.getSteps().get(0).getDataNodeNsai().getIdentifier());
214 assertEquals("namespace1", ii11.getSteps().get(0).getDataNodeNsai().getNamespace());
215 assertNull(ii11.getSteps().get(0).getPredicateKeyValues());
216 assertNull(ii11.getSteps().get(0).getPredicateListEntryOrLeafListMemberIndex());
217 assertNull(ii11.getSteps().get(0).getPredicateLeafListMemberValue());
219 assertEquals("node2", ii11.getSteps().get(1).getDataNodeNsai().getIdentifier());
220 assertEquals("namespace2", ii11.getSteps().get(1).getDataNodeNsai().getNamespace());
221 assertNull(ii11.getSteps().get(1).getPredicateKeyValues());
222 assertNull(ii11.getSteps().get(1).getPredicateLeafListMemberValue());
223 assertEquals(new Integer(5), ii11.getSteps().get(1).getPredicateListEntryOrLeafListMemberIndex());
225 assertEquals("node3", ii11.getSteps().get(2).getDataNodeNsai().getIdentifier());
226 assertEquals("namespace3", ii11.getSteps().get(2).getDataNodeNsai().getNamespace());
227 assertNull(ii11.getSteps().get(2).getPredicateKeyValues());
228 assertNull(ii11.getSteps().get(0).getPredicateLeafListMemberValue());
229 assertEquals("ABC", ii11.getSteps().get(2).getPredicateLeafListMemberValue());
231 assertEquals("node1", ii11.getSteps().get(3).getDataNodeNsai().getIdentifier());
232 assertEquals("namespace1", ii11.getSteps().get(3).getDataNodeNsai().getNamespace());
233 assertNull(ii11.getSteps().get(3).getPredicateListEntryOrLeafListMemberIndex());
234 assertNull(ii11.getSteps().get(3).getPredicateLeafListMemberValue());
235 assertEquals("XYZ", ii11.getSteps().get(3).getPredicateKeyValues().get(new NamespaceModuleIdentifier("namespace2",
238 assertEquals("node3", ii11.getSteps().get(4).getDataNodeNsai().getIdentifier());
239 assertEquals("namespace3", ii11.getSteps().get(4).getDataNodeNsai().getNamespace());
240 assertNull(ii11.getSteps().get(4).getPredicateListEntryOrLeafListMemberIndex());
241 assertNull(ii11.getSteps().get(4).getPredicateLeafListMemberValue());
242 assertEquals("EFG", ii11.getSteps().get(4).getPredicateKeyValues().get(new NamespaceModuleIdentifier("namespace1",
244 assertEquals("RST", ii11.getSteps().get(4).getPredicateKeyValues().get(new NamespaceModuleIdentifier("namespace2",
247 // - - - - - - - - - - - -
249 final InstanceIdentifier ii12 = InstanceIdentifier.parseXmlEncodedString("/ns1:node1[ns2:leaf='\\\"[]=./']",
251 assertEquals(1, ii12.getSteps().size());
253 final Map<NamespaceModuleIdentifier, String> ii12KeyValues0 = ii12.getSteps().get(0).getPredicateKeyValues();
254 assertTrue(ii12KeyValues0.containsKey(new NamespaceModuleIdentifier("namespace2", null, "leaf")));
255 assertEquals("\\\"[]=./", ii12KeyValues0.get(new NamespaceModuleIdentifier("namespace2", null, "leaf")));
259 public void test___xml___resolver___ok() {
261 final PrefixResolver prefixResolver = new PrefixResolver();
262 prefixResolver.addMapping("ns1", "namespace1");
263 prefixResolver.addMapping("ns2", "namespace2");
265 final ModuleAndNamespaceResolver namespaceResolver = new ModuleAndNamespaceResolver();
266 namespaceResolver.recordNamespaceMapping("namespace1", "module1");
267 namespaceResolver.recordNamespaceMapping("namespace2", "module2");
268 namespaceResolver.recordModuleMapping("module1", "namespace1");
269 namespaceResolver.recordModuleMapping("module2", "namespace2");
271 // - - - - - - - - - - - -
273 final InstanceIdentifier ii1 = InstanceIdentifier.parseXmlEncodedString("/ns1:node1", prefixResolver);
274 ii1.resolveModuleOrNamespace(namespaceResolver);
276 assertEquals(1, ii1.getSteps().size());
278 assertEquals("node1", ii1.getSteps().get(0).getDataNodeNsai().getIdentifier());
279 assertEquals("namespace1", ii1.getSteps().get(0).getDataNodeNsai().getNamespace());
280 assertEquals("module1", ii1.getSteps().get(0).getDataNodeNsai().getModuleName());
282 // - - - - - - - - - - - -
284 final InstanceIdentifier ii2 = InstanceIdentifier.parseXmlEncodedString("/ns1:node1[ns2:leaf='ABC']",
286 ii2.resolveModuleOrNamespace(namespaceResolver);
288 assertEquals(1, ii2.getSteps().size());
290 assertEquals("node1", ii2.getSteps().get(0).getDataNodeNsai().getIdentifier());
291 assertEquals("namespace1", ii2.getSteps().get(0).getDataNodeNsai().getNamespace());
292 assertEquals("module1", ii2.getSteps().get(0).getDataNodeNsai().getModuleName());
294 final Map<NamespaceModuleIdentifier, String> ii2KeyValues0 = ii2.getSteps().get(0).getPredicateKeyValues();
295 assertTrue(ii2KeyValues0.containsKey(new NamespaceModuleIdentifier("namespace2", null, "leaf")));
296 assertEquals("ABC", ii2KeyValues0.get(new NamespaceModuleIdentifier("namespace2", null, "leaf")));
297 assertTrue(ii2KeyValues0.containsKey(new NamespaceModuleIdentifier(null, "module2", "leaf")));
298 assertEquals("ABC", ii2KeyValues0.get(new NamespaceModuleIdentifier(null, "module2", "leaf")));
302 public void test___json___ok() {
304 final InstanceIdentifier ii1 = InstanceIdentifier.parseJsonEncodedString("");
305 assertTrue(ii1.getSteps().isEmpty());
307 // - - - - - - - - - - - -
309 final InstanceIdentifier ii2 = InstanceIdentifier.parseJsonEncodedString("/module1:node1");
310 assertEquals(1, ii2.getSteps().size());
312 assertEquals("node1", ii2.getSteps().get(0).getDataNodeNsai().getIdentifier());
313 assertEquals("module1", ii2.getSteps().get(0).getDataNodeNsai().getModuleName());
314 assertNull(ii2.getSteps().get(0).getDataNodeNsai().getNamespace());
315 assertNull(ii2.getSteps().get(0).getPredicateKeyValues());
316 assertNull(ii2.getSteps().get(0).getPredicateLeafListMemberValue());
317 assertNull(ii2.getSteps().get(0).getPredicateListEntryOrLeafListMemberIndex());
319 // - - - - - - - - - - - -
321 final InstanceIdentifier ii3 = InstanceIdentifier.parseJsonEncodedString("/module1:node1/module2:node2");
322 assertEquals(2, ii3.getSteps().size());
324 assertEquals("node1", ii3.getSteps().get(0).getDataNodeNsai().getIdentifier());
325 assertEquals("module1", ii3.getSteps().get(0).getDataNodeNsai().getModuleName());
326 assertNull(ii3.getSteps().get(0).getDataNodeNsai().getNamespace());
327 assertNull(ii3.getSteps().get(0).getPredicateKeyValues());
328 assertNull(ii3.getSteps().get(0).getPredicateLeafListMemberValue());
329 assertNull(ii3.getSteps().get(0).getPredicateListEntryOrLeafListMemberIndex());
331 assertEquals("node2", ii3.getSteps().get(1).getDataNodeNsai().getIdentifier());
332 assertEquals("module2", ii3.getSteps().get(1).getDataNodeNsai().getModuleName());
333 assertNull(ii3.getSteps().get(1).getDataNodeNsai().getNamespace());
334 assertNull(ii3.getSteps().get(1).getPredicateKeyValues());
335 assertNull(ii3.getSteps().get(1).getPredicateLeafListMemberValue());
336 assertNull(ii3.getSteps().get(1).getPredicateListEntryOrLeafListMemberIndex());
338 // - - - - - - - - - - - -
340 final InstanceIdentifier ii4 = InstanceIdentifier.parseJsonEncodedString("/module1:node1/node2");
341 assertEquals(2, ii4.getSteps().size());
343 assertEquals("node1", ii4.getSteps().get(0).getDataNodeNsai().getIdentifier());
344 assertEquals("module1", ii4.getSteps().get(0).getDataNodeNsai().getModuleName());
345 assertNull(ii4.getSteps().get(0).getDataNodeNsai().getNamespace());
346 assertNull(ii4.getSteps().get(0).getPredicateKeyValues());
347 assertNull(ii4.getSteps().get(0).getPredicateLeafListMemberValue());
348 assertNull(ii4.getSteps().get(0).getPredicateListEntryOrLeafListMemberIndex());
350 assertEquals("node2", ii4.getSteps().get(1).getDataNodeNsai().getIdentifier());
351 assertEquals("module1", ii4.getSteps().get(1).getDataNodeNsai().getModuleName());
352 assertNull(ii4.getSteps().get(1).getDataNodeNsai().getNamespace());
353 assertNull(ii4.getSteps().get(1).getPredicateKeyValues());
354 assertNull(ii4.getSteps().get(1).getPredicateLeafListMemberValue());
355 assertNull(ii4.getSteps().get(1).getPredicateListEntryOrLeafListMemberIndex());
357 // - - - - - - - - - - - -
359 final InstanceIdentifier ii8 = InstanceIdentifier.parseJsonEncodedString(
360 "/module1:node1[module2:leaf='ABC'][other-leaf=XYZ]");
361 assertEquals(1, ii8.getSteps().size());
363 assertEquals("node1", ii8.getSteps().get(0).getDataNodeNsai().getIdentifier());
364 assertEquals("module1", ii8.getSteps().get(0).getDataNodeNsai().getModuleName());
365 assertNull(ii8.getSteps().get(0).getDataNodeNsai().getNamespace());
367 final Map<NamespaceModuleIdentifier, String> ii8KeyValues0 = ii8.getSteps().get(0).getPredicateKeyValues();
368 assertNotNull(ii8KeyValues0);
369 assertEquals(2, ii8KeyValues0.size());
371 assertTrue(ii8KeyValues0.containsKey(new NamespaceModuleIdentifier(null, "module2", "leaf")));
372 assertEquals("ABC", ii8KeyValues0.get(new NamespaceModuleIdentifier(null, "module2", "leaf")));
373 assertTrue(ii8KeyValues0.containsKey(new NamespaceModuleIdentifier(null, "module1", "other-leaf")));
374 assertEquals("XYZ", ii8KeyValues0.get(new NamespaceModuleIdentifier(null, "module1", "other-leaf")));
378 public void test___json___resolver___ok() {
380 final ModuleAndNamespaceResolver namespaceResolver = new ModuleAndNamespaceResolver();
381 namespaceResolver.recordNamespaceMapping("namespace1", "module1");
382 namespaceResolver.recordNamespaceMapping("namespace2", "module2");
383 namespaceResolver.recordModuleMapping("module1", "namespace1");
384 namespaceResolver.recordModuleMapping("module2", "namespace2");
386 // - - - - - - - - - - - -
388 final InstanceIdentifier ii1 = InstanceIdentifier.parseJsonEncodedString("/module1:node1");
389 ii1.resolveModuleOrNamespace(namespaceResolver);
391 assertEquals(1, ii1.getSteps().size());
393 assertEquals("node1", ii1.getSteps().get(0).getDataNodeNsai().getIdentifier());
394 assertEquals("namespace1", ii1.getSteps().get(0).getDataNodeNsai().getNamespace());
395 assertEquals("module1", ii1.getSteps().get(0).getDataNodeNsai().getModuleName());
397 // - - - - - - - - - - - -
399 final InstanceIdentifier ii2 = InstanceIdentifier.parseJsonEncodedString("/module1:node1[module2:leaf='ABC']");
400 ii2.resolveModuleOrNamespace(namespaceResolver);
402 assertEquals(1, ii2.getSteps().size());
404 assertEquals("node1", ii2.getSteps().get(0).getDataNodeNsai().getIdentifier());
405 assertEquals("namespace1", ii2.getSteps().get(0).getDataNodeNsai().getNamespace());
406 assertEquals("module1", ii2.getSteps().get(0).getDataNodeNsai().getModuleName());
408 final Map<NamespaceModuleIdentifier, String> ii2KeyValues0 = ii2.getSteps().get(0).getPredicateKeyValues();
409 assertTrue(ii2KeyValues0.containsKey(new NamespaceModuleIdentifier("namespace2", null, "leaf")));
410 assertEquals("ABC", ii2KeyValues0.get(new NamespaceModuleIdentifier("namespace2", null, "leaf")));
411 assertTrue(ii2KeyValues0.containsKey(new NamespaceModuleIdentifier(null, "module2", "leaf")));
412 assertEquals("ABC", ii2KeyValues0.get(new NamespaceModuleIdentifier(null, "module2", "leaf")));
416 public void test___errors___npe() {
418 final PrefixResolver prefixResolver = new PrefixResolver();
421 InstanceIdentifier.parseXmlEncodedString(null, prefixResolver);
422 fail("Expected NullPointerException");
423 } catch (final NullPointerException ex) {
424 } catch (final Exception ex) {
425 fail("Expected NullPointerException");
429 InstanceIdentifier.parseXmlEncodedString("", null);
430 fail("Expected NullPointerException");
431 } catch (final NullPointerException ex) {
432 } catch (final Exception ex) {
433 fail("Expected NullPointerException");
437 InstanceIdentifier.parseXmlEncodedString(null, null);
438 fail("Expected NullPointerException");
439 } catch (final NullPointerException ex) {
440 } catch (final Exception ex) {
441 fail("Expected NullPointerException");
445 InstanceIdentifier.parseJsonEncodedString(null);
446 fail("Expected NullPointerException");
447 } catch (final NullPointerException ex) {
448 } catch (final Exception ex) {
449 fail("Expected NullPointerException");
454 public void test___xml___errors() {
456 final PrefixResolver prefixResolver = new PrefixResolver();
457 prefixResolver.addMapping("ns1", "namespace1");
458 prefixResolver.addMapping("ns2", "namespace2");
459 prefixResolver.addMapping("ns3", "namespace3");
461 expectException("=", prefixResolver, "slash");
462 expectException("leaf1", prefixResolver, "slash");
463 expectException("ns1:leaf1", prefixResolver, "slash");
464 expectException(".", prefixResolver, "slash");
465 expectException("[]", prefixResolver, "slash");
467 expectException("/", prefixResolver, "syntax");
468 expectException("/ns1:", prefixResolver, "syntax");
470 expectException("/=", prefixResolver, "data node");
471 expectException("/ns1::", prefixResolver, "data node");
472 expectException("/ns1:leaf1/:", prefixResolver, "data node");
473 expectException("/ns1:leaf1/ns2==", prefixResolver, "data node");
475 expectException("/leaf1", prefixResolver, "first step");
477 expectException("/nsX:leaf1", prefixResolver, "prefix");
479 expectException("/ns1:list1[a]", prefixResolver, "not parseable");
480 expectException("/ns1:list1[-1]", prefixResolver, "larger/equal to 1");
481 expectException("/ns1:list1[0]", prefixResolver, "larger/equal to 1");
483 expectException("/ns1:list1[ns2:leaf2:'abc']", prefixResolver, "data node");
484 expectException("/ns1:list1[ns2:leaf2=='abc']", prefixResolver, "single- or double-quoted string");
485 expectException("/ns1:list1[ns2:leaf2='abc'[", prefixResolver, "closing square brace");
487 expectException("/ns1:list1[ns2:leaf2=ab'c]", prefixResolver, "quote");
488 expectException("/ns1:list1[ns2:leaf2=ab\"c]", prefixResolver, "quote");
490 expectException("/ns1:list1[ns2:leaf2='abc", prefixResolver, "terminated");
491 expectException("/ns1:list1[ns2:leaf2=\"abc", prefixResolver, "terminated");
493 expectException("/ns1:list1[ns2:leaf2", prefixResolver, "syntax");
494 expectException("/ns1:list1[ns2:leaf2=", prefixResolver, "syntax");
495 expectException("/ns1:list1[ns2:leaf2=''", prefixResolver, "syntax");
498 private void expectException(final String xPath, final PrefixResolver prefixResolver, final String expectedString) {
500 InstanceIdentifier.parseXmlEncodedString(xPath, prefixResolver);
501 fail("Expected exception.");
502 } catch (final Exception ex) {
503 if (!ex.getMessage().contains(expectedString)) {
504 fail("Expected exception to contain string '" + expectedString + "'; exception message is: " + ex
510 @SuppressWarnings("unlikely-arg-type")
512 public void test___instance_identifier___equals() {
514 final PrefixResolver prefixResolver = new PrefixResolver();
515 prefixResolver.addMapping("ns1", "namespace1");
516 prefixResolver.addMapping("ns2", "namespace2");
517 prefixResolver.addMapping("ns9", "namespace1");
519 final ModuleAndNamespaceResolver namespaceResolver = new ModuleAndNamespaceResolver();
520 namespaceResolver.recordNamespaceMapping("namespace1", "module1");
521 namespaceResolver.recordNamespaceMapping("namespace2", "module2");
522 namespaceResolver.recordModuleMapping("module1", "namespace1");
523 namespaceResolver.recordModuleMapping("module2", "namespace2");
525 // - - - - - - - - - - - -
527 final InstanceIdentifier ii1 = InstanceIdentifier.parseXmlEncodedString("/ns1:node1", prefixResolver);
529 assertTrue(ii1.equals(ii1));
530 assertFalse(ii1.equals(null));
531 assertFalse(ii1.equals(""));
533 assertTrue(ii1.equals(InstanceIdentifier.parseXmlEncodedString("/ns1:node1", prefixResolver)));
534 assertTrue(ii1.equals(InstanceIdentifier.parseXmlEncodedString("/ns9:node1", prefixResolver)));
536 // - - - - - - - - - - - -
538 final InstanceIdentifier ii2 = InstanceIdentifier.parseXmlEncodedString("/ns1:node1/ns2:node2/node3",
541 assertTrue(ii2.equals(InstanceIdentifier.parseXmlEncodedString("/ns1:node1/ns2:node2/ns2:node3", prefixResolver)));
542 assertTrue(ii2.equals(InstanceIdentifier.parseXmlEncodedString("/ns9:node1/ns2:node2/node3", prefixResolver)));
544 // - - - - - - - - - - - -
546 final InstanceIdentifier ii3 = InstanceIdentifier.parseXmlEncodedString("/ns1:node1/ns2:node2/node3",
548 assertFalse(ii3.equals(InstanceIdentifier.parseJsonEncodedString("/module1:node1/module2:node2/module2:node3")));
549 ii3.resolveModuleOrNamespace(namespaceResolver);
550 assertTrue(ii3.equals(InstanceIdentifier.parseJsonEncodedString("/module1:node1/module2:node2/module2:node3")));
553 @SuppressWarnings("unlikely-arg-type")
555 public void test___step___equals() {
557 final ModuleAndNamespaceResolver namespaceResolver = new ModuleAndNamespaceResolver();
558 namespaceResolver.recordNamespaceMapping("namespace1", "module1");
559 namespaceResolver.recordNamespaceMapping("namespace2", "module2");
560 namespaceResolver.recordNamespaceMapping("namespace3", "module3");
561 namespaceResolver.recordModuleMapping("module1", "namespace1");
562 namespaceResolver.recordModuleMapping("module2", "namespace2");
563 namespaceResolver.recordModuleMapping("module3", "namespace3");
565 final NamespaceModuleIdentifier nsaiNs = new NamespaceModuleIdentifier("namespace1", null, "node1");
567 final Step step1 = new Step(nsaiNs);
569 assertTrue(step1.equals(step1));
570 assertTrue(step1.equals(new Step(nsaiNs)));
571 assertTrue(step1.equals(new Step(new NamespaceModuleIdentifier("namespace1", null, "node1"))));
572 assertFalse(step1.equals(null));
573 assertFalse(step1.equals(""));
574 assertFalse(step1.equals(new Step(new NamespaceModuleIdentifier(null, "module1", "node1"))));
576 step1.resolveModuleOrNamespace(namespaceResolver);
577 assertTrue(step1.equals(new Step(new NamespaceModuleIdentifier(null, "module1", "node1"))));
579 // - - - - - - - - - - -
581 final NamespaceModuleIdentifier nsaiPred2 = new NamespaceModuleIdentifier("namespace2", null, "leaf2");
583 final Step step2 = new Step(nsaiNs);
584 step2.addPredicateKeyValue(nsaiPred2, "Hello");
586 assertTrue(step2.equals(step2));
587 assertTrue(step2.equals(new Step(new NamespaceModuleIdentifier("namespace1", null, "node1")).addPredicateKeyValue(
588 nsaiPred2, "Hello")));
589 assertTrue(step2.equals(new Step(new NamespaceModuleIdentifier("namespace1", null, "node1")).addPredicateKeyValue(
590 new NamespaceModuleIdentifier("namespace2", null, "leaf2"), "Hello")));
591 assertFalse(step2.equals(new Step(new NamespaceModuleIdentifier("namespace1", null, "node1"))));
592 assertFalse(step2.equals(new Step(new NamespaceModuleIdentifier("namespace1", null, "node1")).addPredicateKeyValue(
593 nsaiPred2, "hello")));
594 assertFalse(step2.equals(new Step(new NamespaceModuleIdentifier("namespace1", null, "node1")).addPredicateKeyValue(
597 assertFalse(step2.equals(new Step(new NamespaceModuleIdentifier("namespace1", null, "node1")).addPredicateKeyValue(
598 new NamespaceModuleIdentifier(null, "module2", "leaf2"), "Hello")));
599 step2.resolveModuleOrNamespace(namespaceResolver);
600 assertTrue(step2.equals(new Step(new NamespaceModuleIdentifier("namespace1", null, "node1")).addPredicateKeyValue(
601 new NamespaceModuleIdentifier(null, "module2", "leaf2"), "Hello")));
603 // - - - - - - - - - - -
605 final NamespaceModuleIdentifier nsaiPred3 = new NamespaceModuleIdentifier("namespace3", null, "leaf3");
607 final Step step3 = new Step(nsaiNs);
608 step3.addPredicateKeyValue(nsaiPred2, "Hello");
609 step3.addPredicateKeyValue(nsaiPred3, "World");
611 assertTrue(step3.equals(step3));
612 assertTrue(step3.equals(new Step(new NamespaceModuleIdentifier("namespace1", null, "node1")).addPredicateKeyValue(
613 nsaiPred2, "Hello").addPredicateKeyValue(nsaiPred3, "World")));
614 assertTrue(step3.equals(new Step(new NamespaceModuleIdentifier("namespace1", null, "node1")).addPredicateKeyValue(
615 nsaiPred3, "World").addPredicateKeyValue(nsaiPred2, "Hello")));
617 // - - - - - - - - - - -
619 final Step step4 = new Step(nsaiNs);
620 step4.setPredicateLeafListMemberValue("value1");
622 assertTrue(step4.equals(step4));
623 assertTrue(step4.equals(new Step(nsaiNs).setPredicateLeafListMemberValue("value1")));
624 assertFalse(step4.equals(new Step(nsaiNs)));
625 assertFalse(step4.equals(new Step(nsaiNs).setPredicateLeafListMemberValue("valueXxxx")));
626 assertFalse(step4.equals(new Step(nsaiNs).addPredicateKeyValue(nsaiPred2, "Hello")));
628 // - - - - - - - - - - -
630 final Step step5 = new Step(nsaiNs);
631 step5.setPredicateListEntryOrLeafListMemberIndex(1);
633 assertTrue(step5.equals(step5));
634 assertTrue(step5.equals(new Step(nsaiNs).setPredicateListEntryOrLeafListMemberIndex(1)));
635 assertFalse(step5.equals(new Step(nsaiNs)));
636 assertFalse(step5.equals(new Step(nsaiNs).setPredicateListEntryOrLeafListMemberIndex(2)));
637 assertFalse(step5.equals(new Step(nsaiNs).addPredicateKeyValue(nsaiPred2, "Hello")));
638 assertFalse(step5.equals(new Step(nsaiNs).setPredicateLeafListMemberValue("value1")));
642 public void test___step___exceptions() {
646 fail("Expected exception.");
647 } catch (final Exception expected) {
650 final NamespaceModuleIdentifier nsai = new NamespaceModuleIdentifier("namespace1", null, "node1");
653 new Step(nsai).addPredicateKeyValue(null, "value1");
654 fail("Expected exception.");
655 } catch (final Exception expected) {
659 new Step(nsai).addPredicateKeyValue(nsai, null);
660 fail("Expected exception.");
661 } catch (final Exception expected) {
665 new Step(nsai).addPredicateKeyValue(null, null);
666 fail("Expected exception.");
667 } catch (final Exception expected) {
671 new Step(nsai).setPredicateLeafListMemberValue(null);
672 fail("Expected exception.");
673 } catch (final Exception expected) {
677 new Step(nsai).setPredicateListEntryOrLeafListMemberIndex(0);
678 fail("Expected exception.");
679 } catch (final Exception expected) {
683 new Step(nsai).addPredicateKeyValue(nsai, "value1").setPredicateLeafListMemberValue("value1");
684 fail("Expected exception.");
685 } catch (final Exception expected) {
689 new Step(nsai).setPredicateLeafListMemberValue("value1").addPredicateKeyValue(nsai, "value1");
690 fail("Expected exception.");
691 } catch (final Exception expected) {
695 new Step(nsai).setPredicateListEntryOrLeafListMemberIndex(10).addPredicateKeyValue(nsai, "value1");
696 fail("Expected exception.");
697 } catch (final Exception expected) {
701 new Step(nsai).setPredicateListEntryOrLeafListMemberIndex(10).setPredicateLeafListMemberValue("value1");
702 fail("Expected exception.");
703 } catch (final Exception expected) {
707 new Step(nsai).setPredicateLeafListMemberValue("value1").setPredicateListEntryOrLeafListMemberIndex(10);
708 fail("Expected exception.");
709 } catch (final Exception expected) {