Do not generate union builders
[mdsal.git] / binding / mdsal-binding-java-api-generator / src / test / java / org / opendaylight / mdsal / binding / java / api / generator / InterfaceGeneratorTest.java
index 4afa2511857be89572af9867596cc408f27e3450..f572a4613da3ecc4ddbd9e09a5dad438ce49f90c 100644 (file)
 package org.opendaylight.mdsal.binding.java.api.generator;
 
 import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 
+import com.google.common.collect.ImmutableList;
+import java.util.ArrayList;
+import java.util.List;
 import org.junit.Test;
+import org.opendaylight.mdsal.binding.model.api.AnnotationType;
+import org.opendaylight.mdsal.binding.model.api.GeneratedType;
+import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
+import org.opendaylight.mdsal.binding.model.api.MethodSignature;
 import org.opendaylight.mdsal.binding.model.api.Type;
+import org.opendaylight.mdsal.binding.model.ri.Types;
 
 public class InterfaceGeneratorTest {
+    private static final String TEST = "test";
+    private static final JavaTypeName TYPE_NAME = JavaTypeName.create(TEST, TEST);
+
     @Test
-    public void basicTest() throws Exception {
+    public void basicTest() {
         assertEquals("", new InterfaceGenerator().generate(mock(Type.class)));
     }
+
+    @Test
+    public void builderTemplateListenerMethodTest() {
+        final MethodSignature methSign = mockMethSign("on" + TEST);
+        final GeneratedType genType = mockGenType(methSign);
+
+        String expected = String.join(System.lineSeparator(),
+            "package test;",
+            "import javax.annotation.processing.Generated;",
+            "",
+            "@Generated(\"mdsal-binding-generator\")",
+            "public interface test",
+            "{",
+            "",
+            "",
+            "",
+            "",
+            "    void ontest();",
+            "",
+            "}",
+            "",
+            ""
+        );
+        assertEquals(expected, new InterfaceGenerator().generate(genType));
+    }
+
+    @Test
+    public void builderTemplateDeprecatedListenerMethodTest() {
+        final MethodSignature methSign = mockMethSign("on" + TEST);
+        addMethodStatus(methSign, JavaTypeName.create(Deprecated.class));
+        final GeneratedType genType = mockGenType(methSign);
+
+        String expected = String.join(System.lineSeparator(),
+            "package test;",
+            "import java.lang.Deprecated;",
+            "import javax.annotation.processing.Generated;",
+            "",
+            "@Generated(\"mdsal-binding-generator\")",
+            "public interface test",
+            "{",
+            "",
+            "",
+            "",
+            "",
+            "    @Deprecated",
+            "    void ontest();",
+            "",
+            "}",
+            "",
+            ""
+        );
+        assertEquals(expected, new InterfaceGenerator().generate(genType));
+    }
+
+    @Test
+    public void builderTemplateGenerateObsoleteListenerMethodTest() {
+        final MethodSignature methSign = mockMethSign("on" + TEST);
+        addMethodStatus(methSign, JavaTypeName.create(Deprecated.class));
+        doReturn(true).when(methSign).isDefault();
+        final GeneratedType genType = mockGenType(methSign);
+
+        String expected = String.join(System.lineSeparator(),
+            "package test;",
+            "import java.lang.Deprecated;",
+            "import javax.annotation.processing.Generated;",
+            "",
+            "@Generated(\"mdsal-binding-generator\")",
+            "public interface test",
+            "{",
+            "",
+            "",
+            "",
+            "",
+            "    @Deprecated",
+            "    default void ontest() {",
+            "        // No-op",
+            "    }",
+            "",
+            "}",
+            "",
+            ""
+        );
+        assertEquals(expected, new InterfaceGenerator().generate(genType));
+    }
+
+    private static GeneratedType mockGenType(final MethodSignature methSign) {
+        final GeneratedType genType = spy(GeneratedType.class);
+        doReturn(TYPE_NAME).when(genType).getIdentifier();
+        doReturn(TEST).when(genType).getName();
+        doReturn(TEST).when(genType).getPackageName();
+        final List<MethodSignature> listMethodSign = new ArrayList<>();
+        listMethodSign.add(methSign);
+        doReturn(listMethodSign).when(genType).getMethodDefinitions();
+
+        final List<Type> impls = new ArrayList<>();
+        doReturn(impls).when(genType).getImplements();
+        return genType;
+    }
+
+    private static MethodSignature mockMethSign(final String methodeName) {
+        final MethodSignature methSign = mock(MethodSignature.class);
+        doReturn(methodeName).when(methSign).getName();
+        final Type methType = Types.typeForClass(void.class);
+        doReturn(methType).when(methSign).getReturnType();
+        doReturn(MethodSignature.ValueMechanics.NORMAL).when(methSign).getMechanics();
+        return methSign;
+    }
+
+    private static void addMethodStatus(final MethodSignature methSign, final JavaTypeName annotationJavaType) {
+        final AnnotationType annotationType = mock(AnnotationType.class);
+        doReturn(annotationJavaType).when(annotationType).getIdentifier();
+        doReturn(ImmutableList.of(annotationType)).when(methSign).getAnnotations();
+    }
 }
\ No newline at end of file