db4c9b710bb34259970eec7330eb91492668a9cc
[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
13 import java.util.Map;
14 import java.util.Optional;
15 import org.eclipse.jdt.annotation.NonNull;
16 import org.junit.jupiter.api.Test;
17 import org.opendaylight.yangtools.yang.common.XMLNamespace;
18 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
19
20 class PreferredPrefixesTest {
21     private static final @NonNull XMLNamespace FOONS = XMLNamespace.of("foons");
22     private static final @NonNull XMLNamespace BARNS = XMLNamespace.of("barns");
23
24     @Test
25     void ignorePrefixWhenConflicting() {
26         final var context = YangParserTestUtils.parseYang("""
27             module foo {
28               namespace foons;
29               prefix conflict;
30             }""", """
31             module bar {
32               namespace barns;
33               prefix conflict;
34             }
35             """);
36         final var prefixes = new PreferredPrefixes.Shared(context);
37         assertNull(prefixes.prefixForNamespace(FOONS));
38         assertNull(prefixes.prefixForNamespace(BARNS));
39         assertEquals(Map.of(FOONS, Optional.empty(), BARNS, Optional.empty()), prefixes.mappings());
40         assertEquals("Precomputed{mappings={}}", prefixes.toPrecomputed().toString());
41     }
42
43     @Test
44     void bindPrefixAcrossRevisions() {
45         final var context = YangParserTestUtils.parseYang("""
46             module foo {
47               namespace foons;
48               prefix f;
49             }""", """
50             module foo2 {
51               namespace foons;
52               prefix f;
53               revision 2023-09-29;
54             }
55             """);
56         final var prefixes = new PreferredPrefixes.Shared(context);
57         assertEquals("f", prefixes.prefixForNamespace(FOONS));
58         assertEquals("Shared{mappings={foons=Optional[f]}}", prefixes.toString());
59         assertEquals("Precomputed{mappings={foons=f}}", prefixes.toPrecomputed().toString());
60     }
61
62     @Test
63     void ignorePrefixWhenStartsWithXml() {
64         final var context = YangParserTestUtils.parseYang("""
65             module foo {
66               namespace foons;
67               prefix XMl;
68             }""", """
69             module bar {
70               namespace barns;
71               prefix xmLa;
72             }""", """
73             module baz {
74               namespace bazns;
75               prefix xlx;
76             }""", """
77             module qux {
78               namespace quxns;
79               prefix xmx;
80             }""", """
81             module xyzzy {
82               namespace xyzzyns;
83               prefix xyz;
84             }""");
85         assertEquals(Map.of(
86             XMLNamespace.of("bazns"), "xlx",
87             XMLNamespace.of("quxns"), "xmx",
88             XMLNamespace.of("xyzzyns"), "xyz"), new PreferredPrefixes.Shared(context).toPrecomputed().mappings());
89     }
90 }