From 393b60fdc9cb0e8c19be13d5091cb78ae9e96b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Jas=CC=81tak?= Date: Thu, 12 Jan 2017 10:54:36 +0100 Subject: [PATCH] Corrections in calculating interfaces to be implemented by facade --- .../pl/ais/commons/bean/facade/Facade.java | 5 +-- .../bean/domain/model/DefaultName.java | 28 ++++++++++++++++ .../ais/commons/bean/domain/model/Name.java | 13 ++++++++ .../bean/facade/FacadeExpectations.java | 32 +++++++++++++++++++ 4 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 src/test/java/pl/ais/commons/bean/domain/model/DefaultName.java create mode 100644 src/test/java/pl/ais/commons/bean/domain/model/Name.java create mode 100644 src/test/java/pl/ais/commons/bean/facade/FacadeExpectations.java diff --git a/src/main/java/pl/ais/commons/bean/facade/Facade.java b/src/main/java/pl/ais/commons/bean/facade/Facade.java index 7f1229c..620c606 100644 --- a/src/main/java/pl/ais/commons/bean/facade/Facade.java +++ b/src/main/java/pl/ais/commons/bean/facade/Facade.java @@ -45,12 +45,13 @@ private static Class determineSuperclass(@Nonnull final Class public static S over(@Nonnull final T instance, final TraverseListener listener) { // Create CGLIB Enhancer using the instance class as superclass of the proxy we intend to create, ... - final Class superclass = determineSuperclass((Class) instance.getClass()); + final Class instanceClass = (Class) instance.getClass(); + final Class superclass = determineSuperclass(instanceClass); final Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(superclass); // ... specify set of interfaces to be implemented by the proxy, ... - enhancer.setInterfaces(determineInterfaces(superclass)); + enhancer.setInterfaces(determineInterfaces(instanceClass)); // ... define the type of callback to be used, ... enhancer.setCallbackType(DelegatingMethodInterceptor.class); diff --git a/src/test/java/pl/ais/commons/bean/domain/model/DefaultName.java b/src/test/java/pl/ais/commons/bean/domain/model/DefaultName.java new file mode 100644 index 0000000..753d199 --- /dev/null +++ b/src/test/java/pl/ais/commons/bean/domain/model/DefaultName.java @@ -0,0 +1,28 @@ +package pl.ais.commons.bean.domain.model; + +/** + * @author Warlock, AIS.PL + * @since 1.3.3 + */ +public final class DefaultName implements Name { + + private final String firstName; + + private final String lastname; + + public DefaultName(final String firstName, final String lastname) { + this.firstName = firstName; + this.lastname = lastname; + } + + @Override + public String getFirstName() { + return firstName; + } + + @Override + public String getLastName() { + return lastname; + } + +} diff --git a/src/test/java/pl/ais/commons/bean/domain/model/Name.java b/src/test/java/pl/ais/commons/bean/domain/model/Name.java new file mode 100644 index 0000000..71839fe --- /dev/null +++ b/src/test/java/pl/ais/commons/bean/domain/model/Name.java @@ -0,0 +1,13 @@ +package pl.ais.commons.bean.domain.model; + +/** + * @author Warlock, AIS.PL + * @since 1.3.3 + */ +public interface Name { + + String getFirstName(); + + String getLastName(); + +} diff --git a/src/test/java/pl/ais/commons/bean/facade/FacadeExpectations.java b/src/test/java/pl/ais/commons/bean/facade/FacadeExpectations.java new file mode 100644 index 0000000..835ba93 --- /dev/null +++ b/src/test/java/pl/ais/commons/bean/facade/FacadeExpectations.java @@ -0,0 +1,32 @@ +package pl.ais.commons.bean.facade; + +import org.junit.Test; +import pl.ais.commons.bean.domain.model.DefaultName; +import pl.ais.commons.bean.domain.model.Name; + +import static org.junit.Assert.fail; + +/** + * Verifies {@link Facade} expectations. + * + * @author Warlock, AIS.PL + * @since 1.3.3 + */ +public class FacadeExpectations { + + /** + * Verifies if facade created for final class instance, implementing some i-face, will implement same i-face itself. + */ + @Test + public void shouldBeAssignableToImplementedIfaceForFinalClass() { + final Name name = new DefaultName("John", "Smith"); + final TraverseListener traverseListener = new TraverseListener(); + + try { + final Name facade = Facade.over(name, traverseListener); + } catch (final ClassCastException exception) { + fail("Created facade does not implement desired i-face."); + } + } + +}