Committed by
Ray Milkey
[ONOS-4563][ONOS-4564][ONOS-4551][ONOS-4538]defect fix
Change-Id: Ia3fe844e1e846d2e1d2c4359eefc815e7767aef9
Showing
24 changed files
with
361 additions
and
31 deletions
... | @@ -50,7 +50,7 @@ import org.onosproject.yangutils.utils.YangConstructType; | ... | @@ -50,7 +50,7 @@ import org.onosproject.yangutils.utils.YangConstructType; |
50 | /** | 50 | /** |
51 | * Represents the ENUM data type information. | 51 | * Represents the ENUM data type information. |
52 | */ | 52 | */ |
53 | -public class YangEnum implements YangCommonInfo, Parsable { | 53 | +public class YangEnum implements YangCommonInfo, Parsable, Comparable<YangEnum> { |
54 | 54 | ||
55 | /** | 55 | /** |
56 | * Named value for the ENUM. | 56 | * Named value for the ENUM. |
... | @@ -226,4 +226,12 @@ public class YangEnum implements YangCommonInfo, Parsable { | ... | @@ -226,4 +226,12 @@ public class YangEnum implements YangCommonInfo, Parsable { |
226 | public void validateDataOnExit() throws DataModelException { | 226 | public void validateDataOnExit() throws DataModelException { |
227 | // TODO auto-generated method stub, to be implemented by parser | 227 | // TODO auto-generated method stub, to be implemented by parser |
228 | } | 228 | } |
229 | + | ||
230 | + @Override | ||
231 | + public int compareTo(YangEnum otherEnum) { | ||
232 | + if (this.namedValue.equals(otherEnum.getNamedValue())) { | ||
233 | + return 0; | ||
234 | + } | ||
235 | + return new Integer(this.value).compareTo(otherEnum.getValue()); | ||
236 | + } | ||
229 | } | 237 | } | ... | ... |
... | @@ -16,8 +16,8 @@ | ... | @@ -16,8 +16,8 @@ |
16 | 16 | ||
17 | package org.onosproject.yangutils.datamodel; | 17 | package org.onosproject.yangutils.datamodel; |
18 | 18 | ||
19 | -import java.util.HashSet; | 19 | +import java.util.SortedSet; |
20 | -import java.util.Set; | 20 | +import java.util.TreeSet; |
21 | 21 | ||
22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 22 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
23 | import org.onosproject.yangutils.parser.Parsable; | 23 | import org.onosproject.yangutils.parser.Parsable; |
... | @@ -34,7 +34,7 @@ import org.onosproject.yangutils.utils.YangConstructType; | ... | @@ -34,7 +34,7 @@ import org.onosproject.yangutils.utils.YangConstructType; |
34 | public class YangEnumeration extends YangNode implements Parsable, CollisionDetector { | 34 | public class YangEnumeration extends YangNode implements Parsable, CollisionDetector { |
35 | 35 | ||
36 | // Enumeration info set. | 36 | // Enumeration info set. |
37 | - private Set<YangEnum> enumSet; | 37 | + private SortedSet<YangEnum> enumSet; |
38 | 38 | ||
39 | // Enumeration name. | 39 | // Enumeration name. |
40 | private String name; | 40 | private String name; |
... | @@ -44,7 +44,7 @@ public class YangEnumeration extends YangNode implements Parsable, CollisionDete | ... | @@ -44,7 +44,7 @@ public class YangEnumeration extends YangNode implements Parsable, CollisionDete |
44 | */ | 44 | */ |
45 | public YangEnumeration() { | 45 | public YangEnumeration() { |
46 | super(YangNodeType.ENUMERATION_NODE); | 46 | super(YangNodeType.ENUMERATION_NODE); |
47 | - setEnumSet(new HashSet<YangEnum>()); | 47 | + setEnumSet(new TreeSet<YangEnum>()); |
48 | } | 48 | } |
49 | 49 | ||
50 | /** | 50 | /** |
... | @@ -52,7 +52,7 @@ public class YangEnumeration extends YangNode implements Parsable, CollisionDete | ... | @@ -52,7 +52,7 @@ public class YangEnumeration extends YangNode implements Parsable, CollisionDete |
52 | * | 52 | * |
53 | * @return the ENUM set | 53 | * @return the ENUM set |
54 | */ | 54 | */ |
55 | - public Set<YangEnum> getEnumSet() { | 55 | + public SortedSet<YangEnum> getEnumSet() { |
56 | return enumSet; | 56 | return enumSet; |
57 | } | 57 | } |
58 | 58 | ||
... | @@ -61,7 +61,7 @@ public class YangEnumeration extends YangNode implements Parsable, CollisionDete | ... | @@ -61,7 +61,7 @@ public class YangEnumeration extends YangNode implements Parsable, CollisionDete |
61 | * | 61 | * |
62 | * @param enumSet the ENUM set to set | 62 | * @param enumSet the ENUM set to set |
63 | */ | 63 | */ |
64 | - private void setEnumSet(Set<YangEnum> enumSet) { | 64 | + private void setEnumSet(SortedSet<YangEnum> enumSet) { |
65 | this.enumSet = enumSet; | 65 | this.enumSet = enumSet; |
66 | } | 66 | } |
67 | 67 | ... | ... |
... | @@ -21,6 +21,8 @@ import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | ... | @@ -21,6 +21,8 @@ import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
21 | import org.onosproject.yangutils.parser.Parsable; | 21 | import org.onosproject.yangutils.parser.Parsable; |
22 | import org.onosproject.yangutils.utils.YangConstructType; | 22 | import org.onosproject.yangutils.utils.YangConstructType; |
23 | 23 | ||
24 | +import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil; | ||
25 | + | ||
24 | /*- | 26 | /*- |
25 | * Reference RFC 6020. | 27 | * Reference RFC 6020. |
26 | * | 28 | * |
... | @@ -54,7 +56,7 @@ import org.onosproject.yangutils.utils.YangConstructType; | ... | @@ -54,7 +56,7 @@ import org.onosproject.yangutils.utils.YangConstructType; |
54 | /** | 56 | /** |
55 | * Represents data model node to maintain information defined in YANG typedef. | 57 | * Represents data model node to maintain information defined in YANG typedef. |
56 | */ | 58 | */ |
57 | -public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable, YangTypeHolder { | 59 | +public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable, YangTypeHolder, CollisionDetector { |
58 | 60 | ||
59 | /** | 61 | /** |
60 | * Default value in string, needs to be converted to the target object, | 62 | * Default value in string, needs to be converted to the target object, |
... | @@ -272,4 +274,18 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable, Y | ... | @@ -272,4 +274,18 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable, Y |
272 | public List<YangType<?>> getTypeList() { | 274 | public List<YangType<?>> getTypeList() { |
273 | return typeList; | 275 | return typeList; |
274 | } | 276 | } |
277 | + | ||
278 | + @Override | ||
279 | + public void detectCollidingChild(String identifierName, YangConstructType dataType) throws DataModelException { | ||
280 | + // Asks helper to detect colliding child. | ||
281 | + detectCollidingChildUtil(identifierName, dataType, this); | ||
282 | + } | ||
283 | + | ||
284 | + @Override | ||
285 | + public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException { | ||
286 | + if (getName().equals(identifierName)) { | ||
287 | + throw new DataModelException("YANG file error: Duplicate input identifier detected, same as typedef \"" | ||
288 | + + getName() + "\""); | ||
289 | + } | ||
290 | + } | ||
275 | } | 291 | } | ... | ... |
... | @@ -34,6 +34,8 @@ import static org.onosproject.yangutils.linker.impl.ResolvableStatus.INTRA_FILE_ | ... | @@ -34,6 +34,8 @@ import static org.onosproject.yangutils.linker.impl.ResolvableStatus.INTRA_FILE_ |
34 | import static org.onosproject.yangutils.linker.impl.ResolvableStatus.LINKED; | 34 | import static org.onosproject.yangutils.linker.impl.ResolvableStatus.LINKED; |
35 | import static org.onosproject.yangutils.linker.impl.ResolvableStatus.RESOLVED; | 35 | import static org.onosproject.yangutils.linker.impl.ResolvableStatus.RESOLVED; |
36 | import static org.onosproject.yangutils.linker.impl.ResolvableStatus.UNRESOLVED; | 36 | import static org.onosproject.yangutils.linker.impl.ResolvableStatus.UNRESOLVED; |
37 | +import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_LINKER_ERROR; | ||
38 | +import static org.onosproject.yangutils.utils.UtilConstants.GROUPING_LINKER_ERROR; | ||
37 | 39 | ||
38 | /** | 40 | /** |
39 | * Represents resolution object which will be resolved by linker. | 41 | * Represents resolution object which will be resolved by linker. |
... | @@ -180,9 +182,14 @@ public class YangResolutionInfo<T> implements LocationInfo { | ... | @@ -180,9 +182,14 @@ public class YangResolutionInfo<T> implements LocationInfo { |
180 | 182 | ||
181 | if (resolvable.getResolvableStatus() == UNRESOLVED) { | 183 | if (resolvable.getResolvableStatus() == UNRESOLVED) { |
182 | // If current entity is still not resolved, then linking/resolution has failed. | 184 | // If current entity is still not resolved, then linking/resolution has failed. |
185 | + String errorInfo; | ||
186 | + if (resolvable instanceof YangType) { | ||
187 | + errorInfo = TYPEDEF_LINKER_ERROR; | ||
188 | + } else { | ||
189 | + errorInfo = GROUPING_LINKER_ERROR; | ||
190 | + } | ||
183 | DataModelException dataModelException = | 191 | DataModelException dataModelException = |
184 | - new DataModelException("YANG file error: Unable to find base " | 192 | + new DataModelException(errorInfo); |
185 | - + "typedef/grouping for given type/uses"); | ||
186 | dataModelException.setLine(getLineNumber()); | 193 | dataModelException.setLine(getLineNumber()); |
187 | dataModelException.setCharPosition(getCharPosition()); | 194 | dataModelException.setCharPosition(getCharPosition()); |
188 | throw dataModelException; | 195 | throw dataModelException; | ... | ... |
... | @@ -45,6 +45,8 @@ import org.onosproject.yangutils.datamodel.YangBits; | ... | @@ -45,6 +45,8 @@ import org.onosproject.yangutils.datamodel.YangBits; |
45 | import org.onosproject.yangutils.datamodel.YangLeaf; | 45 | import org.onosproject.yangutils.datamodel.YangLeaf; |
46 | import org.onosproject.yangutils.datamodel.YangLeafList; | 46 | import org.onosproject.yangutils.datamodel.YangLeafList; |
47 | import org.onosproject.yangutils.datamodel.YangType; | 47 | import org.onosproject.yangutils.datamodel.YangType; |
48 | +import org.onosproject.yangutils.datamodel.YangTypeDef; | ||
49 | +import org.onosproject.yangutils.datamodel.YangUnion; | ||
48 | import org.onosproject.yangutils.parser.Parsable; | 50 | import org.onosproject.yangutils.parser.Parsable; |
49 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; | 51 | import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser; |
50 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 52 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
... | @@ -101,6 +103,12 @@ public final class BitsListener { | ... | @@ -101,6 +103,12 @@ public final class BitsListener { |
101 | case LEAF_LIST_DATA: | 103 | case LEAF_LIST_DATA: |
102 | bitsNode.setBitsName(((YangLeafList) tmpData).getName()); | 104 | bitsNode.setBitsName(((YangLeafList) tmpData).getName()); |
103 | break; | 105 | break; |
106 | + case TYPEDEF_DATA: | ||
107 | + bitsNode.setBitsName(((YangTypeDef) tmpData).getName()); | ||
108 | + break; | ||
109 | + case UNION_DATA: | ||
110 | + bitsNode.setBitsName(((YangUnion) tmpData).getName()); | ||
111 | + break; | ||
104 | // TODO typedef, union, deviate. | 112 | // TODO typedef, union, deviate. |
105 | default: | 113 | default: |
106 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA, | 114 | throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA, | ... | ... |
... | @@ -106,7 +106,16 @@ public final class MaxElementsListener { | ... | @@ -106,7 +106,16 @@ public final class MaxElementsListener { |
106 | if (value.equals(UNBOUNDED_KEYWORD)) { | 106 | if (value.equals(UNBOUNDED_KEYWORD)) { |
107 | maxElementsValue = Integer.MAX_VALUE; | 107 | maxElementsValue = Integer.MAX_VALUE; |
108 | } else if (value.matches(POSITIVE_INTEGER_PATTERN)) { | 108 | } else if (value.matches(POSITIVE_INTEGER_PATTERN)) { |
109 | - maxElementsValue = Integer.parseInt(value); | 109 | + try { |
110 | + maxElementsValue = Integer.parseInt(value); | ||
111 | + } catch (NumberFormatException e) { | ||
112 | + ParserException parserException = new ParserException("YANG file error : " + | ||
113 | + YangConstructType.getYangConstructType(MAX_ELEMENT_DATA) + " value " + value + " is not " + | ||
114 | + "valid."); | ||
115 | + parserException.setLine(ctx.getStart().getLine()); | ||
116 | + parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); | ||
117 | + throw parserException; | ||
118 | + } | ||
110 | } else { | 119 | } else { |
111 | ParserException parserException = new ParserException("YANG file error : " + | 120 | ParserException parserException = new ParserException("YANG file error : " + |
112 | YangConstructType.getYangConstructType(MAX_ELEMENT_DATA) + " value " + value + " is not " + | 121 | YangConstructType.getYangConstructType(MAX_ELEMENT_DATA) + " value " + value + " is not " + | ... | ... |
... | @@ -35,6 +35,7 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; | ... | @@ -35,6 +35,7 @@ import org.onosproject.yangutils.parser.impl.TreeWalkListener; |
35 | 35 | ||
36 | import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION; | 36 | import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION; |
37 | import static org.onosproject.yangutils.datamodel.utils.YangDataModelFactory.getYangTypeDefNode; | 37 | import static org.onosproject.yangutils.datamodel.utils.YangDataModelFactory.getYangTypeDefNode; |
38 | +import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil; | ||
38 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; | 39 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY; |
39 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; | 40 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT; |
40 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage; | 41 | import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage; |
... | @@ -117,6 +118,11 @@ public final class TypeDefListener { | ... | @@ -117,6 +118,11 @@ public final class TypeDefListener { |
117 | // Validate sub statement cardinality. | 118 | // Validate sub statement cardinality. |
118 | validateSubStatementsCardinality(ctx); | 119 | validateSubStatementsCardinality(ctx); |
119 | 120 | ||
121 | + // Check for identifier collision | ||
122 | + int line = ctx.getStart().getLine(); | ||
123 | + int charPositionInLine = ctx.getStart().getCharPositionInLine(); | ||
124 | + detectCollidingChildUtil(listener, line, charPositionInLine, identifier, TYPEDEF_DATA); | ||
125 | + | ||
120 | /* | 126 | /* |
121 | * Create a derived type information, the base type must be set in type | 127 | * Create a derived type information, the base type must be set in type |
122 | * listener. | 128 | * listener. | ... | ... |
... | @@ -54,6 +54,7 @@ public final class ListenerUtil { | ... | @@ -54,6 +54,7 @@ public final class ListenerUtil { |
54 | private static final String DATE_PATTERN = "[0-9]{4}-([0-9]{2}|[0-9])-([0-9]{2}|[0-9])"; | 54 | private static final String DATE_PATTERN = "[0-9]{4}-([0-9]{2}|[0-9])-([0-9]{2}|[0-9])"; |
55 | private static final String NON_NEGATIVE_INTEGER_PATTERN = "[0-9]+"; | 55 | private static final String NON_NEGATIVE_INTEGER_PATTERN = "[0-9]+"; |
56 | private static final Pattern INTEGER_PATTERN = Pattern.compile("[-][0-9]+|[0-9]+"); | 56 | private static final Pattern INTEGER_PATTERN = Pattern.compile("[-][0-9]+|[0-9]+"); |
57 | + private static final String XML = "xml"; | ||
57 | private static final String ONE = "1"; | 58 | private static final String ONE = "1"; |
58 | private static final int IDENTIFIER_LENGTH = 64; | 59 | private static final int IDENTIFIER_LENGTH = 64; |
59 | private static final String DATE_FORMAT = "yyyy-MM-dd"; | 60 | private static final String DATE_FORMAT = "yyyy-MM-dd"; |
... | @@ -102,6 +103,10 @@ public final class ListenerUtil { | ... | @@ -102,6 +103,10 @@ public final class ListenerUtil { |
102 | parserException = new ParserException("YANG file error : " + | 103 | parserException = new ParserException("YANG file error : " + |
103 | YangConstructType.getYangConstructType(yangConstruct) + " name " + identifierString + " is not " + | 104 | YangConstructType.getYangConstructType(yangConstruct) + " name " + identifierString + " is not " + |
104 | "valid."); | 105 | "valid."); |
106 | + } else if (identifierString.toLowerCase().startsWith(XML)) { | ||
107 | + parserException = new ParserException("YANG file error : " + | ||
108 | + YangConstructType.getYangConstructType(yangConstruct) + " identifier " + identifierString + | ||
109 | + " must not start with (('X'|'x') ('M'|'m') ('L'|'l'))."); | ||
105 | } else { | 110 | } else { |
106 | return identifierString; | 111 | return identifierString; |
107 | } | 112 | } |
... | @@ -175,7 +180,18 @@ public final class ListenerUtil { | ... | @@ -175,7 +180,18 @@ public final class ListenerUtil { |
175 | throw parserException; | 180 | throw parserException; |
176 | } | 181 | } |
177 | 182 | ||
178 | - return Integer.parseInt(value); | 183 | + int valueInInteger; |
184 | + try { | ||
185 | + valueInInteger = Integer.parseInt(value); | ||
186 | + } catch (NumberFormatException e) { | ||
187 | + ParserException parserException = new ParserException("YANG file error : " + | ||
188 | + YangConstructType.getYangConstructType(yangConstruct) + " value " + value + " is not " + | ||
189 | + "valid."); | ||
190 | + parserException.setLine(ctx.getStart().getLine()); | ||
191 | + parserException.setCharPosition(ctx.getStart().getCharPositionInLine()); | ||
192 | + throw parserException; | ||
193 | + } | ||
194 | + return valueInInteger; | ||
179 | } | 195 | } |
180 | 196 | ||
181 | /** | 197 | /** | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
... | @@ -251,8 +251,8 @@ public final class JavaCodeGeneratorUtil { | ... | @@ -251,8 +251,8 @@ public final class JavaCodeGeneratorUtil { |
251 | */ | 251 | */ |
252 | private static void close(YangNode node) | 252 | private static void close(YangNode node) |
253 | throws IOException { | 253 | throws IOException { |
254 | - | 254 | + if (node instanceof JavaCodeGenerator && ((TempJavaCodeFragmentFilesContainer) node) |
255 | - if (((TempJavaCodeFragmentFilesContainer) node).getTempJavaCodeFragmentFiles() != null) { | 255 | + .getTempJavaCodeFragmentFiles() != null) { |
256 | ((TempJavaCodeFragmentFilesContainer) node).getTempJavaCodeFragmentFiles().freeTemporaryResources(true); | 256 | ((TempJavaCodeFragmentFilesContainer) node).getTempJavaCodeFragmentFiles().freeTemporaryResources(true); |
257 | } | 257 | } |
258 | } | 258 | } | ... | ... |
utils/yangutils/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
... | @@ -1337,19 +1337,6 @@ public class TempJavaFragmentFiles { | ... | @@ -1337,19 +1337,6 @@ public class TempJavaFragmentFiles { |
1337 | */ | 1337 | */ |
1338 | if ((fileType & INTERFACE_MASK) != 0 || (fileType & | 1338 | if ((fileType & INTERFACE_MASK) != 0 || (fileType & |
1339 | BUILDER_INTERFACE_MASK) != 0) { | 1339 | BUILDER_INTERFACE_MASK) != 0) { |
1340 | - /* | ||
1341 | - * Adds import for case. | ||
1342 | - */ | ||
1343 | - if (curNode instanceof YangCase) { | ||
1344 | - List<String> importData = | ||
1345 | - ((TempJavaCodeFragmentFilesContainer) curNode).getTempJavaCodeFragmentFiles() | ||
1346 | - .getBeanTempFiles().getJavaImportData().getImports(); | ||
1347 | - for (String importInfo : importData) { | ||
1348 | - if (!imports.contains(importInfo)) { | ||
1349 | - imports.add(importInfo); | ||
1350 | - } | ||
1351 | - } | ||
1352 | - } | ||
1353 | 1340 | ||
1354 | /* | 1341 | /* |
1355 | * Create interface file. | 1342 | * Create interface file. | ... | ... |
... | @@ -42,6 +42,7 @@ import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType. | ... | @@ -42,6 +42,7 @@ import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType. |
42 | import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER; | 42 | import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER; |
43 | import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.addCurNodeInfoInParentTempFile; | 43 | import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.addCurNodeInfoInParentTempFile; |
44 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase; | 44 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase; |
45 | +import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCapitalCase; | ||
45 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCurNodePackage; | 46 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCurNodePackage; |
46 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage; | 47 | import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage; |
47 | import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTATION_HOLDER; | 48 | import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTATION_HOLDER; |
... | @@ -279,7 +280,7 @@ public final class YangJavaModelUtils { | ... | @@ -279,7 +280,7 @@ public final class YangJavaModelUtils { |
279 | if (javaCodeGeneratorInfo instanceof YangCase) { | 280 | if (javaCodeGeneratorInfo instanceof YangCase) { |
280 | YangNode parent = ((YangCase) javaCodeGeneratorInfo).getParent(); | 281 | YangNode parent = ((YangCase) javaCodeGeneratorInfo).getParent(); |
281 | JavaQualifiedTypeInfo parentsInfo = new JavaQualifiedTypeInfo(); | 282 | JavaQualifiedTypeInfo parentsInfo = new JavaQualifiedTypeInfo(); |
282 | - String parentName = ((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName(); | 283 | + String parentName = getCapitalCase(((JavaFileInfoContainer) parent).getJavaFileInfo().getJavaName()); |
283 | String parentPkg = ((JavaFileInfoContainer) parent).getJavaFileInfo().getPackage(); | 284 | String parentPkg = ((JavaFileInfoContainer) parent).getJavaFileInfo().getPackage(); |
284 | parentsInfo.setClassInfo(parentName); | 285 | parentsInfo.setClassInfo(parentName); |
285 | parentsInfo.setPkgInfo(parentPkg); | 286 | parentsInfo.setPkgInfo(parentPkg); | ... | ... |
... | @@ -1122,6 +1122,18 @@ public final class UtilConstants { | ... | @@ -1122,6 +1122,18 @@ public final class UtilConstants { |
1122 | " for YANG utils road map."; | 1122 | " for YANG utils road map."; |
1123 | 1123 | ||
1124 | /** | 1124 | /** |
1125 | + * Static attribute for typedef linker error information. | ||
1126 | + */ | ||
1127 | + public static final String TYPEDEF_LINKER_ERROR = "YANG file error: Unable to find base " | ||
1128 | + + "typedef for given type"; | ||
1129 | + | ||
1130 | + /** | ||
1131 | + * Static attribute for grouping linker error information. | ||
1132 | + */ | ||
1133 | + public static final String GROUPING_LINKER_ERROR = "YANG file error: Unable to find base " | ||
1134 | + + "grouping for given uses"; | ||
1135 | + | ||
1136 | + /** | ||
1125 | * Creates an instance of util constants. | 1137 | * Creates an instance of util constants. |
1126 | */ | 1138 | */ |
1127 | private UtilConstants() { | 1139 | private UtilConstants() { | ... | ... |
... | @@ -564,7 +564,7 @@ public class IntraFileUsesLinkingTest { | ... | @@ -564,7 +564,7 @@ public class IntraFileUsesLinkingTest { |
564 | 564 | ||
565 | thrown.expect(ParserException.class); | 565 | thrown.expect(ParserException.class); |
566 | thrown.expectMessage( | 566 | thrown.expectMessage( |
567 | - "YANG file error: Unable to find base typedef/grouping for given type/uses"); | 567 | + "YANG file error: Unable to find base grouping for given uses"); |
568 | 568 | ||
569 | YangNode node = manager | 569 | YangNode node = manager |
570 | .getDataModel("src/test/resources/SelfResolutionNestedGroupingWithUnresolvedUses.yang"); | 570 | .getDataModel("src/test/resources/SelfResolutionNestedGroupingWithUnresolvedUses.yang"); | ... | ... |
... | @@ -26,10 +26,14 @@ import org.onosproject.yangutils.datamodel.YangLeaf; | ... | @@ -26,10 +26,14 @@ import org.onosproject.yangutils.datamodel.YangLeaf; |
26 | import org.onosproject.yangutils.datamodel.YangModule; | 26 | import org.onosproject.yangutils.datamodel.YangModule; |
27 | import org.onosproject.yangutils.datamodel.YangNode; | 27 | import org.onosproject.yangutils.datamodel.YangNode; |
28 | import org.onosproject.yangutils.datamodel.YangNodeType; | 28 | import org.onosproject.yangutils.datamodel.YangNodeType; |
29 | +import org.onosproject.yangutils.datamodel.YangType; | ||
30 | +import org.onosproject.yangutils.datamodel.YangTypeDef; | ||
31 | +import org.onosproject.yangutils.datamodel.YangUnion; | ||
29 | import org.onosproject.yangutils.parser.exceptions.ParserException; | 32 | import org.onosproject.yangutils.parser.exceptions.ParserException; |
30 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | 33 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; |
31 | 34 | ||
32 | import java.io.IOException; | 35 | import java.io.IOException; |
36 | +import java.util.List; | ||
33 | import java.util.ListIterator; | 37 | import java.util.ListIterator; |
34 | import java.util.Set; | 38 | import java.util.Set; |
35 | 39 | ||
... | @@ -80,6 +84,84 @@ public class BitListenerTest { | ... | @@ -80,6 +84,84 @@ public class BitListenerTest { |
80 | } | 84 | } |
81 | 85 | ||
82 | /** | 86 | /** |
87 | + * Checks bit statement with typedef. | ||
88 | + */ | ||
89 | + @Test | ||
90 | + public void processBitTypedefStatement() throws IOException, ParserException { | ||
91 | + | ||
92 | + YangNode node = manager.getDataModel("src/test/resources/BitTypedefStatement.yang"); | ||
93 | + | ||
94 | + // Check whether the data model tree returned is of type module. | ||
95 | + assertThat((node instanceof YangModule), is(true)); | ||
96 | + | ||
97 | + // Check whether the node type is set properly to module. | ||
98 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
99 | + | ||
100 | + // Check whether the module name is set correctly. | ||
101 | + YangModule yangNode = (YangModule) node; | ||
102 | + assertThat(yangNode.getName(), is("Test")); | ||
103 | + | ||
104 | + YangTypeDef typedef = (YangTypeDef) yangNode.getChild(); | ||
105 | + assertThat(typedef.getName(), is("type15")); | ||
106 | + | ||
107 | + YangType type = typedef.getTypeList().iterator().next(); | ||
108 | + assertThat(type.getDataType(), is(YangDataTypes.BITS)); | ||
109 | + assertThat(type.getDataTypeName(), is("bits")); | ||
110 | + Set<YangBit> bitSet = ((YangBits) type.getDataTypeExtendedInfo()).getBitSet(); | ||
111 | + for (YangBit tmp : bitSet) { | ||
112 | + if (tmp.getBitName().equals("disable-nagle")) { | ||
113 | + assertThat(tmp.getPosition(), is(0)); | ||
114 | + } else if (tmp.getBitName().equals("auto-sense-speed")) { | ||
115 | + assertThat(tmp.getPosition(), is(1)); | ||
116 | + } | ||
117 | + } | ||
118 | + } | ||
119 | + | ||
120 | + /** | ||
121 | + * Checks bit statement with union. | ||
122 | + */ | ||
123 | + @Test | ||
124 | + public void processBitUnionStatement() throws IOException, ParserException { | ||
125 | + | ||
126 | + YangNode node = manager.getDataModel("src/test/resources/BitUnionStatement.yang"); | ||
127 | + | ||
128 | + // Check whether the data model tree returned is of type module. | ||
129 | + assertThat((node instanceof YangModule), is(true)); | ||
130 | + | ||
131 | + // Check whether the node type is set properly to module. | ||
132 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
133 | + | ||
134 | + // Check whether the module name is set correctly. | ||
135 | + YangModule yangNode = (YangModule) node; | ||
136 | + assertThat(yangNode.getName(), is("Test")); | ||
137 | + | ||
138 | + ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator(); | ||
139 | + YangLeaf leafInfo = leafIterator.next(); | ||
140 | + | ||
141 | + assertThat(leafInfo.getName(), is("type15")); | ||
142 | + | ||
143 | + assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UNION)); | ||
144 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("union")); | ||
145 | + | ||
146 | + YangUnion yangUnion = (YangUnion) leafInfo.getDataType().getDataTypeExtendedInfo(); | ||
147 | + | ||
148 | + List<YangType<?>> typeList = yangUnion.getTypeList(); | ||
149 | + ListIterator<YangType<?>> typeListIterator = typeList.listIterator(); | ||
150 | + YangType<?> yangType = typeListIterator.next(); | ||
151 | + | ||
152 | + assertThat(yangType.getDataType(), is(YangDataTypes.BITS)); | ||
153 | + assertThat(yangType.getDataTypeName(), is("bits")); | ||
154 | + Set<YangBit> bitSet = ((YangBits) yangType.getDataTypeExtendedInfo()).getBitSet(); | ||
155 | + for (YangBit tmp : bitSet) { | ||
156 | + if (tmp.getBitName().equals("disable-nagle")) { | ||
157 | + assertThat(tmp.getPosition(), is(0)); | ||
158 | + } else if (tmp.getBitName().equals("auto-sense-speed")) { | ||
159 | + assertThat(tmp.getPosition(), is(1)); | ||
160 | + } | ||
161 | + } | ||
162 | + } | ||
163 | + | ||
164 | + /** | ||
83 | * Checks if enum with same name is not allowed. | 165 | * Checks if enum with same name is not allowed. |
84 | */ | 166 | */ |
85 | @Test(expected = ParserException.class) | 167 | @Test(expected = ParserException.class) | ... | ... |
... | @@ -33,8 +33,9 @@ import org.onosproject.yangutils.parser.exceptions.ParserException; | ... | @@ -33,8 +33,9 @@ import org.onosproject.yangutils.parser.exceptions.ParserException; |
33 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | 33 | import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; |
34 | 34 | ||
35 | import java.io.IOException; | 35 | import java.io.IOException; |
36 | +import java.util.Iterator; | ||
36 | import java.util.ListIterator; | 37 | import java.util.ListIterator; |
37 | -import java.util.Set; | 38 | +import java.util.SortedSet; |
38 | 39 | ||
39 | /** | 40 | /** |
40 | * Test cases for enum listener. | 41 | * Test cases for enum listener. |
... | @@ -73,7 +74,7 @@ public class EnumListenerTest { | ... | @@ -73,7 +74,7 @@ public class EnumListenerTest { |
73 | assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(), | 74 | assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(), |
74 | is("speed_enum")); | 75 | is("speed_enum")); |
75 | 76 | ||
76 | - Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet(); | 77 | + SortedSet<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet(); |
77 | for (YangEnum tmp : enumSet) { | 78 | for (YangEnum tmp : enumSet) { |
78 | if (tmp.getNamedValue().equals("10m")) { | 79 | if (tmp.getNamedValue().equals("10m")) { |
79 | assertThat(tmp.getValue(), is(0)); | 80 | assertThat(tmp.getValue(), is(0)); |
... | @@ -114,4 +115,34 @@ public class EnumListenerTest { | ... | @@ -114,4 +115,34 @@ public class EnumListenerTest { |
114 | + "with the current highest value"); | 115 | + "with the current highest value"); |
115 | YangNode node = manager.getDataModel("src/test/resources/EnumMaxNextValue.yang"); | 116 | YangNode node = manager.getDataModel("src/test/resources/EnumMaxNextValue.yang"); |
116 | } | 117 | } |
118 | + | ||
119 | + /** | ||
120 | + * Checks enum values stored are sorted. | ||
121 | + */ | ||
122 | + @Test | ||
123 | + public void processEnumSorted() throws IOException, ParserException { | ||
124 | + YangNode node = manager.getDataModel("src/test/resources/EnumSorted.yang"); | ||
125 | + // Check whether the data model tree returned is of type module. | ||
126 | + assertThat((node instanceof YangModule), is(true)); | ||
127 | + | ||
128 | + // Check whether the node type is set properly to module. | ||
129 | + assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE)); | ||
130 | + | ||
131 | + // Check whether the module name is set correctly. | ||
132 | + YangModule yangNode = (YangModule) node; | ||
133 | + assertThat(yangNode.getName(), is("Test")); | ||
134 | + | ||
135 | + ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator(); | ||
136 | + YangLeaf leafInfo = leafIterator.next(); | ||
137 | + | ||
138 | + assertThat(leafInfo.getName(), is("ifType")); | ||
139 | + assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration")); | ||
140 | + assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION)); | ||
141 | + assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(), | ||
142 | + is("ifType_enum")); | ||
143 | + | ||
144 | + SortedSet<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet(); | ||
145 | + Iterator<YangEnum> enumIterator = enumSet.iterator(); | ||
146 | + assertThat(enumIterator.next().getNamedValue(), is("five")); | ||
147 | + } | ||
117 | } | 148 | } | ... | ... |
... | @@ -176,4 +176,15 @@ public class MaxElementsListenerTest { | ... | @@ -176,4 +176,15 @@ public class MaxElementsListenerTest { |
176 | assertThat(leafListInfo.getName(), is("invalid-interval")); | 176 | assertThat(leafListInfo.getName(), is("invalid-interval")); |
177 | assertThat(leafListInfo.getMaxElelements(), is(2147483647)); | 177 | assertThat(leafListInfo.getMaxElelements(), is(2147483647)); |
178 | } | 178 | } |
179 | + | ||
180 | + /** | ||
181 | + * Checks whether exception is thrown when invalid min-elements value is | ||
182 | + * given as input. | ||
183 | + */ | ||
184 | + @Test | ||
185 | + public void processMaxElementsMaxValue() throws IOException, ParserException { | ||
186 | + thrown.expect(ParserException.class); | ||
187 | + thrown.expectMessage("YANG file error : max-elements value 77777777777777777777777 is not valid."); | ||
188 | + YangNode node = manager.getDataModel("src/test/resources/MaxElementsMaxValue.yang"); | ||
189 | + } | ||
179 | } | 190 | } | ... | ... |
... | @@ -116,6 +116,17 @@ public class MinElementsListenerTest { | ... | @@ -116,6 +116,17 @@ public class MinElementsListenerTest { |
116 | } | 116 | } |
117 | 117 | ||
118 | /** | 118 | /** |
119 | + * Checks whether exception is thrown when invalid min-elements value is | ||
120 | + * given as input. | ||
121 | + */ | ||
122 | + @Test | ||
123 | + public void processMinElementsMaxValue() throws IOException, ParserException { | ||
124 | + thrown.expect(ParserException.class); | ||
125 | + thrown.expectMessage("YANG file error : min-elements value 77777777777777777777777 is not valid."); | ||
126 | + YangNode node = manager.getDataModel("src/test/resources/MinElementsMaxValue.yang"); | ||
127 | + } | ||
128 | + | ||
129 | + /** | ||
119 | * Checks whether exception is thrown when min-elements statement without | 130 | * Checks whether exception is thrown when min-elements statement without |
120 | * statement end is given as input. | 131 | * statement end is given as input. |
121 | */ | 132 | */ | ... | ... |
utils/yangutils/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerUtilTest.java
0 → 100644
1 | +/* | ||
2 | + * Copyright 2016-present Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | + | ||
17 | +package org.onosproject.yangutils.parser.impl.parseutils; | ||
18 | + | ||
19 | +import java.io.IOException; | ||
20 | +import org.junit.Rule; | ||
21 | +import org.junit.Test; | ||
22 | +import org.junit.rules.ExpectedException; | ||
23 | +import org.onosproject.yangutils.parser.exceptions.ParserException; | ||
24 | +import org.onosproject.yangutils.parser.impl.YangUtilsParserManager; | ||
25 | + | ||
26 | +/** | ||
27 | + * Test case for testing listener util. | ||
28 | + */ | ||
29 | +public class ListenerUtilTest { | ||
30 | + | ||
31 | + @Rule | ||
32 | + public ExpectedException thrown = ExpectedException.none(); | ||
33 | + | ||
34 | + private final YangUtilsParserManager manager = new YangUtilsParserManager(); | ||
35 | + | ||
36 | + /** | ||
37 | + * Checks whether exception is thrown when identifier starts with xml. | ||
38 | + */ | ||
39 | + @Test | ||
40 | + public void validateIdentifierStartsWithXml() throws IOException { | ||
41 | + thrown.expect(ParserException.class); | ||
42 | + thrown.expectMessage("YANG file error : module identifier xMlTest must not start" + | ||
43 | + " with (('X'|'x') ('M'|'m') ('L'|'l'))"); | ||
44 | + manager.getDataModel("src/test/resources/InValidIdentifierXML.yang"); | ||
45 | + } | ||
46 | +} |
1 | +module Test { | ||
2 | + yang-version 1; | ||
3 | + namespace http://huawei.com; | ||
4 | + prefix Ant; | ||
5 | + leaf type15 { | ||
6 | + type union { | ||
7 | + type bits { | ||
8 | + bit disable-nagle { | ||
9 | + position 0; | ||
10 | + } | ||
11 | + bit auto-sense-speed { | ||
12 | + position 1; | ||
13 | + } | ||
14 | + bit Mb-only { | ||
15 | + position 2; | ||
16 | + } | ||
17 | + } | ||
18 | + } | ||
19 | + } | ||
20 | +} |
-
Please register or login to post a comment