diff --git a/delegation/pom.xml b/delegation/pom.xml
index 47dbc3844..08b7df748 100644
--- a/delegation/pom.xml
+++ b/delegation/pom.xml
@@ -41,5 +41,11 @@
junit
test
+
+ com.github.stefanbirkner
+ system-rules
+ 1.14.0
+ test
+
\ No newline at end of file
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/Controller.java b/delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java
similarity index 55%
rename from delegation/src/main/java/com/iluwatar/delegation/simple/Controller.java
rename to delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java
index 487b827eb..e58acd0c3 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/Controller.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/AbstractPrinterController.java
@@ -1,10 +1,10 @@
package com.iluwatar.delegation.simple;
-public abstract class Controller {
+public abstract class AbstractPrinterController implements Printer{
private Printer printer;
- public Controller(Printer printer) {
+ public AbstractPrinterController(Printer printer) {
this.printer = printer;
}
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java b/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java
index 5fb8742a3..f282be128 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java
@@ -1,6 +1,6 @@
package com.iluwatar.delegation.simple;
-public class PrinterController extends Controller implements Printer {
+public class PrinterController extends AbstractPrinterController {
public PrinterController(Printer printer) {
super(printer);
diff --git a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java
index 7668637f7..6dc2e4878 100644
--- a/delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java
+++ b/delegation/src/main/java/com/iluwatar/delegation/simple/printers/App.java
@@ -1,6 +1,6 @@
package com.iluwatar.delegation.simple.printers;
-import com.iluwatar.delegation.simple.Printer;
+import com.iluwatar.delegation.simple.AbstractPrinterController;
import com.iluwatar.delegation.simple.PrinterController;
public class App {
@@ -8,13 +8,9 @@ public class App {
public static final String MESSAGE_TO_PRINT = "hello world";
public static void main(String[] args) {
- Printer hpPrinter = new HPPrinter();
- Printer canonPrinter = new CanonPrinter();
- Printer epsonPrinter = new EpsonPrinter();
-
- PrinterController hpPrinterController = new PrinterController(hpPrinter);
- PrinterController canonPrinterController = new PrinterController(canonPrinter);
- PrinterController epsonPrinterController = new PrinterController(epsonPrinter);
+ AbstractPrinterController hpPrinterController = new PrinterController(new HPPrinter());
+ AbstractPrinterController canonPrinterController = new PrinterController(new CanonPrinter());
+ AbstractPrinterController epsonPrinterController = new PrinterController(new EpsonPrinter());
hpPrinterController.print(MESSAGE_TO_PRINT);
canonPrinterController.print(MESSAGE_TO_PRINT);
diff --git a/delegation/src/test/java/com/iluwatar/delegation/simple/DelegateTest.java b/delegation/src/test/java/com/iluwatar/delegation/simple/DelegateTest.java
new file mode 100644
index 000000000..db8cb4262
--- /dev/null
+++ b/delegation/src/test/java/com/iluwatar/delegation/simple/DelegateTest.java
@@ -0,0 +1,43 @@
+package com.iluwatar.delegation.simple;
+
+import com.iluwatar.delegation.simple.printers.CanonPrinter;
+import com.iluwatar.delegation.simple.printers.EpsonPrinter;
+import com.iluwatar.delegation.simple.printers.HPPrinter;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.contrib.java.lang.system.SystemOutRule;
+
+import static org.junit.Assert.assertEquals;
+
+public class DelegateTest {
+
+ private static final String MESSAGE = "Test Message Printed";
+
+ @Rule
+ public final SystemOutRule systemOutRule = new SystemOutRule().enableLog();
+
+ @Test
+ public void testCanonPrinter() throws Exception {
+ AbstractPrinterController abstractController = new PrinterController(new CanonPrinter());
+ abstractController.print(MESSAGE);
+
+ assertEquals("Canon Printer : Test Message Printed\n", systemOutRule.getLog());
+ }
+
+ @Test
+ public void testHPPrinter() throws Exception {
+ AbstractPrinterController abstractController = new PrinterController(new HPPrinter());
+ abstractController.print(MESSAGE);
+
+ assertEquals("HP Printer : Test Message Printed\n", systemOutRule.getLog());
+ }
+
+ @Test
+ public void testEpsonPrinter() throws Exception {
+ AbstractPrinterController abstractController = new PrinterController(new EpsonPrinter());
+ abstractController.print(MESSAGE);
+
+ assertEquals("Epson Printer : Test Message Printed\n", systemOutRule.getLog());
+ }
+
+}