Allow null as valid for YangBits
Change-Id: Ie283997b8f5e4755cdcdda3af79e03f3d07b756c
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBits.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBits.java
index 48131c7..3cfff69 100644
--- a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBits.java
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBits.java
@@ -225,17 +225,21 @@
/**
* Returns the object of YANG bits based on specific set of bit names.
*
- * @param bits set of bit names
+ * @param bits set of bit names. Treats null the same as empty string
* @return Object of YANG bits
*/
public YangBits fromString(String bits) {
+ if (bits == null || bits.isEmpty()) {
+ bitDataSet.clear();
+ return this;
+ }
try {
String[] bitNames = bits.trim().split(Pattern.quote(SPACE));
setBitDataSet(bitNames);
return this;
} catch (Exception e) {
+ return null;
}
- return null;
}
/**
diff --git a/compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/DataValidator.java b/compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/DataValidatorTest.java
similarity index 89%
rename from compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/DataValidator.java
rename to compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/DataValidatorTest.java
index 8603e85..1886542 100644
--- a/compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/DataValidator.java
+++ b/compiler/base/datamodel/src/test/java/org/onosproject/yang/compiler/datamodel/DataValidatorTest.java
@@ -17,9 +17,11 @@
import org.junit.Test;
import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.DataTypeException;
import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangInt8;
+import static org.junit.Assert.fail;
import static org.onosproject.yang.compiler.datamodel.CheckValidationTest.dataValidation;
import static org.onosproject.yang.compiler.datamodel.CheckValidationTest.rangeCheck;
import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
@@ -40,7 +42,7 @@
* Unit tests for data type validations.Creates and validates different data
* types against their data types covering different scenarios.
*/
-public class DataValidator {
+public class DataValidatorTest {
/*
* Creating nodes of type INT8 and testing the data validation.
@@ -174,6 +176,36 @@
}
/**
+ * Creating nodes of type BIT and testing valid and invalid values.
+ */
+ @Test
+ public void positiveBits() throws DataModelException {
+
+ YangType<YangBits> newNode = new YangType<>();
+ newNode.setDataType(BITS);
+ YangBits bitNode = new YangBits();
+ YangBit yb1 = new YangBit();
+ yb1.setBitName("test1");
+ bitNode.addBitInfo(yb1);
+ newNode.setDataTypeExtendedInfo(bitNode);
+ try {
+ newNode.isValidValue("test1");
+ } catch (DataModelException e) {
+ fail("'test1' is valid. Unexpected " + e.getMessage());
+ }
+ try {
+ newNode.isValidValue("test2");
+ fail("Expecting exception.");
+ } catch (DataTypeException e) {
+ }
+ try {
+ newNode.isValidValue(null);
+ } catch (DataModelException e) {
+ fail("null is valid. Unexpected " + e.getMessage());
+ }
+ }
+
+ /**
* Creating nodes of type BIT and testing the data validation.
*/
@Test