2 * Copyright (c) 2014 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.binding.generator.util.generated.type.builder;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotEquals;
13 import static org.junit.Assert.assertNotNull;
14 import static org.junit.Assert.assertNull;
16 import com.google.common.base.Optional;
17 import java.util.Arrays;
18 import java.util.Collections;
19 import java.util.List;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration;
23 import org.opendaylight.yangtools.yang.common.QName;
24 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
25 import org.opendaylight.yangtools.yang.model.api.Status;
26 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
28 import org.opendaylight.yangtools.yang.model.util.EnumerationType;
30 public class EnumerationBuilderImplTest {
32 private EnumerationBuilderImpl enumerationBuilder;
33 private EnumerationBuilderImpl enumerationBuilderSame;
34 private EnumerationBuilderImpl enumerationBuilderOtherName;
35 private EnumerationBuilderImpl enumerationBuilderOtherPackage;
36 private final String DESCRIPTION = "Test description of Enum";
37 private final String packageName = "org.opendaylight.test";
38 private final String name = "TestName";
39 private final String moduleName = "TestModuleName";
40 private final String reference = "TestRef";
41 private final String valueName = "TestValue";
42 private final String valueDescription = "Value used for test";
43 private final int value = 12;
44 private Enumeration enumeration;
45 private final QName qName = QName.create("TestQName", "10-10-2014", "TestLocalQName");
50 enumerationBuilder = new EnumerationBuilderImpl(packageName, name);
51 enumerationBuilder.setDescription(DESCRIPTION);
52 enumerationBuilder.setModuleName(moduleName);
53 enumerationBuilder.setReference(reference);
54 enumerationBuilder.setSchemaPath(Collections.singletonList(qName));
55 enumerationBuilder.addValue(valueName, value, valueDescription);
56 enumerationBuilder.addAnnotation(packageName, "TestAnnotation");
57 enumerationBuilderSame = new EnumerationBuilderImpl(packageName, name);
58 enumerationBuilderOtherName = new EnumerationBuilderImpl(packageName, "SomeOtherName");
59 enumerationBuilderOtherPackage = new EnumerationBuilderImpl("org.opendaylight.other", name);
60 enumeration = enumerationBuilder.toInstance(enumerationBuilder);
64 public void testAddNullAnnotation() {
65 assertNull(enumerationBuilder.addAnnotation(null, null));
66 assertNull(enumerationBuilder.addAnnotation(null, "test"));
67 assertNull(enumerationBuilder.addAnnotation(packageName, null));
71 public void testEnumerationBuilder() {
72 assertEquals(packageName + "." + name, enumerationBuilder.getFullyQualifiedName());
73 assertEquals(name , enumerationBuilder.getName());
74 assertEquals(packageName, enumerationBuilder.getPackageName());
76 assertNotEquals(enumerationBuilder, null);
77 assertEquals(enumerationBuilder, enumerationBuilder);
78 assertNotEquals(enumerationBuilder, "string");
79 assertNotEquals(enumerationBuilder, enumerationBuilderOtherName);
80 assertNotEquals(enumerationBuilder, enumerationBuilderOtherPackage);
81 assertEquals(enumerationBuilder,enumerationBuilderSame);
85 public void testEnumeration() {
86 assertEquals(name, enumeration.getName());
87 assertEquals(packageName, enumeration.getPackageName());
88 assertEquals(null, enumeration.getComment());
89 assertEquals(enumerationBuilder, enumeration.getParentType());
90 assertEquals(DESCRIPTION, enumeration.getDescription());
91 assertEquals(moduleName, enumeration.getModuleName());
92 assertEquals(packageName + '.' + name, enumeration.getFullyQualifiedName());
93 assertEquals(reference, enumeration.getReference());
94 assertEquals(Collections.singletonList(qName), enumeration.getSchemaPath());
95 assertEquals(Collections.EMPTY_LIST, enumeration.getEnclosedTypes());
96 assertEquals(Collections.EMPTY_LIST, enumeration.getEnumerations());
97 assertEquals(Collections.EMPTY_LIST, enumeration.getMethodDefinitions());
98 assertEquals(Collections.EMPTY_LIST, enumeration.getConstantDefinitions());
99 assertEquals(Collections.EMPTY_LIST, enumeration.getProperties());
100 assertEquals(Collections.EMPTY_LIST, enumeration.getImplements());
101 assertNotNull(enumeration.getValues());
102 assertNotNull(enumeration.getAnnotations());
104 assertFalse(enumeration.isAbstract());
105 assertNotEquals(enumeration, null);
106 assertEquals(enumeration, enumeration);
107 assertNotEquals(enumeration, "string");
109 Enumeration enumerationOtherPackage = enumerationBuilderOtherPackage.toInstance(enumerationBuilderOtherPackage);
110 assertNotEquals(enumeration, enumerationOtherPackage);
112 Enumeration enumerationOtherName = enumerationBuilderOtherName.toInstance(enumerationBuilderOtherName);
113 assertNotEquals(enumeration, enumerationOtherName);
115 enumerationBuilderSame.addValue(valueName, value, valueDescription);
116 Enumeration enumerationSame = enumerationBuilderSame.toInstance(enumerationBuilderSame);
117 assertEquals(enumeration, enumerationSame);
119 EnumerationBuilderImpl enumerationBuilderSame1 = new EnumerationBuilderImpl(packageName, name);
120 Enumeration enumerationSame1 = enumerationBuilderSame1.toInstance(enumerationBuilderSame1);
121 enumerationBuilderSame1.addValue(valueName, 14, valueDescription);
122 // Enums are equal thanks to same package name and local name
123 assertEquals(enumeration, enumerationSame1);
127 public void testEnumerationToString() {
128 String formattedString =
129 "public enum " + name + " {\n" +
130 "\t TestValue " + "(12 );\n" +
132 String s = "Enumeration [packageName="+packageName+", definingType="+packageName+"."+name+", name="+name+
133 ", values=[EnumPair [name=TestValue, value=12]]]";
135 assertEquals(s, enumeration.toString());
136 assertEquals(formattedString, enumeration.toFormattedString());
138 assertEquals("EnumerationBuilderImpl " +
139 "[packageName=org.opendaylight.test, name=TestName, " +
140 "values=[EnumPair [name=TestValue, value=12]]]",
141 enumerationBuilder.toString());
145 public void testUpdateEnumPairsFromEnumTypeDef() {
146 EnumTypeDefinition.EnumPair enumPair = EnumPairImpl.create(qName);
147 EnumTypeDefinition enumTypeDefinition = EnumerationType.create(SchemaPath.SAME,
148 Arrays.asList(enumPair), Optional.of(enumPair));
149 enumerationBuilder.updateEnumPairsFromEnumTypeDef(enumTypeDefinition);
153 * Internal implementation of EnumPair.
155 private static class EnumPairImpl implements EnumTypeDefinition.EnumPair {
156 private final QName qname;
157 private final SchemaPath path;
158 private final String description;
159 private final String reference;
160 private final Status status;
161 private final List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
162 private final String name;
163 private final Integer value;
165 private EnumPairImpl(QName qName) {
167 path = SchemaPath.SAME;
168 description = "Some Other Description";
169 reference = "Some other reference";
170 status = Status.CURRENT;
175 public static EnumPairImpl create(QName qName) {
176 return new EnumPairImpl(qName);
180 public QName getQName() {
185 public SchemaPath getPath() {
190 public String getDescription() {
195 public String getReference() {
200 public Status getStatus() {
205 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
210 public String getName() {
215 public Integer getValue() {
220 public int hashCode() {
221 final int prime = 31;
223 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
224 result = prime * result + ((path == null) ? 0 : path.hashCode());
225 result = prime * result + ((unknownNodes == null) ? 0 : unknownNodes.hashCode());
226 result = prime * result + ((name == null) ? 0 : name.hashCode());
227 result = prime * result + ((value == null) ? 0 : value.hashCode());
232 public boolean equals(final Object obj) {
239 if (getClass() != obj.getClass()) {
242 EnumPairImpl other = (EnumPairImpl) obj;
244 if (other.qname != null) {
247 } else if (!qname.equals(other.qname)) {
251 if (other.path != null) {
254 } else if (!path.equals(other.path)) {
257 if (unknownNodes == null) {
258 if (other.unknownNodes != null) {
261 } else if (!unknownNodes.equals(other.unknownNodes)) {
265 if (other.name != null) {
268 } else if (!name.equals(other.name)) {
272 if (other.value != null) {
275 } else if (!value.equals(other.value)) {
282 public String toString() {
283 return EnumTypeDefinition.EnumPair.class.getSimpleName() + "[name=" + name + ", value=" + value + "]";