diff --git a/pom.xml b/pom.xml
index 9ed37aa..69688d2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -108,15 +108,12 @@
- **/*ExampleRunner*
**/AppCommandLineRunner*
**/ExamplesCommandLineRunner*
**/ProducerConsumerExampleRunner*
**/Consumer*
**/JavaPatternsAndConstructsApplication*
**/MainWindow*
- **/Messages*
- **/ApplicationProperties*
**/HyperlinkMouseListener*
**/ObservableAbstract*
diff --git a/src/main/java/com/penapereira/example/constructs/producerconsumer/Producer.java b/src/main/java/com/penapereira/example/constructs/producerconsumer/Producer.java
index 20e174a..8295a34 100644
--- a/src/main/java/com/penapereira/example/constructs/producerconsumer/Producer.java
+++ b/src/main/java/com/penapereira/example/constructs/producerconsumer/Producer.java
@@ -16,6 +16,8 @@ public void run() {
try {
queue.put(i);
} catch (InterruptedException finish) {
+ Thread.currentThread().interrupt();
+ return;
}
}
}
diff --git a/src/test/java/com/penapereira/example/constructs/app/ui/GuiAppenderTests.java b/src/test/java/com/penapereira/example/constructs/app/ui/GuiAppenderTests.java
index 4d58ec2..dc2b178 100644
--- a/src/test/java/com/penapereira/example/constructs/app/ui/GuiAppenderTests.java
+++ b/src/test/java/com/penapereira/example/constructs/app/ui/GuiAppenderTests.java
@@ -1,10 +1,14 @@
package com.penapereira.example.constructs.app.ui;
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.awt.EventQueue;
import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.LoggingEvent;
@@ -25,4 +29,21 @@ void appendsMessageToOutputSink() throws Exception {
assertEquals("test message" + System.lineSeparator(), output.toString());
}
+
+ @Test
+ void attachesItselfToRootLoggerWhenInitialized() throws Exception {
+ GuiAppender appender = new GuiAppender(text -> {});
+ ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory
+ .getLogger(Logger.ROOT_LOGGER_NAME);
+ assertFalse(root.isAttached(appender));
+ try {
+ appender.afterPropertiesSet();
+
+ assertTrue(appender.isStarted());
+ assertTrue(root.isAttached(appender));
+ } finally {
+ root.detachAppender(appender);
+ appender.stop();
+ }
+ }
}
diff --git a/src/test/java/com/penapereira/example/constructs/chainofresponsibility/ChainTests.java b/src/test/java/com/penapereira/example/constructs/chainofresponsibility/ChainTests.java
index ae4b36d..cf59a14 100644
--- a/src/test/java/com/penapereira/example/constructs/chainofresponsibility/ChainTests.java
+++ b/src/test/java/com/penapereira/example/constructs/chainofresponsibility/ChainTests.java
@@ -17,4 +17,21 @@ void chainProcessesNumbers() {
assertEquals("zero", negative.handle(0));
assertEquals("positive", negative.handle(5));
}
+
+ @Test
+ void requestNobodyHandlesIsReportedAsUnhandled() {
+ Handler negative = new NegativeHandler();
+ Handler zero = new ZeroHandler();
+ negative.setNext(zero);
+
+ assertEquals("unhandled", negative.handle(5));
+ }
+
+ @Test
+ void lastHandlerWithoutNextReturnsUnhandled() {
+ Handler positive = new PositiveHandler();
+
+ assertEquals("positive", positive.handle(1));
+ assertEquals("unhandled", positive.handle(-1));
+ }
}
diff --git a/src/test/java/com/penapereira/example/constructs/factory/FactoryTests.java b/src/test/java/com/penapereira/example/constructs/factory/FactoryTests.java
index e77b299..7186594 100644
--- a/src/test/java/com/penapereira/example/constructs/factory/FactoryTests.java
+++ b/src/test/java/com/penapereira/example/constructs/factory/FactoryTests.java
@@ -12,4 +12,11 @@ void factoryCreatesConcreteProducts() {
assertEquals("Concrete Product A", a.name());
assertEquals("Concrete Product B", b.name());
}
+
+ @Test
+ void factoryRejectsUnknownType() {
+ ProductFactory factory = new ProductFactory();
+ IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () -> factory.createProduct("C"));
+ assertEquals("Unknown type: C", ex.getMessage());
+ }
}
diff --git a/src/test/java/com/penapereira/example/constructs/producerconsumer/ProducerTests.java b/src/test/java/com/penapereira/example/constructs/producerconsumer/ProducerTests.java
index f95e11e..6267953 100644
--- a/src/test/java/com/penapereira/example/constructs/producerconsumer/ProducerTests.java
+++ b/src/test/java/com/penapereira/example/constructs/producerconsumer/ProducerTests.java
@@ -20,4 +20,21 @@ void producerAddsElements() throws InterruptedException {
assertEquals(2, queue.take());
assertEquals(3, queue.take());
}
+
+ @Test
+ void producerStopsWhenInterrupted() throws InterruptedException {
+ BlockingQueue queue = new LinkedBlockingDeque<>(1);
+ Thread t = new Thread(new Producer(queue));
+ t.start();
+ while (queue.isEmpty()) {
+ Thread.onSpinWait();
+ }
+
+ t.interrupt();
+ t.join(5_000);
+
+ assertFalse(t.isAlive());
+ assertEquals(1, queue.size());
+ assertEquals(1, queue.take());
+ }
}