Populate parser/ hierarchy
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / CaseStmtTest.java
diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/CaseStmtTest.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/CaseStmtTest.java
new file mode 100644 (file)
index 0000000..ee03318
--- /dev/null
@@ -0,0 +1,542 @@
+/*
+ * Copyright (c) 2016 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.yangtools.yang.stmt;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThrows;
+
+import java.util.Optional;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
+import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
+
+public class CaseStmtTest {
+    private static final Optional<Boolean> OPT_FALSE = Optional.of(Boolean.FALSE);
+    private static final Optional<Boolean> OPT_TRUE = Optional.of(Boolean.TRUE);
+
+    private SchemaContext schema;
+    private Module rootFoo;
+    private Module rootBar;
+    private QNameModule qnameFoo;
+    private QNameModule qnameBar;
+    private DataSchemaNode tempChild;
+    private DataSchemaNode tempSecondChild;
+    private DataSchemaNode tempThirdChild;
+    private CaseSchemaNode tempChoice;
+
+    @Before
+    public void setup() throws Exception {
+        schema = StmtTestUtils.parseYangSources("/case-test");
+        Revision rev = Revision.of("2015-09-09");
+        rootFoo = schema.findModule("foo", rev).get();
+        rootBar = schema.findModule("bar", rev).get();
+        assertNotNull(rootFoo);
+        assertNotNull(rootBar);
+        qnameFoo = QNameModule.create(XMLNamespace.of("foo"), rev);
+        qnameBar = QNameModule.create(XMLNamespace.of("bar"), rev);
+        assertNotNull(qnameFoo);
+        assertNotNull(qnameBar);
+    }
+
+    @Test
+    public void caseTest() {
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-fff"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_FALSE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-ffn"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_FALSE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-fnf"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_FALSE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-nff"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-nnf"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(Optional.empty(), tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-nfn"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-fnn"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_FALSE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-ttt"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-ttn"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-tnt"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-ntt"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-nnt"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(Optional.empty(), tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-ntn"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-tnn"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-tff"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-tnf"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-tfn"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootFoo.getDataChildByName(QName.create(qnameFoo, "root-ntf"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+    }
+
+    @Test
+    public void shortCaseTest() {
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-fff"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_FALSE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-ffn"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_FALSE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-fnf"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_FALSE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-nff"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-nnf"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(Optional.empty(), tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-nfn"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-fnn"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_FALSE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-ttt"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-ttn"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-tnt"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-ntt"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-nnt"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(Optional.empty(), tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-ntn"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-tnn"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_TRUE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_TRUE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-tff"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-tnf"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-tfn"));
+        assertNotNull(tempChild);
+        assertEquals(OPT_TRUE, tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_FALSE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+
+        tempChild = rootBar.getDataChildByName(QName.create(qnameBar, "sh-root-ntf"));
+        assertNotNull(tempChild);
+        assertEquals(Optional.empty(), tempChild.effectiveConfig());
+        tempSecondChild = ((ContainerSchemaNode) tempChild).getChildNodes().iterator().next();
+        assertNotNull(tempSecondChild);
+        assertEquals(OPT_TRUE, tempSecondChild.effectiveConfig());
+        tempChoice = ((ChoiceSchemaNode) tempSecondChild).getCases().iterator().next();
+        assertNotNull(tempChoice);
+        assertEquals(OPT_FALSE, tempChoice.effectiveConfig());
+        tempThirdChild = tempChoice.getChildNodes().iterator().next();
+        assertNotNull(tempThirdChild);
+        assertEquals(OPT_FALSE, tempThirdChild.effectiveConfig());
+    }
+
+    @Test
+    public void testInferenceExceptionChoice() {
+        assertThrows(ReactorException.class,
+            () -> StmtTestUtils.parseYangSources("/case-test/case-test-exceptions/choice"));
+    }
+
+    @Test
+    public void testInferenceExceptionCase() throws Exception {
+        assertThrows(ReactorException.class,
+            () -> StmtTestUtils.parseYangSources("/case-test/case-test-exceptions/case"));
+    }
+}
\ No newline at end of file