YANG string restriction listener + YANG Range restriction listener review comment fix
Change-Id: I9e7af9c67f8fbf918d4e0d8ff147a560889ff264
diff --git a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java
new file mode 100644
index 0000000..e5e647a
--- /dev/null
+++ b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java
@@ -0,0 +1,237 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.parser.impl.listeners;
+
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.ListIterator;
+
+import org.junit.Rule;
+import org.junit.Test;
+
+import org.junit.rules.ExpectedException;
+import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.datamodel.YangModule;
+import org.onosproject.yangutils.datamodel.YangNodeType;
+import org.onosproject.yangutils.datamodel.YangLeaf;
+import org.onosproject.yangutils.datamodel.YangLeafList;
+import org.onosproject.yangutils.datamodel.YangDataTypes;
+import org.onosproject.yangutils.datamodel.YangStringRestriction;
+import org.onosproject.yangutils.datamodel.YangRangeInterval;
+import org.onosproject.yangutils.datamodel.YangRangeRestriction;
+import org.onosproject.yangutils.datamodel.YangTypeDef;
+import org.onosproject.yangutils.parser.exceptions.ParserException;
+import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
+import org.onosproject.yangutils.utils.builtindatatype.YangUint64;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for length restriction listener.
+ */
+public class LengthRestrictionListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid length statement as sub-statement of leaf statement.
+ */
+ @Test
+ public void processValidLengthStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValidLengthStatement.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getLeafName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo
+ .getDataType().getDataTypeExtendedInfo();
+ YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
+
+ ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+ .listIterator();
+
+ YangRangeInterval rangeInterval = lengthListIterator.next();
+
+ assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
+ assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
+ }
+
+ /**
+ * Checks valid length statement as sub-statement of leaf-list.
+ */
+ @Test
+ public void processLengthStatementInsideLeafList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LengthStatementInsideLeafList.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+ YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
+
+ ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+ .listIterator();
+
+ YangRangeInterval rangeInterval = lengthListIterator.next();
+ assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
+ assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
+ }
+
+ /**
+ * Checks valid length statement as sub-statement of typedef.
+ */
+ @Test
+ public void processLengthStatementInsideTypeDef() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LengthStatementInsideTypeDef.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
+ YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getDataType()
+ .getDataTypeExtendedInfo();
+
+ YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
+ ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ YangRangeInterval rangeInterval = lengthListIterator.next();
+ assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
+ assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
+ }
+
+ /**
+ * Checks length statement with invalid type.
+ */
+ @Test
+ public void processLengthWithInvalidType() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : length name \"1..100\" can be used to restrict the built-in type" +
+ " string or types derived from string.");
+ YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidType.yang");
+ }
+
+ /**
+ * Checks length statement with only start interval.
+ */
+ @Test
+ public void processLengthWithOneInterval() throws IOException, ParserException {
+
+
+ YangNode node = manager.getDataModel("src/test/resources/LengthWithOneInterval.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+ YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
+
+ ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+ .listIterator();
+
+ YangRangeInterval rangeInterval = lengthListIterator.next();
+ assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
+ assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(1)));
+ }
+
+ /**
+ * Checks length statement with min and max.
+ */
+ @Test
+ public void processLengthWithMinMax() throws IOException, ParserException {
+
+
+ YangNode node = manager.getDataModel("src/test/resources/LengthWithMinMax.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+ YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
+
+ ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+ .listIterator();
+
+ YangRangeInterval rangeInterval = lengthListIterator.next();
+ assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
+ assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(new BigInteger("18446744073709551615")));
+ }
+
+ /**
+ * Checks length statement with invalid integer pattern.
+ */
+ @Test
+ public void processLengthWithInvalidIntegerPattern() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : a is not valid.");
+ YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidIntegerPattern.yang");
+ }
+
+ /**
+ * Checks length statement with invalid interval.
+ */
+ @Test
+ public void processLengthWithInvalidInterval() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : 18446744073709551617 is greater than maximum value" +
+ " 18446744073709551615.");
+ YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidInterval.yang");
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListenerTest.java b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListenerTest.java
new file mode 100644
index 0000000..ffd8470
--- /dev/null
+++ b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListenerTest.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.yangutils.parser.impl.listeners;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import org.junit.Test;
+import org.onosproject.yangutils.datamodel.YangNode;
+import org.onosproject.yangutils.datamodel.YangNodeType;
+import org.onosproject.yangutils.datamodel.YangModule;
+import org.onosproject.yangutils.datamodel.YangLeaf;
+import org.onosproject.yangutils.datamodel.YangLeafList;
+import org.onosproject.yangutils.datamodel.YangDataTypes;
+import org.onosproject.yangutils.datamodel.YangTypeDef;
+import org.onosproject.yangutils.datamodel.YangPatternRestriction;
+import org.onosproject.yangutils.datamodel.YangStringRestriction;
+import org.onosproject.yangutils.parser.exceptions.ParserException;
+import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for pattern restriction listener.
+ */
+public class PatternRestrictionListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid pattern statement as sub-statement of leaf statement.
+ */
+ @Test
+ public void processValidPatternStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValidPatternStatement.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getLeafName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo
+ .getDataType().getDataTypeExtendedInfo();
+ ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
+ .getPatternList().listIterator();
+ assertThat(patternListIterator.next(), is("[a-zA-Z]"));
+ }
+
+ /**
+ * Checks valid pattern statement as sub-statement of leaf-list.
+ */
+ @Test
+ public void processPatternStatementInsideLeafList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PatternStatementInsideLeafList.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+ ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
+ .getPatternList().listIterator();
+ assertThat(patternListIterator.next(), is("[a-zA-Z]"));
+ }
+
+ /**
+ * Checks valid pattern statement as sub-statement of typedef.
+ */
+ @Test
+ public void processPatternStatementInsideTypeDef() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PatternStatementInsideTypeDef.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
+ YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getDataType()
+ .getDataTypeExtendedInfo();
+
+ YangPatternRestriction yangPatternRestriction = stringRestriction.getPatternRestriction();
+ assertThat(yangPatternRestriction.getPatternList().listIterator().next(), is("[a-zA-Z]"));
+ }
+
+ /**
+ * Checks valid multiple pattern statements.
+ */
+ @Test
+ public void processMultiplePatternStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MultiplePatternStatement.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+ ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
+ .getPatternList().listIterator();
+ assertThat(patternListIterator.next(), is("[a-zA-Z]"));
+ }
+
+ /**
+ * Checks valid pattern statement with plus symbol in pattern.
+ */
+ @Test
+ public void processPatternStatementWithPlus() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PatternStatementWithPlus.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+ ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
+ .getPatternList().listIterator();
+ assertThat(patternListIterator.next(), is("-[0-9]+|[0-9]+"));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java
index 2b7e3a8..3ae527b 100644
--- a/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java
+++ b/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java
@@ -16,11 +16,12 @@
package org.onosproject.yangutils.parser.impl.listeners;
-
import java.io.IOException;
import java.util.ListIterator;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.ExpectedException;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangLeaf;
import org.onosproject.yangutils.datamodel.YangLeafList;
@@ -31,6 +32,7 @@
import org.onosproject.yangutils.datamodel.YangDataTypes;
import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
+import org.onosproject.yangutils.utils.builtindatatype.YangInt32;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
@@ -40,6 +42,9 @@
*/
public class RangeRestrictionListenerTest {
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
private final YangUtilsParserManager manager = new YangUtilsParserManager();
/**
@@ -67,8 +72,8 @@
ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
.listIterator();
YangRangeInterval rangeInterval = rangeListIterator.next();
- assertThat(rangeInterval.getStartValue(), is(10));
- assertThat(rangeInterval.getEndValue(), is(20));
+ assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
+ assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
}
/**
@@ -97,7 +102,77 @@
.listIterator();
YangRangeInterval rangeInterval = rangeListIterator.next();
- assertThat(rangeInterval.getStartValue(), is(10));
- assertThat(rangeInterval.getEndValue(), is(20));
+ assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
+ assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
+ }
+
+ /**
+ * Checks valid range statement with one interval.
+ */
+ @Test
+ public void processRangeWithOneInterval() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RangeWithOneInterval.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
+ YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+
+ assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
+ assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(1));
+ }
+
+ /**
+ * Checks valid range statement with min and max.
+ */
+ @Test
+ public void processRangeWithMinMax() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RangeWithMinMax.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
+ YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+
+ assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(-2147483648));
+ assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(2147483647));
+ }
+
+ /**
+ * Checks valid range statement with invalid integer pattern.
+ */
+ @Test
+ public void processRangeWithInvalidIntegerPattern() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : a is not valid.");
+ YangNode node = manager.getDataModel("src/test/resources/RangeWithInvalidIntegerPattern.yang");
}
}
\ No newline at end of file
diff --git a/src/test/resources/LengthStatementInsideLeafList.yang b/src/test/resources/LengthStatementInsideLeafList.yang
new file mode 100644
index 0000000..06d08db
--- /dev/null
+++ b/src/test/resources/LengthStatementInsideLeafList.yang
@@ -0,0 +1,10 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf-list invalid-interval {
+ type string {
+ length "1..100";
+ }
+ }
+}
diff --git a/src/test/resources/LengthStatementInsideTypeDef.yang b/src/test/resources/LengthStatementInsideTypeDef.yang
new file mode 100644
index 0000000..c1195dc
--- /dev/null
+++ b/src/test/resources/LengthStatementInsideTypeDef.yang
@@ -0,0 +1,15 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ typedef invalid-interval {
+ type string {
+ length "1..100";
+ }
+ }
+ leaf xyz {
+ type invalid-interval {
+ length "2..100";
+ }
+ }
+}
diff --git a/src/test/resources/LengthWithInvalidIntegerPattern.yang b/src/test/resources/LengthWithInvalidIntegerPattern.yang
new file mode 100644
index 0000000..f5c8a69
--- /dev/null
+++ b/src/test/resources/LengthWithInvalidIntegerPattern.yang
@@ -0,0 +1,10 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf-list invalid-interval {
+ type string {
+ length "a..z";
+ }
+ }
+}
diff --git a/src/test/resources/LengthWithInvalidInterval.yang b/src/test/resources/LengthWithInvalidInterval.yang
new file mode 100644
index 0000000..7b4ae18
--- /dev/null
+++ b/src/test/resources/LengthWithInvalidInterval.yang
@@ -0,0 +1,10 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf-list invalid-interval {
+ type string {
+ length "0..18446744073709551617";
+ }
+ }
+}
diff --git a/src/test/resources/LengthWithInvalidType.yang b/src/test/resources/LengthWithInvalidType.yang
new file mode 100644
index 0000000..74b183c
--- /dev/null
+++ b/src/test/resources/LengthWithInvalidType.yang
@@ -0,0 +1,10 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf-list invalid-interval {
+ type int8 {
+ length "1..100";
+ }
+ }
+}
diff --git a/src/test/resources/LengthWithMinMax.yang b/src/test/resources/LengthWithMinMax.yang
new file mode 100644
index 0000000..5884266
--- /dev/null
+++ b/src/test/resources/LengthWithMinMax.yang
@@ -0,0 +1,10 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf-list invalid-interval {
+ type string {
+ length "min..max";
+ }
+ }
+}
diff --git a/src/test/resources/LengthWithOneInterval.yang b/src/test/resources/LengthWithOneInterval.yang
new file mode 100644
index 0000000..b160f02
--- /dev/null
+++ b/src/test/resources/LengthWithOneInterval.yang
@@ -0,0 +1,10 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf-list invalid-interval {
+ type string {
+ length "1";
+ }
+ }
+}
diff --git a/src/test/resources/MultiplePatternStatement.yang b/src/test/resources/MultiplePatternStatement.yang
new file mode 100644
index 0000000..7a47bfc
--- /dev/null
+++ b/src/test/resources/MultiplePatternStatement.yang
@@ -0,0 +1,11 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf-list invalid-interval {
+ type string {
+ pattern "[a-zA-Z]";
+ pattern "[a-z]";
+ }
+ }
+}
diff --git a/src/test/resources/PatternStatementInsideLeafList.yang b/src/test/resources/PatternStatementInsideLeafList.yang
new file mode 100644
index 0000000..d21c0f6
--- /dev/null
+++ b/src/test/resources/PatternStatementInsideLeafList.yang
@@ -0,0 +1,10 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf-list invalid-interval {
+ type string {
+ pattern "[a-zA-Z]";
+ }
+ }
+}
diff --git a/src/test/resources/PatternStatementInsideTypeDef.yang b/src/test/resources/PatternStatementInsideTypeDef.yang
new file mode 100644
index 0000000..edb625e
--- /dev/null
+++ b/src/test/resources/PatternStatementInsideTypeDef.yang
@@ -0,0 +1,15 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ typedef invalid-interval {
+ type string {
+ pattern "[a-zA-Z]";
+ }
+ }
+ leaf xyz {
+ type invalid-interval {
+ pattern "[a-z]";
+ }
+ }
+}
diff --git a/src/test/resources/PatternStatementWithPlus.yang b/src/test/resources/PatternStatementWithPlus.yang
new file mode 100644
index 0000000..417e1d1
--- /dev/null
+++ b/src/test/resources/PatternStatementWithPlus.yang
@@ -0,0 +1,10 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf-list invalid-interval {
+ type string {
+ pattern "-[0-9]+|[0-9]+";
+ }
+ }
+}
diff --git a/src/test/resources/RangeWithInvalidIntegerPattern.yang b/src/test/resources/RangeWithInvalidIntegerPattern.yang
new file mode 100644
index 0000000..60c7992
--- /dev/null
+++ b/src/test/resources/RangeWithInvalidIntegerPattern.yang
@@ -0,0 +1,10 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf-list invalid-interval {
+ type int32 {
+ range "a..z";
+ }
+ }
+}
diff --git a/src/test/resources/RangeWithMinMax.yang b/src/test/resources/RangeWithMinMax.yang
new file mode 100644
index 0000000..373d45e
--- /dev/null
+++ b/src/test/resources/RangeWithMinMax.yang
@@ -0,0 +1,10 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf-list invalid-interval {
+ type int32 {
+ range "min..max";
+ }
+ }
+}
diff --git a/src/test/resources/RangeWithOneInterval.yang b/src/test/resources/RangeWithOneInterval.yang
new file mode 100644
index 0000000..85d0288
--- /dev/null
+++ b/src/test/resources/RangeWithOneInterval.yang
@@ -0,0 +1,10 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf-list invalid-interval {
+ type int32 {
+ range "1";
+ }
+ }
+}
diff --git a/src/test/resources/ValidLengthStatement.yang b/src/test/resources/ValidLengthStatement.yang
new file mode 100644
index 0000000..57cb809
--- /dev/null
+++ b/src/test/resources/ValidLengthStatement.yang
@@ -0,0 +1,10 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf invalid-interval {
+ type string {
+ length "0..100";
+ }
+ }
+}
diff --git a/src/test/resources/ValidPatternStatement.yang b/src/test/resources/ValidPatternStatement.yang
new file mode 100644
index 0000000..556db31
--- /dev/null
+++ b/src/test/resources/ValidPatternStatement.yang
@@ -0,0 +1,10 @@
+module Test {
+ yang-version 1;
+ namespace http://huawei.com;
+ prefix Ant;
+ leaf invalid-interval {
+ type string {
+ pattern "[a-zA-Z]";
+ }
+ }
+}