eb5bd65f5184ae3e7cd229937db883601d5c0dc0
[mdsal.git] / binding / mdsal-binding-generator-util / src / test / java / org / opendaylight / yangtools / binding / generator / util / generated / type / builder / EnumerationBuilderImplTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. 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.binding.generator.util.generated.type.builder;
9
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;
15
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;
29
30 public class EnumerationBuilderImplTest {
31
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");
46
47
48     @Before
49     public void setup() {
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);
61     }
62
63     @Test
64     public void testAddNullAnnotation() {
65         assertNull(enumerationBuilder.addAnnotation(null, null));
66         assertNull(enumerationBuilder.addAnnotation(null, "test"));
67         assertNull(enumerationBuilder.addAnnotation(packageName, null));
68     }
69
70     @Test
71     public void testEnumerationBuilder() {
72         assertEquals(packageName + "." + name, enumerationBuilder.getFullyQualifiedName());
73         assertEquals(name , enumerationBuilder.getName());
74         assertEquals(packageName, enumerationBuilder.getPackageName());
75
76         assertNotEquals(enumerationBuilder, null);
77         assertEquals(enumerationBuilder, enumerationBuilder);
78         assertNotEquals(enumerationBuilder, "string");
79         assertNotEquals(enumerationBuilder, enumerationBuilderOtherName);
80         assertNotEquals(enumerationBuilder, enumerationBuilderOtherPackage);
81         assertEquals(enumerationBuilder,enumerationBuilderSame);
82     }
83
84     @Test
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());
103
104         assertFalse(enumeration.isAbstract());
105         assertNotEquals(enumeration, null);
106         assertEquals(enumeration, enumeration);
107         assertNotEquals(enumeration, "string");
108
109         Enumeration enumerationOtherPackage = enumerationBuilderOtherPackage.toInstance(enumerationBuilderOtherPackage);
110         assertNotEquals(enumeration, enumerationOtherPackage);
111
112         Enumeration enumerationOtherName = enumerationBuilderOtherName.toInstance(enumerationBuilderOtherName);
113         assertNotEquals(enumeration, enumerationOtherName);
114
115         enumerationBuilderSame.addValue(valueName, value, valueDescription);
116         Enumeration enumerationSame = enumerationBuilderSame.toInstance(enumerationBuilderSame);
117         assertEquals(enumeration, enumerationSame);
118
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);
124     }
125
126     @Test
127     public void testEnumerationToString() {
128         String formattedString =
129                 "public enum " + name + " {\n" +
130                 "\t TestValue " + "(12 );\n" +
131                 "}";
132         String s = "Enumeration [packageName="+packageName+", definingType="+packageName+"."+name+", name="+name+
133                 ", values=[EnumPair [name=TestValue, value=12]]]";
134
135         assertEquals(s, enumeration.toString());
136         assertEquals(formattedString, enumeration.toFormattedString());
137
138         assertEquals("EnumerationBuilderImpl " +
139                 "[packageName=org.opendaylight.test, name=TestName, " +
140                 "values=[EnumPair [name=TestValue, value=12]]]",
141                 enumerationBuilder.toString());
142     }
143
144     @Test
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);
150     }
151
152     /**
153      * Internal implementation of EnumPair.
154      */
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;
164
165         private EnumPairImpl(QName qName) {
166             qname = qName;
167             path = SchemaPath.SAME;
168             description = "Some Other Description";
169             reference = "Some other reference";
170             status = Status.CURRENT;
171             name = "SomeName";
172             value = 45;
173         }
174
175         public static EnumPairImpl create(QName qName) {
176             return new EnumPairImpl(qName);
177         }
178
179         @Override
180         public QName getQName() {
181             return qname;
182         }
183
184         @Override
185         public SchemaPath getPath() {
186             return path;
187         }
188
189         @Override
190         public String getDescription() {
191             return description;
192         }
193
194         @Override
195         public String getReference() {
196             return reference;
197         }
198
199         @Override
200         public Status getStatus() {
201             return status;
202         }
203
204         @Override
205         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
206             return unknownNodes;
207         }
208
209         @Override
210         public String getName() {
211             return name;
212         }
213
214         @Override
215         public Integer getValue() {
216             return value;
217         }
218
219         @Override
220         public int hashCode() {
221             final int prime = 31;
222             int result = 1;
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());
228             return result;
229         }
230
231         @Override
232         public boolean equals(final Object obj) {
233             if (this == obj) {
234                 return true;
235             }
236             if (obj == null) {
237                 return false;
238             }
239             if (getClass() != obj.getClass()) {
240                 return false;
241             }
242             EnumPairImpl other = (EnumPairImpl) obj;
243             if (qname == null) {
244                 if (other.qname != null) {
245                     return false;
246                 }
247             } else if (!qname.equals(other.qname)) {
248                 return false;
249             }
250             if (path == null) {
251                 if (other.path != null) {
252                     return false;
253                 }
254             } else if (!path.equals(other.path)) {
255                 return false;
256             }
257             if (unknownNodes == null) {
258                 if (other.unknownNodes != null) {
259                     return false;
260                 }
261             } else if (!unknownNodes.equals(other.unknownNodes)) {
262                 return false;
263             }
264             if (name == null) {
265                 if (other.name != null) {
266                     return false;
267                 }
268             } else if (!name.equals(other.name)) {
269                 return false;
270             }
271             if (value == null) {
272                 if (other.value != null) {
273                     return false;
274                 }
275             } else if (!value.equals(other.value)) {
276                 return false;
277             }
278             return true;
279         }
280
281         @Override
282         public String toString() {
283             return EnumTypeDefinition.EnumPair.class.getSimpleName() + "[name=" + name + ", value=" + value + "]";
284         }
285     }
286 }