From 1655fc01700e829b103e3fe2602f6a9744d2ef12 Mon Sep 17 00:00:00 2001 From: Christian Stein Date: Thu, 30 Aug 2018 08:22:15 +0200 Subject: [PATCH] Polishing --- ...ssDescriptor.java => ClassDescriptor.java} | 8 +- ...dDescriptor.java => MethodDescriptor.java} | 8 +- .../java/org/testng/junit5/TestListener.java | 59 +++++++++ .../java/org/testng/junit5/TestNGine.java | 113 ++++-------------- 4 files changed, 91 insertions(+), 97 deletions(-) rename src/main/java/org/testng/junit5/{NGClassDescriptor.java => ClassDescriptor.java} (79%) rename src/main/java/org/testng/junit5/{NGMethodDescriptor.java => MethodDescriptor.java} (68%) create mode 100644 src/main/java/org/testng/junit5/TestListener.java diff --git a/src/main/java/org/testng/junit5/NGClassDescriptor.java b/src/main/java/org/testng/junit5/ClassDescriptor.java similarity index 79% rename from src/main/java/org/testng/junit5/NGClassDescriptor.java rename to src/main/java/org/testng/junit5/ClassDescriptor.java index 06b00e9..fb39d7a 100644 --- a/src/main/java/org/testng/junit5/NGClassDescriptor.java +++ b/src/main/java/org/testng/junit5/ClassDescriptor.java @@ -8,7 +8,7 @@ import org.junit.platform.engine.support.descriptor.AbstractTestDescriptor; import org.junit.platform.engine.support.descriptor.ClassSource; -public class NGClassDescriptor extends AbstractTestDescriptor { +public class ClassDescriptor extends AbstractTestDescriptor { static boolean isCandidate(Class candidate) { if (!isPublic(candidate)) { @@ -23,14 +23,14 @@ static boolean isCandidate(Class candidate) { return true; } - static NGClassDescriptor newContainerDescriptor(UniqueId container, Class testClass) { + static ClassDescriptor newContainerDescriptor(UniqueId container, Class testClass) { UniqueId id = container.append("testng-class", testClass.getTypeName()); - return new NGClassDescriptor(id, testClass); + return new ClassDescriptor(id, testClass); } private final Class testClass; - private NGClassDescriptor(UniqueId uniqueId, Class testClass) { + private ClassDescriptor(UniqueId uniqueId, Class testClass) { super(uniqueId, testClass.getSimpleName(), ClassSource.from(testClass)); this.testClass = testClass; } diff --git a/src/main/java/org/testng/junit5/NGMethodDescriptor.java b/src/main/java/org/testng/junit5/MethodDescriptor.java similarity index 68% rename from src/main/java/org/testng/junit5/NGMethodDescriptor.java rename to src/main/java/org/testng/junit5/MethodDescriptor.java index 380dfb9..8e86773 100644 --- a/src/main/java/org/testng/junit5/NGMethodDescriptor.java +++ b/src/main/java/org/testng/junit5/MethodDescriptor.java @@ -5,16 +5,16 @@ import org.junit.platform.engine.support.descriptor.AbstractTestDescriptor; import org.junit.platform.engine.support.descriptor.MethodSource; -public class NGMethodDescriptor extends AbstractTestDescriptor { +public class MethodDescriptor extends AbstractTestDescriptor { - static NGMethodDescriptor newMethodDescriptor(UniqueId container, Method method) { + static MethodDescriptor newMethodDescriptor(UniqueId container, Method method) { UniqueId id = container.append("testng-method", method.getName()); - return new NGMethodDescriptor(id, method); + return new MethodDescriptor(id, method); } private final Method method; - private NGMethodDescriptor(UniqueId uniqueId, Method method) { + private MethodDescriptor(UniqueId uniqueId, Method method) { super(uniqueId, method.getName(), MethodSource.from(method)); this.method = method; } diff --git a/src/main/java/org/testng/junit5/TestListener.java b/src/main/java/org/testng/junit5/TestListener.java new file mode 100644 index 0000000..5766fe8 --- /dev/null +++ b/src/main/java/org/testng/junit5/TestListener.java @@ -0,0 +1,59 @@ +package org.testng.junit5; + +import static org.junit.platform.engine.TestExecutionResult.failed; +import static org.junit.platform.engine.TestExecutionResult.successful; + +import java.lang.reflect.Method; +import org.junit.platform.engine.EngineExecutionListener; +import org.junit.platform.engine.TestDescriptor; +import org.junit.platform.engine.UniqueId; +import org.testng.ITestContext; +import org.testng.ITestListener; +import org.testng.ITestResult; + +class TestListener implements ITestListener { + + private final EngineExecutionListener platform; + private final UniqueId classDescriptorId; + + TestListener(EngineExecutionListener platform, UniqueId classDescriptorId) { + this.platform = platform; + this.classDescriptorId = classDescriptorId; + } + + private TestDescriptor convert(ITestResult result) { + Method method = result.getMethod().getConstructorOrMethod().getMethod(); + return MethodDescriptor.newMethodDescriptor(classDescriptorId, method); + } + + @Override + public void onTestStart(ITestResult result) { + platform.executionStarted(convert(result)); + } + + @Override + public void onTestSuccess(ITestResult result) { + platform.executionFinished(convert(result), successful()); + } + + @Override + public void onTestFailure(ITestResult result) { + platform.executionFinished(convert(result), failed(result.getThrowable())); + } + + @Override + public void onTestSkipped(ITestResult result) { + platform.executionSkipped(convert(result), "because"); + } + + @Override + public void onTestFailedButWithinSuccessPercentage(ITestResult result) { + platform.executionFinished(convert(result), successful()); + } + + @Override + public void onStart(ITestContext context) {} + + @Override + public void onFinish(ITestContext context) {} +} diff --git a/src/main/java/org/testng/junit5/TestNGine.java b/src/main/java/org/testng/junit5/TestNGine.java index 3e14c98..35c7763 100644 --- a/src/main/java/org/testng/junit5/TestNGine.java +++ b/src/main/java/org/testng/junit5/TestNGine.java @@ -2,7 +2,6 @@ import static org.junit.platform.engine.support.filter.ClasspathScanningSupport.buildClassNamePredicate; -import java.lang.reflect.Method; import java.util.Arrays; import java.util.Optional; import org.junit.platform.commons.util.ClassFilter; @@ -14,10 +13,7 @@ import org.junit.platform.engine.TestExecutionResult; import org.junit.platform.engine.UniqueId; import org.junit.platform.engine.support.descriptor.EngineDescriptor; -import org.testng.ITestContext; -import org.testng.ITestListener; import org.testng.ITestNGListener; -import org.testng.ITestResult; import org.testng.TestNG; import org.testng.annotations.Test; @@ -31,6 +27,18 @@ public String getId() { return ENGINE_ID; } + public Optional getGroupId() { + return Optional.of("org.testng"); + } + + public Optional getArtifactId() { + return Optional.of("testng-junit5"); + } + + public Optional getVersion() { + return Optional.of("DEVELOPMENT"); + } + public TestDescriptor discover(EngineDiscoveryRequest request, UniqueId uniqueId) { EngineDescriptor engine = new EngineDescriptor(uniqueId, ENGINE_DISPLAY_NAME); // inspect "request" selectors and filters passed by the user @@ -38,18 +46,18 @@ public TestDescriptor discover(EngineDiscoveryRequest request, UniqueId uniqueId // wrap each in a new TestDescriptor // add the created descriptor in a tree, below the "engine" descriptor ClassFilter filter = - ClassFilter.of(buildClassNamePredicate(request), NGClassDescriptor::isCandidate); + ClassFilter.of(buildClassNamePredicate(request), ClassDescriptor::isCandidate); DiscoveryHelper helper = new DiscoveryHelper(request, filter); helper.discover(engine, this::handle); return engine; } private void handle(EngineDescriptor engine, Class candidate) { - NGClassDescriptor container = - NGClassDescriptor.newContainerDescriptor(engine.getUniqueId(), candidate); + ClassDescriptor container = + ClassDescriptor.newContainerDescriptor(engine.getUniqueId(), candidate); Arrays.stream(candidate.getMethods()) .filter(method -> method.isAnnotationPresent(Test.class)) - .map(method -> NGMethodDescriptor.newMethodDescriptor(container.getUniqueId(), method)) + .map(method -> MethodDescriptor.newMethodDescriptor(container.getUniqueId(), method)) .forEach(container::addChild); if (container.getChildren().isEmpty()) { return; @@ -59,95 +67,22 @@ private void handle(EngineDescriptor engine, Class candidate) { public void execute(ExecutionRequest request) { TestDescriptor engine = request.getRootTestDescriptor(); - EngineExecutionListener listener = request.getEngineExecutionListener(); - listener.executionStarted(engine); + EngineExecutionListener engineListener = request.getEngineExecutionListener(); + engineListener.executionStarted(engine); - // iterate engine.getChildren() recursively and process each via: - // 1. tell the listener we started - // 2. try to execute the container/test and evaluate its result - // 3. tell the listener about the test execution result for (TestDescriptor classDescriptor : engine.getChildren()) { - listener.executionStarted(classDescriptor); + engineListener.executionStarted(classDescriptor); - Class[] testClasses = {((NGClassDescriptor) classDescriptor).getTestClass()}; - TestListener testListener = new TestListener(listener, classDescriptor.getUniqueId()); + UniqueId classId = classDescriptor.getUniqueId(); + Class[] testClasses = {((ClassDescriptor) classDescriptor).getTestClass()}; TestNG testNG = new TestNG(false); - testNG.addListener((ITestNGListener) testListener); + testNG.addListener((ITestNGListener) new TestListener(engineListener, classId)); testNG.setTestClasses(testClasses); testNG.run(); - listener.executionFinished(classDescriptor, TestExecutionResult.successful()); - } - listener.executionFinished(engine, TestExecutionResult.successful()); - } - - public Optional getGroupId() { - return Optional.of("org.testng"); - } - - public Optional getArtifactId() { - return Optional.of("testng-junit5"); - } - - public Optional getVersion() { - return Optional.of("DEVELOPMENT"); - } - - class TestListener implements ITestListener { - - final EngineExecutionListener platform; - final UniqueId classDescriptorId; - - TestListener(EngineExecutionListener platform, UniqueId classDescriptorId) { - this.platform = platform; - this.classDescriptorId = classDescriptorId; - } - - private TestDescriptor toDescriptor(ITestResult result) { - Method method = result.getMethod().getConstructorOrMethod().getMethod(); - return NGMethodDescriptor.newMethodDescriptor(classDescriptorId, method); - } - - @Override - public void onTestStart(ITestResult result) { - // System.out.println("TestListener.onTestStart" + " " + result); - platform.executionStarted(toDescriptor(result)); - } - - @Override - public void onTestSuccess(ITestResult result) { - // System.out.println("TestListener.onTestSuccess" + " " + result); - platform.executionFinished(toDescriptor(result), TestExecutionResult.successful()); - } - - @Override - public void onTestFailure(ITestResult result) { - // System.out.println("TestListener.onTestFailure" + " " + result); - platform.executionFinished( - toDescriptor(result), TestExecutionResult.failed(result.getThrowable())); - } - - @Override - public void onTestSkipped(ITestResult result) { - // System.out.println("TestListener.onTestSkipped" + " " + result); - platform.executionSkipped(toDescriptor(result), "because"); - } - - @Override - public void onTestFailedButWithinSuccessPercentage(ITestResult result) { - // System.out.println("TestListener.onTestFailedButWithinSuccessPercentage" + " " + result); - platform.executionFinished(toDescriptor(result), TestExecutionResult.successful()); - } - - @Override - public void onStart(ITestContext context) { - // System.out.println("TestListener.onStart" + " " + context); - } - - @Override - public void onFinish(ITestContext context) { - // System.out.println("TestListener.onFinish" + " " + context); + engineListener.executionFinished(classDescriptor, TestExecutionResult.successful()); } + engineListener.executionFinished(engine, TestExecutionResult.successful()); } }