[ONOS-4938] Defect fix: range interval

Change-Id: I3229d35fb7c80da3bcf150d52ed7e7eba72bb4c8
diff --git a/utils/yangutils/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListenerTest.java b/utils/yangutils/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListenerTest.java
index 81e973f..b65b948 100644
--- a/utils/yangutils/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListenerTest.java
+++ b/utils/yangutils/plugin/src/test/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListenerTest.java
@@ -180,6 +180,17 @@
     }
 
     /**
+     * Validates default invalid value in typedef.
+     */
+    @Test
+    public void processDefaultInvalidValueInTypedef() throws IOException, ParserException {
+        thrown.expect(DataTypeException.class);
+        thrown.expectMessage("YANG file error : Input value \"0\" is not a valid INT32");
+
+        manager.getDataModel("src/test/resources/default/DefaultInvalidValueWithRangeInTypedef.yang");
+    }
+
+    /**
      * Validates default value decimal64 in leaf.
      */
     @Test
@@ -250,7 +261,7 @@
     @Test
     public void processDefaultInvalidValueStringInLeaf() throws IOException, ParserException {
         thrown.expect(DataTypeException.class);
-        thrown.expectMessage("YANG file error : Input value \"2bB2bB\" is not a valid string");
+        thrown.expectMessage("YANG file error : Input value \"2bB2bB\" is not a valid STRING");
 
         manager.getDataModel("src/test/resources/default/DefaultInvalidValueStringInLeaf.yang");
     }
@@ -288,7 +299,7 @@
     @Test
     public void processDefaultInvalidValueBooleanInLeaf() throws IOException, ParserException {
         thrown.expect(DataTypeException.class);
-        thrown.expectMessage("YANG file error : Input value \"yes\" is not a valid boolean");
+        thrown.expectMessage("YANG file error : Input value \"yes\" is not a valid BOOLEAN");
 
         manager.getDataModel("src/test/resources/default/DefaultInvalidValueBooleanInLeaf.yang");
     }
@@ -326,7 +337,7 @@
     @Test
     public void processDefaultInvalidValueEnumberationInLeaf() throws IOException, ParserException {
         thrown.expect(DataTypeException.class);
-        thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid union");
+        thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid ENUMERATION");
 
         manager.getDataModel("src/test/resources/default/DefaultInvalidValueEnumerationInLeaf.yang");
     }
@@ -364,7 +375,7 @@
     @Test
     public void processDefaultInvalidValueBitsInLeaf() throws IOException, ParserException {
         thrown.expect(DataTypeException.class);
-        thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid bits");
+        thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid BITS");
 
         manager.getDataModel("src/test/resources/default/DefaultInvalidValueBitsInLeaf.yang");
     }
@@ -402,7 +413,7 @@
     @Test
     public void processDefaultInvlaidValueBinaryInLeaf() throws IOException, ParserException {
         thrown.expect(DataTypeException.class);
-        thrown.expectMessage("YANG file error : Input value \"000\" is not a valid binary");
+        thrown.expectMessage("YANG file error : Input value \"000\" is not a valid BINARY");
 
         manager.getDataModel("src/test/resources/default/DefaultInvalidValueBinaryInLeaf.yang");
     }
@@ -413,7 +424,7 @@
     @Test
     public void processDefaultValueEmptyInLeaf() throws IOException, ParserException {
         thrown.expect(DataTypeException.class);
-        thrown.expectMessage("YANG file error : Input value \"something\" is not a allowed for a data type empty");
+        thrown.expectMessage("YANG file error : Input value \"something\" is not allowed for a data type EMPTY");
 
         manager.getDataModel("src/test/resources/default/DefaultValueEmptyInLeaf.yang");
     }
@@ -451,7 +462,7 @@
     @Test
     public void processDefaultInvalidValueUnionInLeaf() throws IOException, ParserException {
         thrown.expect(DataTypeException.class);
-        thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid union");
+        thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid UNION");
 
         manager.getDataModel("src/test/resources/default/DefaultInvalidValueUnionInLeaf.yang");
     }
diff --git a/utils/yangutils/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/RestrictionResolutionTest.java b/utils/yangutils/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/RestrictionResolutionTest.java
index c0f67b7..6b64e5b 100644
--- a/utils/yangutils/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/RestrictionResolutionTest.java
+++ b/utils/yangutils/plugin/src/test/java/org/onosproject/yangutils/plugin/manager/RestrictionResolutionTest.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.math.BigInteger;
 import java.util.ListIterator;
+
 import org.junit.Test;
 import org.onosproject.yangutils.datamodel.YangDerivedInfo;
 import org.onosproject.yangutils.datamodel.YangLeaf;
@@ -28,8 +29,11 @@
 import org.onosproject.yangutils.datamodel.YangRangeInterval;
 import org.onosproject.yangutils.datamodel.YangRangeRestriction;
 import org.onosproject.yangutils.datamodel.YangStringRestriction;
+import org.onosproject.yangutils.datamodel.YangType;
 import org.onosproject.yangutils.datamodel.YangTypeDef;
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt16;
 import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt32;
 import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint64;
 import org.onosproject.yangutils.linker.exceptions.LinkerException;
@@ -292,6 +296,79 @@
     }
 
     /**
+     * Checks range restriction in referred typedef.
+     */
+    @Test
+    public void processRangeRestrictionInRefTypedef()
+            throws IOException, ParserException, DataModelException {
+
+        YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInRefTypedef.yang");
+
+        // Check whether the data model tree returned is of type module.
+        assertThat(node instanceof YangModule, is(true));
+
+        // Check whether the node type is set properly to module.
+        assertThat(node.getNodeType(), is(MODULE_NODE));
+
+        // Check whether the module name is set correctly.
+        YangModule yangNode = (YangModule) node;
+        assertThat(yangNode.getName(), is("Test"));
+
+        // check top typedef
+        YangTypeDef topTypedef = (YangTypeDef) yangNode.getChild();
+        assertThat(topTypedef.getName(), is("Num3"));
+        YangType type = topTypedef.getTypeList().iterator().next();
+        assertThat(type.getDataType(), is(YangDataTypes.INT16));
+        assertThat(type.getDataTypeName(), is("int16"));
+
+        // Check for the restriction value.
+        YangRangeRestriction rangeRestriction = (YangRangeRestriction) type.getDataTypeExtendedInfo();
+        ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+                .listIterator();
+        YangRangeInterval rangeInterval1 = rangeListIterator.next();
+        assertThat((int) ((YangInt16) rangeInterval1.getStartValue()).getValue(), is(-32000));
+        assertThat((int) ((YangInt16) rangeInterval1.getEndValue()).getValue(), is(4));
+
+        YangRangeInterval rangeInterval2 = rangeListIterator.next();
+        assertThat((int) ((YangInt16) rangeInterval2.getStartValue()).getValue(), is(32767));
+        assertThat((int) ((YangInt16) rangeInterval2.getEndValue()).getValue(), is(32767));
+
+        // check referred typedef
+        YangTypeDef refTypedef = (YangTypeDef) topTypedef.getNextSibling();
+        assertThat(refTypedef.getName(), is("Num6"));
+        YangType refType = refTypedef.getTypeList().iterator().next();
+        assertThat(refType.getDataType(), is(YangDataTypes.DERIVED));
+        assertThat(refType.getDataTypeName(), is("Num3"));
+        YangDerivedInfo<YangRangeRestriction> derivedInfo =
+                (YangDerivedInfo<YangRangeRestriction>) refType.getDataTypeExtendedInfo();
+
+        // Check for the restriction value.
+        rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
+        rangeListIterator = rangeRestriction.getAscendingRangeIntervals().listIterator();
+        rangeInterval1 = rangeListIterator.next();
+        assertThat((int) ((YangInt16) rangeInterval1.getStartValue()).getValue(), is(-3));
+        assertThat((int) ((YangInt16) rangeInterval1.getEndValue()).getValue(), is(-3));
+
+        rangeInterval2 = rangeListIterator.next();
+        assertThat((int) ((YangInt16) rangeInterval2.getStartValue()).getValue(), is(-2));
+        assertThat((int) ((YangInt16) rangeInterval2.getEndValue()).getValue(), is(2));
+
+        YangRangeInterval rangeInterval3 = rangeListIterator.next();
+        assertThat((int) ((YangInt16) rangeInterval3.getStartValue()).getValue(), is(3));
+        assertThat((int) ((YangInt16) rangeInterval3.getEndValue()).getValue(), is(3));
+    }
+
+    /**
+     * Checks invalid range restriction in referred typedef.
+     */
+    @Test(expected = LinkerException.class)
+    public void processInvalidRangeRestrictionInRefTypedef()
+            throws IOException, ParserException, DataModelException {
+
+        manager.getDataModel("src/test/resources/RangeRestrictionInvalidInRefTypedef.yang");
+    }
+
+    /**
      * Checks range restriction in referred type.
      */
     @Test