Skip to content

Commit

Permalink
Very basic implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
marcphilipp committed Nov 23, 2015
1 parent 08c5c93 commit d20d0a6
Show file tree
Hide file tree
Showing 4 changed files with 166 additions and 5 deletions.
1 change: 1 addition & 0 deletions surefire-junit5/build.gradle
@@ -1,5 +1,6 @@
dependencies {
compile('org.apache.maven.surefire:surefire-api:2.19')
compile('org.apache.maven.surefire:common-java5:2.19')
compile(project(':junit-launcher'))
runtime(project(':junit5-engine'))
runtime(project(':junit4-engine'))
Expand Down
@@ -0,0 +1,22 @@
/*
* Copyright 2015 the original author or authors.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.junit.gen5.surefire;

import org.apache.maven.surefire.util.ScannerFilter;

final class AcceptAllClassesScannerFilter implements ScannerFilter {

@SuppressWarnings("rawtypes")
@Override
public boolean accept(Class testClass) {
return true;
}
}
@@ -1,31 +1,91 @@
/*
* Copyright 2015 the original author or authors.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.junit.gen5.surefire;

import static org.junit.gen5.engine.TestPlanSpecification.build;

import java.lang.reflect.InvocationTargetException;

import org.apache.maven.surefire.providerapi.AbstractProvider;
import org.apache.maven.surefire.providerapi.ProviderParameters;
import org.apache.maven.surefire.report.ReporterException;
import org.apache.maven.surefire.report.ReporterFactory;
import org.apache.maven.surefire.report.RunListener;
import org.apache.maven.surefire.report.SimpleReportEntry;
import org.apache.maven.surefire.suite.RunResult;
import org.apache.maven.surefire.testset.TestSetFailedException;
import org.apache.maven.surefire.util.TestsToRun;
import org.junit.gen5.engine.TestPlanSpecification;
import org.junit.gen5.launcher.Launcher;

public class JUnitGen5Provider extends AbstractProvider {

public JUnitGen5Provider(ProviderParameters booterParameters) {
// TODO Implement this.
private final ProviderParameters parameters;

public JUnitGen5Provider(ProviderParameters parameters) {
this.parameters = parameters;
}

@Override
public Iterable<Class<?>> getSuites() {
// TODO Implement this.
return null;
throw new UnsupportedOperationException("Not yet supported.");
}

@Override
public RunResult invoke(Object forkTestSet)
throws TestSetFailedException, ReporterException, InvocationTargetException {
// TODO Implement this.
throw new TestSetFailedException("Hello from JUnit5!");
if (forkTestSet != null) {
// TODO Implement this.
throw new UnsupportedOperationException("Not yet supported.");
}

TestsToRun testsToRun = scanClasspath();
return invoke(testsToRun);
}

private RunResult invoke(TestsToRun testsToRun) {
RunResult runResult;
ReporterFactory reporterFactory = parameters.getReporterFactory();
try {
RunListener runListener = reporterFactory.createReporter();

Launcher launcher = new Launcher();
launcher.registerTestPlanExecutionListeners(new RunListenerAdapter(runListener));

for (Class<?> testClass : testsToRun) {
invoke(testClass, launcher, runListener);
}
}
finally {
runResult = reporterFactory.close();
}
return runResult;
}

private TestsToRun scanClasspath() {
TestsToRun scannedClasses = parameters.getScanResult().applyFilter(new AcceptAllClassesScannerFilter(),
parameters.getTestClassLoader());
TestsToRun orderedClasses = parameters.getRunOrderCalculator().orderTestClasses(scannedClasses);
return orderedClasses;
}

private void invoke(Class<?> testClass, Launcher launcher, RunListener runListener) {
SimpleReportEntry classEntry = new SimpleReportEntry(getClass().getName(), testClass.getName());
runListener.testSetStarting(classEntry);

TestPlanSpecification specification = build(TestPlanSpecification.forClass(testClass));
launcher.execute(specification);

runListener.testSetCompleted(classEntry);
}

}
@@ -0,0 +1,78 @@
/*
* Copyright 2015 the original author or authors.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.junit.gen5.surefire;

import static org.apache.maven.surefire.report.SimpleReportEntry.ignored;

import java.util.Optional;

import org.apache.maven.surefire.report.PojoStackTraceWriter;
import org.apache.maven.surefire.report.RunListener;
import org.apache.maven.surefire.report.SimpleReportEntry;
import org.apache.maven.surefire.report.StackTraceWriter;
import org.junit.gen5.engine.JavaSource;
import org.junit.gen5.engine.TestDescriptor;
import org.junit.gen5.engine.TestExecutionListener;
import org.junit.gen5.engine.TestSource;

final class RunListenerAdapter implements TestExecutionListener {

private RunListener runListener;

public RunListenerAdapter(RunListener reporter) {
this.runListener = reporter;
}

@Override
public void testStarted(TestDescriptor testDescriptor) {
runListener.testStarting(new SimpleReportEntry(getClassName(testDescriptor), testDescriptor.getDisplayName()));
}

@Override
public void testSkipped(TestDescriptor testDescriptor, Throwable t) {
StackTraceWriter stackTraceWriter = getStackTraceWriter(testDescriptor, t);
runListener.testSkipped(ignored(getClassName(testDescriptor), testDescriptor.getDisplayName(), t.getMessage()));
}

@Override
public void testAborted(TestDescriptor testDescriptor, Throwable t) {
StackTraceWriter stackTraceWriter = getStackTraceWriter(testDescriptor, t);
runListener.testAssumptionFailure(
ignored(getClassName(testDescriptor), testDescriptor.getDisplayName(), t.getMessage()));
}

@Override
public void testFailed(TestDescriptor testDescriptor, Throwable t) {
StackTraceWriter stackTraceWriter = getStackTraceWriter(testDescriptor, t);
runListener.testFailed(new SimpleReportEntry(getClassName(testDescriptor), testDescriptor.getDisplayName(),
stackTraceWriter, null));
}

@Override
public void testSucceeded(TestDescriptor testDescriptor) {
runListener.testSucceeded(new SimpleReportEntry(getClassName(testDescriptor), testDescriptor.getDisplayName()));
}

private StackTraceWriter getStackTraceWriter(TestDescriptor testDescriptor, Throwable t) {
return new PojoStackTraceWriter(getClassName(testDescriptor), testDescriptor.getDisplayName(), t);
}

private String getClassName(TestDescriptor testDescriptor) {
Optional<TestSource> testSource = testDescriptor.getSource();
if (testSource.isPresent() && testSource.get() instanceof JavaSource) {
JavaSource javaSource = (JavaSource) testSource.get();
if (javaSource.getJavaClass().isPresent()) {
return javaSource.getJavaClass().get().getName();
}
}
return testDescriptor.getUniqueId();
}
}

0 comments on commit d20d0a6

Please sign in to comment.