This is an automated email from the ASF dual-hosted git repository.

rec pushed a commit to branch 
feature/209-Ability-to-override-validator-for-a-test
in repository https://gitbox.apache.org/repos/asf/uima-uimafit.git

commit fc02420bd920ab8bb7599b977d816fcb5f3e6cc1
Author: Richard Eckart de Castilho <[email protected]>
AuthorDate: Thu Nov 10 18:32:20 2022 +0100

    Issue #209: Ability to override validator for a test
    
    - Allow settings a default validator for all tests and a specific validator 
per test
---
 .../apache/uima/fit/testing/junit/ManagedCas.java  | 31 +++++++++++++++++-----
 .../apache/uima/fit/testing/junit/ManagedJCas.java | 29 ++++++++++++++++----
 2 files changed, 49 insertions(+), 11 deletions(-)

diff --git 
a/uimafit-junit/src/main/java/org/apache/uima/fit/testing/junit/ManagedCas.java 
b/uimafit-junit/src/main/java/org/apache/uima/fit/testing/junit/ManagedCas.java
index 0d3a063..cfb50aa 100644
--- 
a/uimafit-junit/src/main/java/org/apache/uima/fit/testing/junit/ManagedCas.java
+++ 
b/uimafit-junit/src/main/java/org/apache/uima/fit/testing/junit/ManagedCas.java
@@ -54,7 +54,8 @@ public final class ManagedCas implements TestWatcher, 
AfterTestExecutionCallback
 
   private final Set<CAS> managedCases = synchronizedSet(newSetFromMap(new 
WeakHashMap<>()));
 
-  private Validator validator = new Validator.Builder().build();
+  private Validator defaultValidator = new Validator.Builder().build();
+  private Validator validator = null;
 
   /**
    * Provides a CAS with an auto-detected type system.
@@ -103,8 +104,12 @@ public final class ManagedCas implements TestWatcher, 
AfterTestExecutionCallback
 
   @Override
   public void afterTestExecution(ExtensionContext context) throws Exception {
-    managedCases.forEach(this::assertValid);
-    managedCases.forEach(CAS::reset);
+    try {
+      managedCases.forEach(this::assertValid);
+      managedCases.forEach(CAS::reset);
+    } finally {
+      this.validator = null;
+    }
   }
 
   public ManagedCas skipValidation() {
@@ -112,18 +117,32 @@ public final class ManagedCas implements TestWatcher, 
AfterTestExecutionCallback
     return this;
   }
 
+  public ManagedCas withDefaultValidator(Validator aValidator) {
+    this.defaultValidator = aValidator;
+    return this;
+  }
+
   public ManagedCas withValidator(Validator aValidator) {
     this.validator = aValidator;
     return this;
   }
 
-  private void assertValid(CAS aJCas) {
-    if (validator == null) {
+  private Validator getValidator() {
+    if (validator != null) {
+      return validator;
+    }
+
+    return defaultValidator;
+  }
+
+  private void assertValid(CAS aCas) {
+    Validator activeValidator = getValidator();
+    if (getValidator() == null) {
       return;
     }
 
     try {
-      ValidationSummary summary = validator.check(aJCas);
+      ValidationSummary summary = activeValidator.check(aCas);
 
       String messageBuffer = summary.getResults().stream()
               .filter(r -> r.getSeverity().isEquallyOrMoreSevereThan(ERROR))
diff --git 
a/uimafit-junit/src/main/java/org/apache/uima/fit/testing/junit/ManagedJCas.java
 
b/uimafit-junit/src/main/java/org/apache/uima/fit/testing/junit/ManagedJCas.java
index 2d34514..fb2c0d9 100644
--- 
a/uimafit-junit/src/main/java/org/apache/uima/fit/testing/junit/ManagedJCas.java
+++ 
b/uimafit-junit/src/main/java/org/apache/uima/fit/testing/junit/ManagedJCas.java
@@ -55,7 +55,8 @@ public final class ManagedJCas
 
   private final Set<JCas> managedCases = synchronizedSet(newSetFromMap(new 
WeakHashMap<>()));
 
-  private Validator validator = new Validator.Builder().build();
+  private Validator defaultValidator = new Validator.Builder().build();
+  private Validator validator = null;
 
   /**
    * Provides a JCas with an auto-detected type system.
@@ -104,8 +105,12 @@ public final class ManagedJCas
 
   @Override
   public void afterTestExecution(ExtensionContext context) throws Exception {
-    managedCases.forEach(this::assertValid);
-    managedCases.forEach(JCas::reset);
+    try {
+      managedCases.forEach(this::assertValid);
+      managedCases.forEach(JCas::reset);
+    } finally {
+      this.validator = null;
+    }
   }
 
   public ManagedJCas skipValidation() {
@@ -113,18 +118,32 @@ public final class ManagedJCas
     return this;
   }
 
+  public ManagedJCas withDefaultValidator(Validator aValidator) {
+    this.defaultValidator = aValidator;
+    return this;
+  }
+
   public ManagedJCas withValidator(Validator aValidator) {
     this.validator = aValidator;
     return this;
   }
 
+  private Validator getValidator() {
+    if (validator != null) {
+      return validator;
+    }
+
+    return defaultValidator;
+  }
+
   private void assertValid(JCas aJCas) {
-    if (validator == null) {
+    Validator activeValidator = getValidator();
+    if (getValidator() == null) {
       return;
     }
 
     try {
-      ValidationSummary summary = validator.check(aJCas);
+      ValidationSummary summary = activeValidator.check(aJCas);
 
       String messageBuffer = summary.getResults().stream()
               .filter(r -> r.getSeverity().isEquallyOrMoreSevereThan(ERROR))

Reply via email to