From 26ce086ef57dc86b94d72078fe46fb43b6cf5f54 Mon Sep 17 00:00:00 2001 From: HARDEMAN Sebastien Date: Thu, 24 Nov 2022 10:49:09 +0100 Subject: [PATCH 1/4] BAEL-5727 - Determine If a Class Implements an Interface in Java Data model and unit test Class for the BAEL-5727 - Determine If a Class Implements an Interface in Java --- core-java-modules/core-java-lang-5/pom.xml | 15 +++ .../baeldung/checkInterface/ChildClass1.java | 5 + .../baeldung/checkInterface/ChildClass2.java | 5 + .../checkInterface/ChildInterface1.java | 5 + .../checkInterface/ChildInterface2.java | 5 + .../baeldung/checkInterface/MasterClass.java | 5 + .../checkInterface/MasterInterface.java | 5 + .../CheckInterfaceUnitTest.java | 127 ++++++++++++++++++ 8 files changed, 172 insertions(+) create mode 100644 core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass1.java create mode 100644 core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass2.java create mode 100644 core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface1.java create mode 100644 core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface2.java create mode 100644 core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterClass.java create mode 100644 core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterInterface.java create mode 100644 core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkInterface/CheckInterfaceUnitTest.java diff --git a/core-java-modules/core-java-lang-5/pom.xml b/core-java-modules/core-java-lang-5/pom.xml index 6d3771bd31..549f307aee 100644 --- a/core-java-modules/core-java-lang-5/pom.xml +++ b/core-java-modules/core-java-lang-5/pom.xml @@ -13,6 +13,7 @@ core-java-modules 0.0.1-SNAPSHOT + core-java-lang-5 @@ -24,4 +25,18 @@ + + + org.apache.commons + commons-lang3 + 3.12.0 + + + + org.reflections + reflections + 0.10.2 + + + \ No newline at end of file diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass1.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass1.java new file mode 100644 index 0000000000..414f421da3 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass1.java @@ -0,0 +1,5 @@ +package com.baeldung.checkInterface; + +public class ChildClass1 implements ChildInterface1 { + +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass2.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass2.java new file mode 100644 index 0000000000..568c7b57c7 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass2.java @@ -0,0 +1,5 @@ +package com.baeldung.checkInterface; + +public class ChildClass2 implements ChildInterface2 { + +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface1.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface1.java new file mode 100644 index 0000000000..02f87d1901 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface1.java @@ -0,0 +1,5 @@ +package com.baeldung.checkInterface; + +public interface ChildInterface1 extends MasterInterface { + +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface2.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface2.java new file mode 100644 index 0000000000..80a5915b27 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface2.java @@ -0,0 +1,5 @@ +package com.baeldung.checkInterface; + +public interface ChildInterface2 extends MasterInterface { + +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterClass.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterClass.java new file mode 100644 index 0000000000..133e8bb0a7 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterClass.java @@ -0,0 +1,5 @@ +package com.baeldung.checkInterface; + +public class MasterClass implements MasterInterface { + +} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterInterface.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterInterface.java new file mode 100644 index 0000000000..554816df4d --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterInterface.java @@ -0,0 +1,5 @@ +package com.baeldung.checkInterface; + +public interface MasterInterface { + +} diff --git a/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkInterface/CheckInterfaceUnitTest.java b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkInterface/CheckInterfaceUnitTest.java new file mode 100644 index 0000000000..3a1f8ff2b6 --- /dev/null +++ b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkInterface/CheckInterfaceUnitTest.java @@ -0,0 +1,127 @@ +package com.baeldung.checkInterface; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang3.ClassUtils; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.reflections.ReflectionUtils; +import org.reflections.Reflections; + +public class CheckInterfaceUnitTest { + + protected static Reflections reflections; + + @BeforeAll + public static void initializeReflectionsLibrary() { + + reflections = new Reflections("com.baeldung.checkInterface"); + } + + @Test + public void whenUsingReflectionGetInterfaces_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + List> interfaces = Arrays.asList(childClass2.getClass().getInterfaces()); + + assertTrue(interfaces.contains(ChildInterface2.class)); + } + + @Test + public void whenUsingReflectionGetInterfaces_thenParentInterfaceIsNotFound() { + + ChildClass2 childClass2 = new ChildClass2(); + List> interfaces = Arrays.asList(childClass2.getClass().getInterfaces()); + + assertFalse(interfaces.contains(MasterInterface.class)); + } + + @Test + public void whenUsingReflectionIsAssignableFrom_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(ChildInterface2.class.isAssignableFrom(childClass2.getClass())); + } + + @Test + public void whenUsingReflectionIsAssignableFrom_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(MasterInterface.class.isAssignableFrom(childClass2.getClass())); + } + + @Test + public void whenUsingReflectionIsInstance_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(ChildInterface2.class.isInstance(childClass2)); + } + + @Test + public void whenUsingReflectionIsInstance_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(MasterInterface.class.isInstance(childClass2)); + } + + @Test + public void whenUsingReflectionInstanceOf_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(childClass2 instanceof ChildInterface2); + } + + @Test + public void whenUsingReflectionInstanceOf_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(childClass2 instanceof MasterInterface); + } + + @Test + public void whenUsingCommons_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + List> interfaces = ClassUtils.getAllInterfaces(childClass2.getClass()); + + assertTrue(interfaces.contains(ChildInterface2.class)); + } + + @Test + public void whenUsingCommons_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + List> interfaces = ClassUtils.getAllInterfaces(childClass2.getClass()); + + assertTrue(interfaces.contains(MasterInterface.class)); + } + + @Test + public void whenUsingReflections_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + Set> interfaces = reflections.get(ReflectionUtils.Interfaces.of(childClass2.getClass())); + + assertTrue(interfaces.contains(ChildInterface2.class)); + } + + @Test + public void whenUsingReflections_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + Set> interfaces = reflections.get(ReflectionUtils.Interfaces.of(childClass2.getClass())); + + assertTrue(interfaces.contains(MasterInterface.class)); + } +} From 94c02bac706bff804552da0dad8de72033988c47 Mon Sep 17 00:00:00 2001 From: HARDEMAN Sebastien Date: Wed, 7 Dec 2022 15:53:34 +0100 Subject: [PATCH 2/4] rework following Saajan Nagendra's review --- core-java-modules/core-java-lang-5/pom.xml | 9 +++++++-- .../{checkInterface => checkinterface}/ChildClass1.java | 2 +- .../{checkInterface => checkinterface}/ChildClass2.java | 2 +- .../ChildInterface1.java | 2 +- .../ChildInterface2.java | 2 +- .../{checkInterface => checkinterface}/MasterClass.java | 2 +- .../MasterInterface.java | 2 +- .../CheckInterfaceUnitTest.java | 6 +++++- 8 files changed, 18 insertions(+), 9 deletions(-) rename core-java-modules/core-java-lang-5/src/main/java/com/baeldung/{checkInterface => checkinterface}/ChildClass1.java (61%) rename core-java-modules/core-java-lang-5/src/main/java/com/baeldung/{checkInterface => checkinterface}/ChildClass2.java (61%) rename core-java-modules/core-java-lang-5/src/main/java/com/baeldung/{checkInterface => checkinterface}/ChildInterface1.java (63%) rename core-java-modules/core-java-lang-5/src/main/java/com/baeldung/{checkInterface => checkinterface}/ChildInterface2.java (63%) rename core-java-modules/core-java-lang-5/src/main/java/com/baeldung/{checkInterface => checkinterface}/MasterClass.java (61%) rename core-java-modules/core-java-lang-5/src/main/java/com/baeldung/{checkInterface => checkinterface}/MasterInterface.java (51%) rename core-java-modules/core-java-lang-5/src/test/java/com/baeldung/{checkInterface => checkinterface}/CheckInterfaceUnitTest.java (95%) diff --git a/core-java-modules/core-java-lang-5/pom.xml b/core-java-modules/core-java-lang-5/pom.xml index 549f307aee..767ebb6e35 100644 --- a/core-java-modules/core-java-lang-5/pom.xml +++ b/core-java-modules/core-java-lang-5/pom.xml @@ -14,6 +14,11 @@ 0.0.1-SNAPSHOT + + 3.12.0 + 0.10.2 + + core-java-lang-5 @@ -29,13 +34,13 @@ org.apache.commons commons-lang3 - 3.12.0 + ${commons-lang3.version} org.reflections reflections - 0.10.2 + ${reflections.version} diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass1.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/ChildClass1.java similarity index 61% rename from core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass1.java rename to core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/ChildClass1.java index 414f421da3..fb91223a97 100644 --- a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass1.java +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/ChildClass1.java @@ -1,4 +1,4 @@ -package com.baeldung.checkInterface; +package com.baeldung.checkinterface; public class ChildClass1 implements ChildInterface1 { diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass2.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/ChildClass2.java similarity index 61% rename from core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass2.java rename to core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/ChildClass2.java index 568c7b57c7..2d5958784d 100644 --- a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildClass2.java +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/ChildClass2.java @@ -1,4 +1,4 @@ -package com.baeldung.checkInterface; +package com.baeldung.checkinterface; public class ChildClass2 implements ChildInterface2 { diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface1.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/ChildInterface1.java similarity index 63% rename from core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface1.java rename to core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/ChildInterface1.java index 02f87d1901..8a2ad5f345 100644 --- a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface1.java +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/ChildInterface1.java @@ -1,4 +1,4 @@ -package com.baeldung.checkInterface; +package com.baeldung.checkinterface; public interface ChildInterface1 extends MasterInterface { diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface2.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/ChildInterface2.java similarity index 63% rename from core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface2.java rename to core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/ChildInterface2.java index 80a5915b27..cff662edf0 100644 --- a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/ChildInterface2.java +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/ChildInterface2.java @@ -1,4 +1,4 @@ -package com.baeldung.checkInterface; +package com.baeldung.checkinterface; public interface ChildInterface2 extends MasterInterface { diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterClass.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/MasterClass.java similarity index 61% rename from core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterClass.java rename to core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/MasterClass.java index 133e8bb0a7..29f3ed5fe8 100644 --- a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterClass.java +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/MasterClass.java @@ -1,4 +1,4 @@ -package com.baeldung.checkInterface; +package com.baeldung.checkinterface; public class MasterClass implements MasterInterface { diff --git a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterInterface.java b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/MasterInterface.java similarity index 51% rename from core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterInterface.java rename to core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/MasterInterface.java index 554816df4d..6aefb8b6e6 100644 --- a/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkInterface/MasterInterface.java +++ b/core-java-modules/core-java-lang-5/src/main/java/com/baeldung/checkinterface/MasterInterface.java @@ -1,4 +1,4 @@ -package com.baeldung.checkInterface; +package com.baeldung.checkinterface; public interface MasterInterface { diff --git a/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkInterface/CheckInterfaceUnitTest.java b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkinterface/CheckInterfaceUnitTest.java similarity index 95% rename from core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkInterface/CheckInterfaceUnitTest.java rename to core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkinterface/CheckInterfaceUnitTest.java index 3a1f8ff2b6..3accef0869 100644 --- a/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkInterface/CheckInterfaceUnitTest.java +++ b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkinterface/CheckInterfaceUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.checkInterface; +package com.baeldung.checkinterface; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -13,6 +13,10 @@ import org.junit.jupiter.api.Test; import org.reflections.ReflectionUtils; import org.reflections.Reflections; +import com.baeldung.checkinterface.ChildClass2; +import com.baeldung.checkinterface.ChildInterface2; +import com.baeldung.checkinterface.MasterInterface; + public class CheckInterfaceUnitTest { protected static Reflections reflections; From 90e29a27345f55dfd7014b29c07791b0c8645f6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?HARDEMAN=20S=C3=A9bastien?= Date: Wed, 18 Jan 2023 10:39:54 +0100 Subject: [PATCH 3/4] case correction --- .../CheckInterfaceUnitTest.java | 258 +++++++++--------- 1 file changed, 127 insertions(+), 131 deletions(-) diff --git a/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkinterface/CheckInterfaceUnitTest.java b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkinterface/CheckInterfaceUnitTest.java index 3accef0869..ab607322d1 100644 --- a/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkinterface/CheckInterfaceUnitTest.java +++ b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkinterface/CheckInterfaceUnitTest.java @@ -1,131 +1,127 @@ -package com.baeldung.checkinterface; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.util.Arrays; -import java.util.List; -import java.util.Set; - -import org.apache.commons.lang3.ClassUtils; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.reflections.ReflectionUtils; -import org.reflections.Reflections; - -import com.baeldung.checkinterface.ChildClass2; -import com.baeldung.checkinterface.ChildInterface2; -import com.baeldung.checkinterface.MasterInterface; - -public class CheckInterfaceUnitTest { - - protected static Reflections reflections; - - @BeforeAll - public static void initializeReflectionsLibrary() { - - reflections = new Reflections("com.baeldung.checkInterface"); - } - - @Test - public void whenUsingReflectionGetInterfaces_thenDirectlyImplementedInterfaceIsFound() { - - ChildClass2 childClass2 = new ChildClass2(); - List> interfaces = Arrays.asList(childClass2.getClass().getInterfaces()); - - assertTrue(interfaces.contains(ChildInterface2.class)); - } - - @Test - public void whenUsingReflectionGetInterfaces_thenParentInterfaceIsNotFound() { - - ChildClass2 childClass2 = new ChildClass2(); - List> interfaces = Arrays.asList(childClass2.getClass().getInterfaces()); - - assertFalse(interfaces.contains(MasterInterface.class)); - } - - @Test - public void whenUsingReflectionIsAssignableFrom_thenDirectlyImplementedInterfaceIsFound() { - - ChildClass2 childClass2 = new ChildClass2(); - - assertTrue(ChildInterface2.class.isAssignableFrom(childClass2.getClass())); - } - - @Test - public void whenUsingReflectionIsAssignableFrom_thenParentInterfaceIsFound() { - - ChildClass2 childClass2 = new ChildClass2(); - - assertTrue(MasterInterface.class.isAssignableFrom(childClass2.getClass())); - } - - @Test - public void whenUsingReflectionIsInstance_thenDirectlyImplementedInterfaceIsFound() { - - ChildClass2 childClass2 = new ChildClass2(); - - assertTrue(ChildInterface2.class.isInstance(childClass2)); - } - - @Test - public void whenUsingReflectionIsInstance_thenParentInterfaceIsFound() { - - ChildClass2 childClass2 = new ChildClass2(); - - assertTrue(MasterInterface.class.isInstance(childClass2)); - } - - @Test - public void whenUsingReflectionInstanceOf_thenDirectlyImplementedInterfaceIsFound() { - - ChildClass2 childClass2 = new ChildClass2(); - - assertTrue(childClass2 instanceof ChildInterface2); - } - - @Test - public void whenUsingReflectionInstanceOf_thenParentInterfaceIsFound() { - - ChildClass2 childClass2 = new ChildClass2(); - - assertTrue(childClass2 instanceof MasterInterface); - } - - @Test - public void whenUsingCommons_thenDirectlyImplementedInterfaceIsFound() { - - ChildClass2 childClass2 = new ChildClass2(); - List> interfaces = ClassUtils.getAllInterfaces(childClass2.getClass()); - - assertTrue(interfaces.contains(ChildInterface2.class)); - } - - @Test - public void whenUsingCommons_thenParentInterfaceIsFound() { - - ChildClass2 childClass2 = new ChildClass2(); - List> interfaces = ClassUtils.getAllInterfaces(childClass2.getClass()); - - assertTrue(interfaces.contains(MasterInterface.class)); - } - - @Test - public void whenUsingReflections_thenDirectlyImplementedInterfaceIsFound() { - - ChildClass2 childClass2 = new ChildClass2(); - Set> interfaces = reflections.get(ReflectionUtils.Interfaces.of(childClass2.getClass())); - - assertTrue(interfaces.contains(ChildInterface2.class)); - } - - @Test - public void whenUsingReflections_thenParentInterfaceIsFound() { - - ChildClass2 childClass2 = new ChildClass2(); - Set> interfaces = reflections.get(ReflectionUtils.Interfaces.of(childClass2.getClass())); - - assertTrue(interfaces.contains(MasterInterface.class)); - } -} +package com.baeldung.checkinterface; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang3.ClassUtils; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.reflections.ReflectionUtils; +import org.reflections.Reflections; + +public class CheckInterfaceUnitTest { + + protected static Reflections reflections; + + @BeforeAll + public static void initializeReflectionsLibrary() { + + reflections = new Reflections("com.baeldung.checkinterface"); + } + + @Test + public void whenUsingReflectionGetInterfaces_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + List> interfaces = Arrays.asList(childClass2.getClass().getInterfaces()); + + assertTrue(interfaces.contains(ChildInterface2.class)); + } + + @Test + public void whenUsingReflectionGetInterfaces_thenParentInterfaceIsNotFound() { + + ChildClass2 childClass2 = new ChildClass2(); + List> interfaces = Arrays.asList(childClass2.getClass().getInterfaces()); + + assertFalse(interfaces.contains(MasterInterface.class)); + } + + @Test + public void whenUsingReflectionIsAssignableFrom_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(ChildInterface2.class.isAssignableFrom(childClass2.getClass())); + } + + @Test + public void whenUsingReflectionIsAssignableFrom_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(MasterInterface.class.isAssignableFrom(childClass2.getClass())); + } + + @Test + public void whenUsingReflectionIsInstance_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(ChildInterface2.class.isInstance(childClass2)); + } + + @Test + public void whenUsingReflectionIsInstance_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(MasterInterface.class.isInstance(childClass2)); + } + + @Test + public void whenUsingReflectionInstanceOf_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(childClass2 instanceof ChildInterface2); + } + + @Test + public void whenUsingReflectionInstanceOf_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + + assertTrue(childClass2 instanceof MasterInterface); + } + + @Test + public void whenUsingCommons_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + List> interfaces = ClassUtils.getAllInterfaces(childClass2.getClass()); + + assertTrue(interfaces.contains(ChildInterface2.class)); + } + + @Test + public void whenUsingCommons_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + List> interfaces = ClassUtils.getAllInterfaces(childClass2.getClass()); + + assertTrue(interfaces.contains(MasterInterface.class)); + } + + @Test + public void whenUsingReflections_thenDirectlyImplementedInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + Set> interfaces = reflections.get(ReflectionUtils.Interfaces.of(childClass2.getClass())); + + assertTrue(interfaces.contains(ChildInterface2.class)); + } + + @Test + public void whenUsingReflections_thenParentInterfaceIsFound() { + + ChildClass2 childClass2 = new ChildClass2(); + Set> interfaces = reflections.get(ReflectionUtils.Interfaces.of(childClass2.getClass())); + + assertTrue(interfaces.contains(MasterInterface.class)); + } +} From 1fe0aab8227e68dcc3e7811092dd34c1ea8c5af3 Mon Sep 17 00:00:00 2001 From: sebx59 Date: Tue, 31 Jan 2023 09:23:52 +0100 Subject: [PATCH 4/4] updated Unit test to add assertions examples --- .../CheckInterfaceUnitTest.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkinterface/CheckInterfaceUnitTest.java b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkinterface/CheckInterfaceUnitTest.java index ab607322d1..dcbbb7eb05 100644 --- a/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkinterface/CheckInterfaceUnitTest.java +++ b/core-java-modules/core-java-lang-5/src/test/java/com/baeldung/checkinterface/CheckInterfaceUnitTest.java @@ -1,9 +1,11 @@ package com.baeldung.checkinterface; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Arrays; +import java.util.HashSet; import java.util.List; import java.util.Set; @@ -29,6 +31,7 @@ public class CheckInterfaceUnitTest { ChildClass2 childClass2 = new ChildClass2(); List> interfaces = Arrays.asList(childClass2.getClass().getInterfaces()); + assertEquals(1, interfaces.size()); assertTrue(interfaces.contains(ChildInterface2.class)); } @@ -41,6 +44,15 @@ public class CheckInterfaceUnitTest { assertFalse(interfaces.contains(MasterInterface.class)); } + @Test + public void whenUsingReflectionGetInterfacesRecursively_thenParentInterfaceIsFound() { + + Set> interfaces = getAllExtendedOrImplementedInterfacesRecursively(ChildClass2.class); + + assertTrue(interfaces.contains(ChildInterface2.class)); + assertTrue(interfaces.contains(MasterInterface.class)); + } + @Test public void whenUsingReflectionIsAssignableFrom_thenDirectlyImplementedInterfaceIsFound() { @@ -124,4 +136,19 @@ public class CheckInterfaceUnitTest { assertTrue(interfaces.contains(MasterInterface.class)); } + + static Set> getAllExtendedOrImplementedInterfacesRecursively(Class clazz) { + + Set> res = new HashSet>(); + Class[] interfaces = clazz.getInterfaces(); + + if (interfaces.length > 0) { + res.addAll(Arrays.asList(interfaces)); + for (Class interfaze : interfaces) { + res.addAll(getAllExtendedOrImplementedInterfacesRecursively(interfaze)); + } + } + + return res; + } }