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.yangtools.yang.binding;
10 import static com.google.common.collect.ImmutableList.of;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
15 import static org.junit.Assert.fail;
17 import java.lang.reflect.Constructor;
18 import java.lang.reflect.InvocationTargetException;
20 import java.util.HashMap;
21 import java.util.List;
23 import org.junit.Test;
24 import org.opendaylight.yangtools.yang.common.QName;
25 import org.opendaylight.yangtools.yang.common.QNameModule;
26 import org.opendaylight.yangtools.yang.common.Revision;
28 public class BindingMappingTest {
31 public void basicTest() {
32 assertTrue(BindingMapping.getRootPackageName(QName.create(QNameModule.create(URI.create("test:URI"),
33 Revision.of("2017-10-26")), "test")).contains("test.uri"));
34 assertNull(BindingMapping.normalizePackageName(null));
35 assertTrue(BindingMapping.normalizePackageName("1testpublic").contains("_1testpublic"));
36 assertTrue(BindingMapping.getMethodName(QName.create("testNS", "testLocalName")).equals("testLocalName"));
37 assertTrue(BindingMapping.getMethodName("TestYangIdentifier").equals("testYangIdentifier"));
38 assertTrue(BindingMapping.getClassName(QName.create("testNS", "testClass")).equals("TestClass"));
39 assertTrue(BindingMapping.getClassName("testClass").equals("TestClass"));
40 assertTrue(BindingMapping.getGetterSuffix(QName.create("test", "test")).equals("Test"));
41 assertTrue(BindingMapping.getGetterSuffix(QName.create("test", "class")).equals("XmlClass"));
42 assertTrue(BindingMapping.getPropertyName("Test").equals("test"));
43 assertTrue(BindingMapping.getPropertyName("test").equals("test"));
44 assertTrue(BindingMapping.getPropertyName("Class").equals("xmlClass"));
45 assertEquals("_5", BindingMapping.getPropertyName("5"));
46 assertEquals("", BindingMapping.getPropertyName(""));
47 assertEquals("", BindingMapping.getClassName(""));
50 @Test(expected = UnsupportedOperationException.class)
51 @SuppressWarnings({ "checkstyle:illegalThrows", "checkstyle:avoidHidingCauseException" })
52 public void privateConstructTest() throws Throwable {
53 final Constructor<BindingMapping> bindingMappingConstructor = BindingMapping.class.getDeclaredConstructor();
54 assertFalse(bindingMappingConstructor.isAccessible());
56 bindingMappingConstructor.setAccessible(true);
58 bindingMappingConstructor.newInstance();
59 fail("Expected exception for calling private constructor");
60 } catch (InvocationTargetException e) {
66 public void mapEnumAssignedNamesTest() {
68 assertEqualMapping("__", "__");
69 assertEqualMapping("True", "true");
70 assertEqualMapping("ĽaľahoPapľuhu", "ľaľaho papľuhu");
72 // Contains a '$', but that's okay
73 assertEqualMapping("$", "$");
74 assertEqualMapping("$abc", "$abc");
75 assertEqualMapping("A$bc", "a$bc");
76 assertEqualMapping("Ab$c", "ab$c");
77 assertEqualMapping("Abc$", "abc$");
79 // Mostly okay, but numbers need to be prefixed
80 assertEqualMapping(of("AZ", "_09"), of("a-z", "0-9"));
82 // Invalid identifier (conflicts with a Java 9 keyword)
83 assertEqualMapping("$_", "_");
85 // Invalid characters, fall back to bijection
86 assertEqualMapping("$$2A$", "*");
87 assertEqualMapping("$$2E$", ".");
88 assertEqualMapping("$$2F$", "/");
89 assertEqualMapping("$$3F$", "?");
90 assertEqualMapping("$a$2A$a", "a*a");
92 // Conflict, fallback to bijection
93 assertEqualMapping(of("_09", "$0$2D$9"), of("_09", "0-9"));
94 assertEqualMapping(of("$09", "$0$2D$9"), of("09", "0-9"));
95 assertEqualMapping(of("aZ", "$a$2D$z"), of("aZ", "a-z"));
96 assertEqualMapping(of("$a2$2E$5", "a25"), of("a2.5", "a25"));
97 assertEqualMapping(of("$a2$2E$5", "$a2$2D$5"), of("a2.5", "a2-5"));
98 assertEqualMapping(of("$ľaľaho$20$papľuhu", "$ľaľaho$20$$20$papľuhu"), of("ľaľaho papľuhu", "ľaľaho papľuhu"));
101 private static void assertEqualMapping(final String mapped, final String yang) {
102 assertEqualMapping(of(mapped), of(yang));
105 private static void assertEqualMapping(final List<String> mapped, final List<String> yang) {
106 assertEquals(mapped.size(), yang.size());
107 final Map<String, String> expected = new HashMap<>();
108 for (int i = 0; i < mapped.size(); ++i) {
109 expected.put(yang.get(i), mapped.get(i));
112 assertEquals(expected, BindingMapping.mapEnumAssignedNames(yang));