BUG-2159: ensure test survies Java 8 50/13850/2
authorRobert Varga <rovarga@cisco.com>
Wed, 24 Dec 2014 19:14:46 +0000 (20:14 +0100)
committerRobert Varga <rovarga@cisco.com>
Wed, 24 Dec 2014 20:55:21 +0000 (21:55 +0100)
Java 8 has slightly enhanced runtime, which trips the strict checking
done in tests. Fixe them up to pass.

Change-Id: Ia2fcd33c7831d4a1ff7171e6528ee6af5bc22d36
Signed-off-by: Robert Varga <rovarga@cisco.com>
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/CompilationTest.java

index 94b04391bba0598fe89ec931c0e90ce710954164..073f6a9d775aacc8de7e05350fe5f6550777f0ed 100644 (file)
@@ -27,12 +27,15 @@ import static org.opendaylight.yangtools.sal.java.api.generator.test.Compilation
 import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.cleanUp;
 import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.getSourceFiles;
 import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.testCompilation;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Range;
 import java.io.File;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.WildcardType;
 import java.math.BigDecimal;
@@ -40,6 +43,8 @@ import java.math.BigInteger;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -56,6 +61,21 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
  */
 public class CompilationTest extends BaseCompilationTest {
 
+    /*
+     * Java 8 allows JaCoCo to hook onto interfaces, as well as
+     * generating a default implementation. We only want to check
+     * abstract methods.
+     */
+    private static Collection<Method> abstractMethods(final Class<?> clazz) {
+        // Filter out
+        return Collections2.filter(Arrays.asList(clazz.getDeclaredMethods()), new Predicate<Method>() {
+            @Override
+            public boolean apply(final Method input) {
+                return Modifier.isAbstract(input.getModifiers());
+            }
+        });
+    }
+
     @Test
     public void testListGeneration() throws Exception {
         final File sourcesOutputDir = new File(GENERATOR_OUTPUT_PATH + FS + "list-gen");
@@ -106,15 +126,15 @@ public class CompilationTest extends BaseCompilationTest {
 
         // Test generated 'grouping key-args'
         assertTrue(keyArgsClass.isInterface());
-        assertEquals(2, keyArgsClass.getDeclaredMethods().length);
         assertContainsMethod(keyArgsClass, String.class, "getName");
         assertContainsMethod(keyArgsClass, Integer.class, "getSize");
+        assertEquals(2, abstractMethods(keyArgsClass).size());
 
         // Test generated 'list links'
         assertTrue(linksClass.isInterface());
-        // TODO: anyxml
-        assertEquals(6, linksClass.getDeclaredMethods().length);
         assertImplementsIfc(linksClass, keyArgsClass);
+        // TODO: anyxml
+        assertEquals(6, abstractMethods(linksClass).size());
 
         // Test list key constructor arguments ordering
         assertContainsConstructor(linksKeyClass, Byte.class, String.class, Integer.class);