diff --git a/pom.xml b/pom.xml index 4bdbe4f..ee0400b 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.google.pdsl pdsl - 1.8.2 + 1.8.3-SNAPSHOT pdsl http://www.github.com/google/polymorphicDSL diff --git a/src/main/java/com/pdsl/executors/DefaultPolymorphicDslTestExecutor.java b/src/main/java/com/pdsl/executors/DefaultPolymorphicDslTestExecutor.java index f5aab1b..1e96acc 100644 --- a/src/main/java/com/pdsl/executors/DefaultPolymorphicDslTestExecutor.java +++ b/src/main/java/com/pdsl/executors/DefaultPolymorphicDslTestExecutor.java @@ -1,6 +1,5 @@ package com.pdsl.executors; -import com.pdsl.logging.AnsiTerminalColorHelper; import com.pdsl.logging.PdslThreadSafeOutputStream; import com.pdsl.reports.DefaultTestResult; import com.pdsl.reports.MetadataTestRunResults; @@ -9,25 +8,17 @@ import com.pdsl.specifications.DefaultPhrase; import com.pdsl.specifications.FilteredPhrase; import com.pdsl.specifications.Phrase; -import com.pdsl.specifications.PolymorphicDslTransformationException; import com.pdsl.testcases.SharedTestCase; import com.pdsl.testcases.SharedTestSuite.SharedTestCaseWithInterpreter; import com.pdsl.testcases.TestCase; import com.pdsl.testcases.TestSection; - -import java.util.stream.Collectors; - import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.ParseTreeListener; import org.antlr.v4.runtime.tree.ParseTreeVisitor; import org.antlr.v4.runtime.tree.ParseTreeWalker; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.Charset; import java.util.*; +import java.util.concurrent.CopyOnWriteArrayList; /** * An executor that runs PDSL tests create from a TestCaseFactory. @@ -40,8 +31,9 @@ public class DefaultPolymorphicDslTestExecutor implements TraceableTestRunExecutor, ActivePhraseObservable { private final ParseTreeWalker walker = new ParseTreeWalker(); - private static final Charset DEFAULT_CHARSET = Charset.defaultCharset(); - private final List activePhraseObservers = new ArrayList<>(); + // In concurrent test cases an observer might be added to the collection while it's being read from + // Use a type that is safe for concurrency. + private final List activePhraseObservers = new CopyOnWriteArrayList<>(); /** * Constructs a DefaultPolymorphicDslTestExecutor with a default ColorizedObserver. diff --git a/src/main/java/com/pdsl/executors/ExecutorObserver.java b/src/main/java/com/pdsl/executors/ExecutorObserver.java index 67c2f6a..838dabd 100644 --- a/src/main/java/com/pdsl/executors/ExecutorObserver.java +++ b/src/main/java/com/pdsl/executors/ExecutorObserver.java @@ -1,7 +1,6 @@ package com.pdsl.executors; import com.pdsl.reports.MetadataTestRunResults; -import com.pdsl.specifications.Phrase; import com.pdsl.testcases.SharedTestCase; import com.pdsl.testcases.TestCase; import com.pdsl.testcases.TestSection; @@ -52,8 +51,8 @@ default void onAfterPhrase(ParseTreeListener listener, ParseTreeWalker walker, TestSection testSection) {} /** Notifies the implementer of a phrase that has completed execution with a visitor WITHOUT an exception. */ - void onAfterPhrase(ParseTreeVisitor visitor, - TestSection testSection); + default void onAfterPhrase(ParseTreeVisitor visitor, + TestSection testSection) {} /** Notifies the implementer of a phrase that has failed during excecution with a listener. */ default void onPhraseFailure(ParseTreeListener listener,