Use Objects.hashCode()
[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 java.util.Objects;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration;
24 import org.opendaylight.yangtools.yang.common.QName;
25 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
26 import org.opendaylight.yangtools.yang.model.api.Status;
27 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
28 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
29 import org.opendaylight.yangtools.yang.model.util.EnumerationType;
30
31 public class EnumerationBuilderImplTest {
32
33     private EnumerationBuilderImpl enumerationBuilder;
34     private EnumerationBuilderImpl enumerationBuilderSame;
35     private EnumerationBuilderImpl enumerationBuilderOtherName;
36     private EnumerationBuilderImpl enumerationBuilderOtherPackage;
37     private final String DESCRIPTION = "Test description of Enum";
38     private final String packageName = "org.opendaylight.test";
39     private final String name = "TestName";
40     private final String moduleName = "TestModuleName";
41     private final String reference = "TestRef";
42     private final String valueName = "TestValue";
43     private final String valueDescription = "Value used for test";
44     private final int value = 12;
45     private Enumeration enumeration;
46     private final QName  qName = QName.create("TestQName", "10-10-2014", "TestLocalQName");
47
48
49     @Before
50     public void setup() {
51         enumerationBuilder = new EnumerationBuilderImpl(packageName, name);
52         enumerationBuilder.setDescription(DESCRIPTION);
53         enumerationBuilder.setModuleName(moduleName);
54         enumerationBuilder.setReference(reference);
55         enumerationBuilder.setSchemaPath(Collections.singletonList(qName));
56         enumerationBuilder.addValue(valueName, value, valueDescription);
57         enumerationBuilder.addAnnotation(packageName, "TestAnnotation");
58         enumerationBuilderSame = new EnumerationBuilderImpl(packageName, name);
59         enumerationBuilderOtherName = new EnumerationBuilderImpl(packageName, "SomeOtherName");
60         enumerationBuilderOtherPackage = new EnumerationBuilderImpl("org.opendaylight.other", name);
61         enumeration = enumerationBuilder.toInstance(enumerationBuilder);
62     }
63
64     @Test
65     public void testAddNullAnnotation() {
66         assertNull(enumerationBuilder.addAnnotation(null, null));
67         assertNull(enumerationBuilder.addAnnotation(null, "test"));
68         assertNull(enumerationBuilder.addAnnotation(packageName, null));
69     }
70
71     @Test
72     public void testEnumerationBuilder() {
73         assertEquals(packageName + "." + name, enumerationBuilder.getFullyQualifiedName());
74         assertEquals(name , enumerationBuilder.getName());
75         assertEquals(packageName, enumerationBuilder.getPackageName());
76
77         assertNotEquals(enumerationBuilder, null);
78         assertEquals(enumerationBuilder, enumerationBuilder);
79         assertNotEquals(enumerationBuilder, "string");
80         assertNotEquals(enumerationBuilder, enumerationBuilderOtherName);
81         assertNotEquals(enumerationBuilder, enumerationBuilderOtherPackage);
82         assertEquals(enumerationBuilder,enumerationBuilderSame);
83     }
84
85     @Test
86     public void testEnumeration() {
87         assertEquals(name, enumeration.getName());
88         assertEquals(packageName, enumeration.getPackageName());
89         assertEquals(null, enumeration.getComment());
90         assertEquals(enumerationBuilder, enumeration.getParentType());
91         assertEquals(DESCRIPTION, enumeration.getDescription());
92         assertEquals(moduleName, enumeration.getModuleName());
93         assertEquals(packageName + '.' + name, enumeration.getFullyQualifiedName());
94         assertEquals(reference, enumeration.getReference());
95         assertEquals(Collections.singletonList(qName), enumeration.getSchemaPath());
96         assertEquals(Collections.EMPTY_LIST, enumeration.getEnclosedTypes());
97         assertEquals(Collections.EMPTY_LIST, enumeration.getEnumerations());
98         assertEquals(Collections.EMPTY_LIST, enumeration.getMethodDefinitions());
99         assertEquals(Collections.EMPTY_LIST, enumeration.getConstantDefinitions());
100         assertEquals(Collections.EMPTY_LIST, enumeration.getProperties());
101         assertEquals(Collections.EMPTY_LIST, enumeration.getImplements());
102         assertNotNull(enumeration.getValues());
103         assertNotNull(enumeration.getAnnotations());
104
105         assertFalse(enumeration.isAbstract());
106         assertNotEquals(enumeration, null);
107         assertEquals(enumeration, enumeration);
108         assertNotEquals(enumeration, "string");
109
110         Enumeration enumerationOtherPackage = enumerationBuilderOtherPackage.toInstance(enumerationBuilderOtherPackage);
111         assertNotEquals(enumeration, enumerationOtherPackage);
112
113         Enumeration enumerationOtherName = enumerationBuilderOtherName.toInstance(enumerationBuilderOtherName);
114         assertNotEquals(enumeration, enumerationOtherName);
115
116         enumerationBuilderSame.addValue(valueName, value, valueDescription);
117         Enumeration enumerationSame = enumerationBuilderSame.toInstance(enumerationBuilderSame);
118         assertEquals(enumeration, enumerationSame);
119
120         EnumerationBuilderImpl enumerationBuilderSame1 = new EnumerationBuilderImpl(packageName, name);
121         Enumeration enumerationSame1 = enumerationBuilderSame1.toInstance(enumerationBuilderSame1);
122         enumerationBuilderSame1.addValue(valueName, 14, valueDescription);
123         // Enums are equal thanks to same package name and local name
124         assertEquals(enumeration, enumerationSame1);
125     }
126
127     @Test
128     public void testEnumerationToString() {
129         String formattedString =
130                 "public enum " + name + " {\n" +
131                 "\t TestValue " + "(12 );\n" +
132                 "}";
133         String s = "Enumeration [packageName="+packageName+", definingType="+packageName+"."+name+", name="+name+
134                 ", values=[EnumPair [name=TestValue, value=12]]]";
135
136         assertEquals(s, enumeration.toString());
137         assertEquals(formattedString, enumeration.toFormattedString());
138
139         assertEquals("EnumerationBuilderImpl " +
140                 "[packageName=org.opendaylight.test, name=TestName, " +
141                 "values=[EnumPair [name=TestValue, value=12]]]",
142                 enumerationBuilder.toString());
143     }
144
145     @Test
146     public void testUpdateEnumPairsFromEnumTypeDef() {
147         EnumTypeDefinition.EnumPair enumPair = EnumPairImpl.create(qName);
148         EnumTypeDefinition enumTypeDefinition = EnumerationType.create(SchemaPath.SAME,
149                 Arrays.asList(enumPair), Optional.of(enumPair));
150         enumerationBuilder.updateEnumPairsFromEnumTypeDef(enumTypeDefinition);
151     }
152
153     /**
154      * Internal implementation of EnumPair.
155      */
156     private static class EnumPairImpl implements EnumTypeDefinition.EnumPair {
157         private final QName qname;
158         private final SchemaPath path;
159         private final String description;
160         private final String reference;
161         private final Status status;
162         private final List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
163         private final String name;
164         private final Integer value;
165
166         private EnumPairImpl(QName qName) {
167             qname = qName;
168             path = SchemaPath.SAME;
169             description = "Some Other Description";
170             reference = "Some other reference";
171             status = Status.CURRENT;
172             name = "SomeName";
173             value = 45;
174         }
175
176         public static EnumPairImpl create(QName qName) {
177             return new EnumPairImpl(qName);
178         }
179
180         @Override
181         public QName getQName() {
182             return qname;
183         }
184
185         @Override
186         public SchemaPath getPath() {
187             return path;
188         }
189
190         @Override
191         public String getDescription() {
192             return description;
193         }
194
195         @Override
196         public String getReference() {
197             return reference;
198         }
199
200         @Override
201         public Status getStatus() {
202             return status;
203         }
204
205         @Override
206         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
207             return unknownNodes;
208         }
209
210         @Override
211         public String getName() {
212             return name;
213         }
214
215         @Override
216         public Integer getValue() {
217             return value;
218         }
219
220         @Override
221         public int hashCode() {
222             final int prime = 31;
223             int result = 1;
224             result = prime * result + Objects.hashCode(qname);
225             result = prime * result + Objects.hashCode(path);
226             result = prime * result + Objects.hashCode(unknownNodes);
227             result = prime * result + Objects.hashCode(name);
228             result = prime * result + Objects.hashCode(value);
229             return result;
230         }
231
232         @Override
233         public boolean equals(final Object obj) {
234             if (this == obj) {
235                 return true;
236             }
237             if (obj == null) {
238                 return false;
239             }
240             if (getClass() != obj.getClass()) {
241                 return false;
242             }
243             EnumPairImpl other = (EnumPairImpl) obj;
244             if (qname == null) {
245                 if (other.qname != null) {
246                     return false;
247                 }
248             } else if (!qname.equals(other.qname)) {
249                 return false;
250             }
251             if (path == null) {
252                 if (other.path != null) {
253                     return false;
254                 }
255             } else if (!path.equals(other.path)) {
256                 return false;
257             }
258             if (unknownNodes == null) {
259                 if (other.unknownNodes != null) {
260                     return false;
261                 }
262             } else if (!unknownNodes.equals(other.unknownNodes)) {
263                 return false;
264             }
265             if (name == null) {
266                 if (other.name != null) {
267                     return false;
268                 }
269             } else if (!name.equals(other.name)) {
270                 return false;
271             }
272             if (value == null) {
273                 if (other.value != null) {
274                     return false;
275                 }
276             } else if (!value.equals(other.value)) {
277                 return false;
278             }
279             return true;
280         }
281
282         @Override
283         public String toString() {
284             return EnumTypeDefinition.EnumPair.class.getSimpleName() + "[name=" + name + ", value=" + value + "]";
285         }
286     }
287 }