Make model prefix handling optional
[yangtools.git] / codec / yang-data-codec-xml / src / test / java / org / opendaylight / yangtools / yang / data / codec / xml / PreferredPrefixesTest.java
1 /*
2  * Copyright (c) 2023 PANTHEON.tech, s.r.o. 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.codec.xml;
9
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertNull;
12 import static org.junit.jupiter.api.Assertions.assertTrue;
13
14 import java.util.Map;
15 import java.util.Optional;
16 import org.eclipse.jdt.annotation.NonNull;
17 import org.junit.jupiter.api.Test;
18 import org.opendaylight.yangtools.yang.common.XMLNamespace;
19 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
20
21 class PreferredPrefixesTest {
22     private static final @NonNull XMLNamespace FOONS = XMLNamespace.of("foons");
23     private static final @NonNull XMLNamespace BARNS = XMLNamespace.of("barns");
24
25     @Test
26     void ignorePrefixWhenConflicting() {
27         final var context = YangParserTestUtils.parseYang("""
28             module foo {
29               namespace foons;
30               prefix conflict;
31             }""", """
32             module bar {
33               namespace barns;
34               prefix conflict;
35             }
36             """);
37         final var prefixes = new PreferredPrefixes.Shared(context);
38         assertNull(prefixes.prefixForNamespace(FOONS));
39         assertNull(prefixes.prefixForNamespace(BARNS));
40         assertEquals(Map.of(FOONS, Optional.empty(), BARNS, Optional.empty()), prefixes.mappings());
41         assertEquals("Precomputed{mappings={}}", prefixes.toPrecomputed().toString());
42     }
43
44     @Test
45     void bindPrefixAcrossRevisions() {
46         final var context = YangParserTestUtils.parseYang("""
47             module foo {
48               namespace foons;
49               prefix f;
50             }""", """
51             module foo2 {
52               namespace foons;
53               prefix f;
54               revision 2023-09-29;
55             }
56             """);
57         final var prefixes = new PreferredPrefixes.Shared(context);
58         assertEquals("f", prefixes.prefixForNamespace(FOONS));
59         assertEquals("Shared{mappings={foons=Optional[f]}}", prefixes.toString());
60
61         final var precomputed = prefixes.toPrecomputed();
62         assertEquals("f", precomputed.prefixForNamespace(FOONS));
63         assertEquals("Precomputed{mappings={foons=f}}", precomputed.toString());
64     }
65
66     @Test
67     void ignorePrefixWhenStartsWithXml() {
68         final var context = YangParserTestUtils.parseYang("""
69             module foo {
70               namespace foons;
71               prefix XMl;
72             }""", """
73             module bar {
74               namespace barns;
75               prefix xmLa;
76             }""", """
77             module baz {
78               namespace bazns;
79               prefix xlx;
80             }""", """
81             module qux {
82               namespace quxns;
83               prefix xmx;
84             }""", """
85             module xyzzy {
86               namespace xyzzyns;
87               prefix xyz;
88             }""");
89         assertEquals(Map.of(
90             XMLNamespace.of("bazns"), "xlx",
91             XMLNamespace.of("quxns"), "xmx",
92             XMLNamespace.of("xyzzyns"), "xyz"), new PreferredPrefixes.Shared(context).toPrecomputed().mappings());
93     }
94
95     @Test
96     void ignorePrefixesStartingWithXML() {
97         final var prefixes = new PreferredPrefixes.Shared(YangParserTestUtils.parseYang("""
98             module foo {
99               namespace foons;
100               prefix a;
101             }"""));
102         assertTrue(prefixes.isUsed("a"));
103         assertEquals("Shared{mappings={}}", prefixes.toString());
104         final var precomputed = prefixes.toPrecomputed();
105         assertTrue(precomputed.isUsed("a"));
106         assertEquals("Precomputed{mappings={foons=a}}", precomputed.toString());
107     }
108 }