Projects moved under correct parent.
[controller.git] / opendaylight / sal / yang-prototype / yang / yang-model-parser-impl / src / test / java / org / opendaylight / controller / yang / validator / YangModelValidationListTest.java
diff --git a/opendaylight/sal/yang-prototype/yang/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/validator/YangModelValidationListTest.java b/opendaylight/sal/yang-prototype/yang/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/validator/YangModelValidationListTest.java
new file mode 100644 (file)
index 0000000..1db855c
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.yang.validator;
+
+import static org.junit.Assert.assertThat;
+import static org.junit.matchers.JUnitMatchers.containsString;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Default_stmtContext;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Key_stmtContext;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Leaf_stmtContext;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.List_stmtContext;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Mandatory_stmtContext;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Ordered_by_argContext;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Type_stmtContext;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Unique_stmtContext;
+import org.opendaylight.controller.yang.parser.util.YangValidationException;
+
+public class YangModelValidationListTest {
+
+    private YangModelBasicValidationListener valid;
+
+    @Before
+    public void setUp() {
+        valid = new YangModelBasicValidationListener();
+    }
+
+    @Test(expected = YangValidationException.class)
+    public void testKeyValidationDuplicates() {
+
+        List_stmtContext list = YangModelValidationTest.mockStatement(
+                List_stmtContext.class, "list");
+        Key_stmtContext key = YangModelValidationTest.mockStatement(
+                Key_stmtContext.class, "leaf1 leaf2 leaf1 leaf1");
+        YangModelValidationTest.addChild(list, key);
+
+        try {
+            valid.enterKey_stmt(key);
+        } catch (YangValidationException e) {
+            assertThat(e.getMessage(),
+                    containsString("contains duplicates:[leaf1]"));
+            throw e;
+        }
+    }
+
+    @Test(expected = YangValidationException.class)
+    public void testUniqueValidationDuplicates() {
+        List_stmtContext list = YangModelValidationTest.mockStatement(
+                List_stmtContext.class, "list");
+        Unique_stmtContext unique = YangModelValidationTest.mockStatement(
+                Unique_stmtContext.class, "leaf1/a leaf2/n leaf1/a leaf1");
+        YangModelValidationTest.addChild(list, unique);
+
+        try {
+            valid.enterUnique_stmt(unique);
+        } catch (YangValidationException e) {
+            assertThat(e.getMessage(),
+                    containsString("contains duplicates:[leaf1/a]"));
+            throw e;
+        }
+    }
+
+    @Test(expected = YangValidationException.class)
+    public void testOrderBy() {
+        Ordered_by_argContext ctx = YangModelValidationTest.mockStatement(
+                Ordered_by_argContext.class, "unknown");
+
+        try {
+            valid.enterOrdered_by_arg(ctx);
+        } catch (YangValidationException e) {
+            assertThat(
+                    e.getMessage(),
+                    containsString("Ordered-by:unknown, illegal value for Ordered-by statement, only permitted:"));
+            throw e;
+        }
+    }
+
+    @Test(expected = YangValidationException.class)
+    public void testLeaf() {
+        Leaf_stmtContext ctx = YangModelValidationTest.mockStatement(
+                Leaf_stmtContext.class, "leaf1");
+        Default_stmtContext def = YangModelValidationTest.mockStatement(
+                Default_stmtContext.class, "default");
+        YangModelValidationTest.addChild(ctx, def);
+        Type_stmtContext typ = YangModelValidationTest.mockStatement(
+                Type_stmtContext.class, "type");
+        YangModelValidationTest.addChild(ctx, def);
+        YangModelValidationTest.addChild(ctx, typ);
+
+        Mandatory_stmtContext mand = YangModelValidationTest.mockStatement(
+                Mandatory_stmtContext.class, null);
+        YangModelValidationTest.addChild(ctx, mand);
+
+        try {
+            valid.enterLeaf_stmt(ctx);
+        } catch (YangValidationException e) {
+            assertThat(
+                    e.getMessage(),
+                    containsString("Both Mandatory and Default statement present"));
+            throw e;
+        }
+    }
+
+}