diff options
Diffstat (limited to 'poi-excelant/src/poi-ant-contrib/java/Junit5Progress.java')
-rw-r--r-- | poi-excelant/src/poi-ant-contrib/java/Junit5Progress.java | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/poi-excelant/src/poi-ant-contrib/java/Junit5Progress.java b/poi-excelant/src/poi-ant-contrib/java/Junit5Progress.java new file mode 100644 index 0000000000..8e87ef064f --- /dev/null +++ b/poi-excelant/src/poi-ant-contrib/java/Junit5Progress.java @@ -0,0 +1,99 @@ +/* ==================================================================== +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==================================================================== */ + +import java.io.PrintStream; +import java.time.Duration; +import java.time.Instant; +import java.util.Optional; +import java.util.concurrent.atomic.AtomicInteger; + +import org.junit.platform.engine.TestExecutionResult; +import org.junit.platform.launcher.TestExecutionListener; +import org.junit.platform.launcher.TestIdentifier; + +/** + * Custom listener class for Ants junitlauncher, because it chomps the important running details + * + * @see <a href="https://bz.apache.org/bugzilla/show_bug.cgi?id=64836">Bug 64836 - junitlaucher poor summary</a> + **/ +public class Junit5Progress implements TestExecutionListener { + private final AtomicInteger numSkippedInTestSet = new AtomicInteger(); + private final AtomicInteger numAbortedInTestSet = new AtomicInteger(); + private final AtomicInteger numSucceededInTestSet = new AtomicInteger(); + private final AtomicInteger numFailedInTestSet = new AtomicInteger(); + private Instant testSetStartTime; + + final PrintStream out; + + public Junit5Progress() { + this.out = System.out; + } + + private void resetCountsForNewTestSet() { + this.numSkippedInTestSet.set(0); + this.numAbortedInTestSet.set(0); + this.numSucceededInTestSet.set(0); + this.numFailedInTestSet.set(0); + this.testSetStartTime = Instant.now(); + } + + @Override + public void executionStarted(TestIdentifier testIdentifier) { + Optional<String> parentId = testIdentifier.getParentId(); + if (parentId.isPresent() && parentId.get().indexOf('/') < 0) { + println("\nRunning " + testIdentifier.getLegacyReportingName()); + resetCountsForNewTestSet(); + } + } + + @Override + public void executionSkipped(TestIdentifier testIdentifier, String reason) { + this.numSkippedInTestSet.incrementAndGet(); + } + + @Override + public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult testExecutionResult) { + Optional<String> parentId = testIdentifier.getParentId(); + if (parentId.isPresent() && parentId.get().indexOf('/') < 0) { + int totalTestsInClass = this.numSucceededInTestSet.get() + this.numAbortedInTestSet.get() + this.numFailedInTestSet.get() + + this.numSkippedInTestSet.get(); + Duration duration = Duration.between(this.testSetStartTime, Instant.now()); + double numSeconds = (double) duration.toMillis() / 1_000; + String summary = String.format("Tests run: %d, Failures: %d, Aborted: %d, Skipped: %d, Time elapsed: %f sec", totalTestsInClass, + this.numFailedInTestSet.get(), this.numAbortedInTestSet.get(), this.numSkippedInTestSet.get(), numSeconds); + println(summary); + } else if (testIdentifier.isTest()) { + switch (testExecutionResult.getStatus()) { + case SUCCESSFUL: + this.numSucceededInTestSet.incrementAndGet(); + break; + case ABORTED: + println(" Aborted: " + testIdentifier.getDisplayName()); + this.numAbortedInTestSet.incrementAndGet(); + break; + case FAILED: + println(" Failed: " + testIdentifier.getDisplayName()); + this.numFailedInTestSet.incrementAndGet(); + break; + } + } + } + + private void println(String str) { + this.out.println(str); + } +}
\ No newline at end of file |