2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.mdsal.binding.spec.naming;
10 import static org.junit.Assert.assertEquals;
12 import java.util.HashMap;
13 import java.util.List;
15 import org.junit.Test;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.common.QNameModule;
18 import org.opendaylight.yangtools.yang.common.Revision;
19 import org.opendaylight.yangtools.yang.common.XMLNamespace;
21 public class BindingMappingTest {
23 public void testGetModelRootPackageName() {
24 assertEquals("org.opendaylight.yang.gen.v1.test.rev990939",
25 BindingMapping.getModelRootPackageName("org.opendaylight.yang.gen.v1.test.rev990939"));
29 public void testGetMethodName() {
30 assertEquals("testLocalName", BindingMapping.getMethodName(QName.create("testNS", "testLocalName")));
31 assertEquals("testYangIdentifier", BindingMapping.getMethodName("TestYangIdentifier"));
35 public void testGetClassName() {
36 assertEquals("TestClass", BindingMapping.getClassName(QName.create("testNS", "testClass")));
37 assertEquals("TestClass", BindingMapping.getClassName("testClass"));
38 assertEquals("", BindingMapping.getClassName(""));
39 assertEquals("SomeTestingClassName", BindingMapping.getClassName(" some-testing_class name "));
40 assertEquals("_0SomeTestingClassName", BindingMapping.getClassName(" 0 some-testing_class name "));
44 public void testGetPropertyName() {
45 assertEquals("test", BindingMapping.getPropertyName("Test"));
46 assertEquals("test", BindingMapping.getPropertyName("test"));
47 assertEquals("xmlClass", BindingMapping.getPropertyName("Class"));
48 assertEquals("_5", BindingMapping.getPropertyName("5"));
49 assertEquals("", BindingMapping.getPropertyName(""));
50 assertEquals("someTestingParameterName", BindingMapping.getPropertyName(" some-testing_parameter name "));
51 assertEquals("_0someTestingParameterName",
52 BindingMapping.getPropertyName(" 0some-testing_parameter name "));
56 public void basicTest() {
57 assertEquals("org.opendaylight.yang.gen.v1.test.uri.rev171026",
58 BindingMapping.getRootPackageName(QName.create("test:URI", "2017-10-26", "test")));
59 assertEquals("org.opendaylight.yang.gen.v1.urn.m.o.d.u.l.e.n.a.m.e.t.e.s.t._case._1digit.rev130910",
60 BindingMapping.getRootPackageName(QNameModule.create(
61 XMLNamespace.of("urn:m*o+d,u;l=e.n/a-m@e.t$e#s't.case.1digit"), Revision.of("2013-09-10"))));
62 assertEquals("_1testpublic", BindingMapping.normalizePackageName("1testpublic"));
63 assertEquals("Test", BindingMapping.getGetterSuffix(QName.create("test", "test")));
64 assertEquals("XmlClass", BindingMapping.getGetterSuffix(QName.create("test", "class")));
68 public void mapEnumAssignedNamesTest() {
70 assertEqualMapping("__", "__");
71 assertEqualMapping("True", "true");
72 assertEqualMapping("ĽaľahoPapľuhu", "ľaľaho papľuhu");
74 // Contains a '$', but that's okay
75 assertEqualMapping("$", "$");
76 assertEqualMapping("$abc", "$abc");
77 assertEqualMapping("A$bc", "a$bc");
78 assertEqualMapping("Ab$c", "ab$c");
79 assertEqualMapping("Abc$", "abc$");
81 // Mostly okay, but numbers need to be prefixed
82 assertEqualMapping(List.of("AZ", "_09"), List.of("a-z", "0-9"));
84 // Invalid identifier (conflicts with a Java 9 keyword)
85 assertEqualMapping("$_", "_");
87 // Invalid characters, fall back to bijection
88 assertEqualMapping("$$2A$", "*");
89 assertEqualMapping("$$2E$", ".");
90 assertEqualMapping("$$2F$", "/");
91 assertEqualMapping("$$3F$", "?");
92 assertEqualMapping("$a$2A$a", "a*a");
94 // Conflict, fallback to bijection
95 assertEqualMapping(List.of("_09", "$0$2D$9"), List.of("_09", "0-9"));
96 assertEqualMapping(List.of("$09", "$0$2D$9"), List.of("09", "0-9"));
97 assertEqualMapping(List.of("aZ", "$a$2D$z"), List.of("aZ", "a-z"));
98 assertEqualMapping(List.of("$a2$2E$5", "a25"), List.of("a2.5", "a25"));
99 assertEqualMapping(List.of("$a2$2E$5", "$a2$2D$5"), List.of("a2.5", "a2-5"));
100 assertEqualMapping(List.of("$ľaľaho$20$papľuhu", "$ľaľaho$20$$20$papľuhu"),
101 List.of("ľaľaho papľuhu", "ľaľaho papľuhu"));
104 private static void assertEqualMapping(final String mapped, final String yang) {
105 assertEqualMapping(List.of(mapped), List.of(yang));
108 private static void assertEqualMapping(final List<String> mapped, final List<String> yang) {
109 assertEquals(mapped.size(), yang.size());
110 final Map<String, String> expected = new HashMap<>();
111 for (int i = 0; i < mapped.size(); ++i) {
112 expected.put(yang.get(i), mapped.get(i));
115 assertEquals(expected, BindingMapping.mapEnumAssignedNames(yang));
119 public void yangDataMapping() {
120 // single ascii compliant non-conflicting word - remain as is
121 assertEquals("single", BindingMapping.mapYangDataName("single"));
122 // ascii compliant - non-compliany chars only encoded
123 assertEquals("$abc$20$cde", BindingMapping.mapYangDataName("abc cde"));
124 // latin1 compliant -> latin chars normalized, non-compliant chars are encoded
125 assertEquals("$ľaľaho$20$papľuhu", BindingMapping.mapYangDataName("ľaľaho papľuhu"));
126 // latin1 non-compliant - all non-compliant characters encoded
127 assertEquals("$привет$20$papľuhu", BindingMapping.mapYangDataName("привет papľuhu"));