diff --git a/src/main/java/edu/luc/cs/consoleapp/MainLeaky.java b/src/main/java/edu/luc/cs/consoleapp/MainLeaky.java index 4dd6eee..45e8757 100644 --- a/src/main/java/edu/luc/cs/consoleapp/MainLeaky.java +++ b/src/main/java/edu/luc/cs/consoleapp/MainLeaky.java @@ -39,7 +39,8 @@ public static void main(final String[] args) { } final var input = new Scanner(System.in).useDelimiter("(?U)[^\\p{Alpha}0-9']+"); - final var result = new LeakyQueue(lastNWords, input).process(); + final var coreLogic = new LeakyQueue(lastNWords, input); + final var result = coreLogic.process(); result.forEach( value -> { @@ -55,6 +56,8 @@ public static void main(final String[] args) { * A sliding window queue that retains the last N elements. * This component is independent of the user interface and can be tested independently. * Nevertheless, it violates an important nonfunctional requirement: it leaks memory. + * In addition, it violates the functional requirement of + * interactively responding to each input. */ static class LeakyQueue { diff --git a/src/test/java/edu/luc/cs/consoleapp/OutputToList.java b/src/test/java/edu/luc/cs/consoleapp/OutputToList.java new file mode 100644 index 0000000..b4259eb --- /dev/null +++ b/src/test/java/edu/luc/cs/consoleapp/OutputToList.java @@ -0,0 +1,17 @@ +package edu.luc.cs.consoleapp; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; + +class OutputToList implements OutputHandler { + + final List> result = new ArrayList<>(); + + @Override + public void accept(final Queue value) { + final var snapshot = new LinkedList<>(value); + result.add(snapshot); + } +} \ No newline at end of file