Bug 6859 #3 Binding generator v1 refactoring
[mdsal.git] / binding / mdsal-binding-generator-impl / src / test / java / org / opendaylight / mdsal / binding / generator / impl / ChoiceCaseGenTypesTest.java
diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/ChoiceCaseGenTypesTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/ChoiceCaseGenTypesTest.java
new file mode 100644 (file)
index 0000000..942c6f4
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * 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.mdsal.binding.generator.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.opendaylight.mdsal.binding.generator.impl.SupportTestUtil.containsInterface;
+import static org.opendaylight.mdsal.binding.generator.impl.SupportTestUtil.containsMethods;
+
+import java.io.IOException;
+import java.util.List;
+import org.junit.Test;
+import org.opendaylight.mdsal.binding.generator.api.BindingGenerator;
+import org.opendaylight.mdsal.binding.generator.impl.BindingGeneratorImpl;
+import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
+import org.opendaylight.mdsal.binding.model.api.GeneratedType;
+import org.opendaylight.mdsal.binding.model.api.Type;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
+import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
+import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
+
+public class ChoiceCaseGenTypesTest extends AbstractTypesTest {
+
+    public ChoiceCaseGenTypesTest() {
+        super(ChoiceCaseGenTypesTest.class.getResource("/choice-case-type-test-models"));
+    }
+
+    private static GeneratedType checkGeneratedType(final List<Type> genTypes, final String genTypeName,
+            final String packageName, final int occurences) {
+        GeneratedType searchedGenType = null;
+        int searchedGenTypeCounter = 0;
+        for (Type type : genTypes) {
+            if (type instanceof GeneratedType && !(type instanceof GeneratedTransferObject)) {
+                GeneratedType genType = (GeneratedType) type;
+                if (genType.getName().equals(genTypeName) && genType.getPackageName().equals(packageName)) {
+                    searchedGenType = genType;
+                    searchedGenTypeCounter++;
+                }
+            }
+        }
+        assertNotNull("Generated type " + genTypeName + " wasn't found", searchedGenType);
+        assertEquals(genTypeName + " generated type has incorrect number of occurences.", occurences,
+                searchedGenTypeCounter);
+        return searchedGenType;
+
+    }
+
+    private static GeneratedType checkGeneratedType(final List<Type> genTypes, final String genTypeName,
+            final String packageName) {
+        return checkGeneratedType(genTypes, genTypeName, packageName, 1);
+    }
+
+    @Test
+    public void choiceCaseResolvingTypeTest() throws IOException, SourceException, ReactorException {
+        final SchemaContext context = YangParserTestUtils.parseYangSources(testModels);
+
+        assertNotNull("context is null", context);
+        final BindingGenerator bindingGen = new BindingGeneratorImpl(true);
+        final List<Type> genTypes = bindingGen.generateTypes(context);
+
+        assertNotNull("genTypes is null", genTypes);
+        assertFalse("genTypes is empty", genTypes.isEmpty());
+
+        // test for file choice-monitoring
+        String pcgPref = "org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.choice.monitoring.rev130701.netconf.state.datastores.datastore.locks";
+        GeneratedType genType = null;
+
+        checkGeneratedType(genTypes, "LockType", pcgPref); // choice
+
+        genType = checkGeneratedType(genTypes, "GlobalLock", pcgPref + ".lock.type"); // case
+        SupportTestUtil.containsMethods(genType, new NameTypePattern("getGlobalLock", "GlobalLock"));
+        containsInterface("LockType", genType);
+
+        genType = checkGeneratedType(genTypes, "PartialLock", pcgPref + ".lock.type"); // case
+        containsMethods(genType, new NameTypePattern("getPartialLock", "List<PartialLock>"));
+        containsInterface("LockType", genType);
+
+        genType = checkGeneratedType(genTypes, "Fingerprint", pcgPref + ".lock.type"); // case
+        containsMethods(genType, new NameTypePattern("getAlgorithmAndHash", "AlgorithmAndHash"));
+        containsInterface("LockType", genType);
+
+        genType = checkGeneratedType(genTypes, "AlgorithmAndHash", pcgPref + ".lock.type.fingerprint"); // choice
+
+        genType = checkGeneratedType(genTypes, "Md5", pcgPref + ".lock.type.fingerprint.algorithm.and.hash"); // case
+        containsMethods(genType, new NameTypePattern("getMd5", "TlsFingerprintType"));
+        containsInterface("AlgorithmAndHash", genType);
+
+        genType = checkGeneratedType(genTypes, "Sha1", pcgPref + ".lock.type.fingerprint.algorithm.and.hash"); // case
+        containsMethods(genType, new NameTypePattern("getSha1", "TlsFingerprintType"));
+        containsInterface("AlgorithmAndHash", genType);
+
+        genType = checkGeneratedType(genTypes, "Sha224", pcgPref + ".lock.type.fingerprint.algorithm.and.hash"); // case
+        containsMethods(genType, new NameTypePattern("getSha224", "TlsFingerprintType"));
+        containsInterface("AlgorithmAndHash", genType);
+
+        genType = checkGeneratedType(genTypes, "Sha256", pcgPref + ".lock.type.fingerprint.algorithm.and.hash"); // case
+        containsMethods(genType, new NameTypePattern("getSha256", "TlsFingerprintType"));
+        containsInterface("AlgorithmAndHash", genType);
+
+        genType = checkGeneratedType(genTypes, "Sha384", pcgPref + ".lock.type.fingerprint.algorithm.and.hash"); // case
+        containsMethods(genType, new NameTypePattern("getSha384", "TlsFingerprintType"));
+        containsInterface("AlgorithmAndHash", genType);
+
+        genType = checkGeneratedType(genTypes, "Sha512", pcgPref + ".lock.type.fingerprint.algorithm.and.hash"); // case
+        containsMethods(genType, new NameTypePattern("getSha512", "TlsFingerprintType"));
+        containsInterface("AlgorithmAndHash", genType);
+
+        // test for file augment-monitoring
+        // augment
+        // "/nm:netconf-state/nm:datastores/nm:datastore/nm:locks/nm:lock-type"
+        pcgPref = "org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.augment.monitoring.rev130701";
+
+        genType = checkGeneratedType(genTypes, "AutonomousLock", pcgPref
+                + ".netconf.state.datastores.datastore.locks.lock.type"); // choice
+        containsMethods(genType, new NameTypePattern("getAutonomousDef", "AutonomousDef"));
+        containsInterface("LockType", genType);
+
+        genType = checkGeneratedType(genTypes, "AnonymousLock", pcgPref
+                + ".netconf.state.datastores.datastore.locks.lock.type"); // choice
+        containsMethods(genType, new NameTypePattern("getLockTime", "Long"));
+        containsInterface("LockType", genType);
+
+        genType = checkGeneratedType(genTypes, "LeafAugCase", pcgPref
+                + ".netconf.state.datastores.datastore.locks.lock.type"); // choice
+        containsMethods(genType, new NameTypePattern("getLeafAugCase", "String"));
+        containsInterface("LockType", genType);
+
+        // augment
+        // "/nm:netconf-state/nm:datastores/nm:datastore/nm:locks/nm:lock-type/nm:partial-lock"
+        // {
+        genType = checkGeneratedType(genTypes, "PartialLock1", pcgPref); // case
+        containsMethods(genType, new NameTypePattern("getAugCaseByChoice", "AugCaseByChoice"));
+        containsInterface("Augmentation<PartialLock>", genType);
+
+        genType = checkGeneratedType(genTypes, "AugCaseByChoice", pcgPref
+                + ".netconf.state.datastores.datastore.locks.lock.type.partial.lock"); // choice
+
+        genType = checkGeneratedType(genTypes, "Foo", pcgPref
+                + ".netconf.state.datastores.datastore.locks.lock.type.partial.lock.aug._case.by.choice"); // case
+        containsMethods(genType, new NameTypePattern("getFoo", "String"));
+        containsInterface("AugCaseByChoice", genType);
+
+        genType = checkGeneratedType(genTypes, "Bar", pcgPref
+                + ".netconf.state.datastores.datastore.locks.lock.type.partial.lock.aug._case.by.choice"); // case
+        containsMethods(genType, new NameTypePattern("isBar", "Boolean"));
+        containsInterface("AugCaseByChoice", genType);
+
+        // augment "/nm:netconf-state/nm:datastores/nm:datastore" {
+        genType = checkGeneratedType(genTypes, "Datastore1", pcgPref);
+        containsMethods(genType, new NameTypePattern("getStorageFormat", "StorageFormat"));
+        containsInterface("Augmentation<Datastore>", genType);
+
+        genType = checkGeneratedType(genTypes, "StorageFormat", pcgPref + ".netconf.state.datastores.datastore"); // choice
+
+        genType = checkGeneratedType(genTypes, "UnknownFiles", pcgPref
+                + ".netconf.state.datastores.datastore.storage.format"); // case
+        containsMethods(genType, new NameTypePattern("getFiles", "List<Files>"));
+        containsInterface("StorageFormat", genType);
+
+        genType = checkGeneratedType(genTypes, "Xml", pcgPref + ".netconf.state.datastores.datastore.storage.format"); // case
+        containsMethods(genType, new NameTypePattern("getXmlDef", "XmlDef"));
+        containsInterface("StorageFormat", genType);
+
+        genType = checkGeneratedType(genTypes, "Yang", pcgPref + ".netconf.state.datastores.datastore.storage.format"); // case
+        containsMethods(genType, new NameTypePattern("getYangFileName", "String"));
+        containsInterface("StorageFormat", genType);
+
+    }
+}