Skip to content

Commit

Permalink
Preparing for Cucumber Plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
vasiliygagin committed Feb 7, 2014
1 parent 8f6f4d0 commit d5983b7
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 92 deletions.
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public JUnitRunner(Class<?> testClass) throws InitializationError {


computeClassStatement(errors); computeClassStatement(errors);
validateTestRules(errors); validateTestRules(errors);
// TODO: would be nice to discover tests before computeClassStatement
discoverTests(errors); discoverTests(errors);
configureTestSuite(errors); configureTestSuite(errors);


Expand Down Expand Up @@ -113,7 +114,10 @@ List<Class<? extends JUnitPlugin>> getPluginClasses(WithPlugins pluginsAnnotatio


private void computeClassStatement(List<Throwable> errors) { private void computeClassStatement(List<Throwable> errors) {


Description description = getDescription(); /*
* children are not registered yet, calling getDescription() will cache incomplete description
*/
Description description = suite.describeSelf();


Statement statement = suite.constructInvokeStatement(this); Statement statement = suite.constructInvokeStatement(this);


Expand Down
15 changes: 10 additions & 5 deletions junitrunner/src/main/java/com/github/junitrunner/JUnitSuite.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public JUnitSuite(Class<?> testClass) {
this.testClass = testClass; this.testClass = testClass;
} }


void addTask(JUnitTask task) { protected void addTask(JUnitTask task) {
children.add(task); children.add(task);
} }


Expand All @@ -27,9 +27,9 @@ public boolean isEmpty() {
} }


@Override @Override
public Description describe() { public Description createDescription() {


Description description = Description.createSuiteDescription(testClass.getName(), testClass.getAnnotations()); Description description = describeSelf();
for (JUnitTask test : children) { for (JUnitTask test : children) {
if (test.isFilteredOut()) { if (test.isFilteredOut()) {
continue; continue;
Expand All @@ -39,6 +39,10 @@ public Description describe() {
return description; return description;
} }


protected Description describeSelf() {
return Description.createSuiteDescription(testClass.getName(), testClass.getAnnotations());
}

protected void invoke(JUnitRunner jUnitRunner) throws Throwable { protected void invoke(JUnitRunner jUnitRunner) throws Throwable {


boolean hasFailures = false; boolean hasFailures = false;
Expand All @@ -52,13 +56,14 @@ protected void invoke(JUnitRunner jUnitRunner) throws Throwable {
} else { } else {
Statement statement = task.constructInvokeStatement(jUnitRunner); Statement statement = task.constructInvokeStatement(jUnitRunner);
jUnitRunner.listenerContainer.taskStarted(task); jUnitRunner.listenerContainer.taskStarted(task);
Throwable failure = null;
try { try {
statement.evaluate(); statement.evaluate();
jUnitRunner.listenerContainer.taskFinished(task);
} catch (Throwable exc) { } catch (Throwable exc) {
jUnitRunner.listenerContainer.taskFailed(task, exc); failure = exc;
hasFailures = true; hasFailures = true;
} }
jUnitRunner.listenerContainer.taskFinished(task, failure);
} }
} }


Expand Down
10 changes: 9 additions & 1 deletion junitrunner/src/main/java/com/github/junitrunner/JUnitTask.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public abstract class JUnitTask {


private boolean ignored; private boolean ignored;
private boolean filteredOut; private boolean filteredOut;
protected Description description;


protected JUnitTask() { protected JUnitTask() {
} }
Expand All @@ -30,7 +31,14 @@ protected void filterOut() {
filteredOut = true; filteredOut = true;
} }


public abstract Description describe(); public final Description describe() {
if (description == null) {
description = createDescription();
}
return description;
}

public abstract Description createDescription();


protected abstract Statement constructInvokeStatement(JUnitRunner jUnitRunner); protected abstract Statement constructInvokeStatement(JUnitRunner jUnitRunner);


Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -21,24 +21,25 @@ public void testIgnored(JUnitTask test) {
} }


@Override @Override
public void testStarted(JUnitTask test) { public void taskStarted(JUnitTask task) {
runNotifier.fireTestStarted(test.describe()); if (task instanceof JUnitTest) {
} runNotifier.fireTestStarted(task.describe());

}
@Override
public void testFinished(JUnitTask test) {
runNotifier.fireTestFinished(test.describe());
} }


@Override @Override
public void testFailed(JUnitTask test, Throwable e) { public void taskFinished(JUnitTask task, Throwable failure) {
Description description = test.describe(); if (task instanceof JUnitTest) {
Failure failure = new Failure(description, e); if (failure != null) {
if (e instanceof AssumptionViolatedException) { Description description = task.describe();
runNotifier.fireTestAssumptionFailed(failure); if (failure instanceof AssumptionViolatedException) {
} else { runNotifier.fireTestAssumptionFailed(new Failure(description, failure));
runNotifier.fireTestFailure(failure); } else {
runNotifier.fireTestFailure(new Failure(description, failure));
}
}

runNotifier.fireTestFinished(task.describe());
} }
runNotifier.fireTestFinished(description);
} }
} }
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
public class JUnitJavaMethodTest extends JUnitTest { public class JUnitJavaMethodTest extends JUnitTest {


private final Method method; private final Method method;
private Description description;


public JUnitJavaMethodTest(Class<?> testClass, Method method) { public JUnitJavaMethodTest(Class<?> testClass, Method method) {
this.method = method; this.method = method;
Expand All @@ -20,8 +19,8 @@ public JUnitJavaMethodTest(Class<?> testClass, Method method) {
} }


@Override @Override
public Description describe() { public Description createDescription() {
return description; throw new UnsupportedOperationException();
} }


public Method getMethod() { public Method getMethod() {
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -15,29 +15,17 @@ public void testClassFinished(Description description) {
} }


@Override @Override
public void testSuiteStarted(JUnitTask test) { public void taskStarted(JUnitTask task) {
} }


@Override @Override
public void testSuiteFinished(JUnitTask test) { public void taskFinished(JUnitTask task, Throwable failure) {
} }


@Override @Override
public void testIgnored(JUnitTask test) { public void testIgnored(JUnitTask test) {
} }


@Override
public void testStarted(JUnitTask test) {
}

@Override
public void testFailed(JUnitTask test, Throwable e) {
}

@Override
public void testFinished(JUnitTask test) {
}

@Override @Override
public void testCoreStarted(JUnitTask test, Object testObject) { public void testCoreStarted(JUnitTask test, Object testObject) {
} }
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -10,20 +10,14 @@ public interface RunnerListener {


void testClassFinished(Description description); void testClassFinished(Description description);


void testSuiteStarted(JUnitTask test); void taskStarted(JUnitTask task);


void testSuiteFinished(JUnitTask test); void taskFinished(JUnitTask task, Throwable failure);


void testCoreStarted(JUnitTask test, Object testObject); void testCoreStarted(JUnitTask test, Object testObject);


void testCoreFinished(JUnitTask test, Object testObject, Throwable error); void testCoreFinished(JUnitTask test, Object testObject, Throwable error);


void testStarted(JUnitTask test);

void testFailed(JUnitTask test, Throwable e);

void testFinished(JUnitTask test);

void testIgnored(JUnitTask test); void testIgnored(JUnitTask test);


} }
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@


import org.junit.runner.Description; import org.junit.runner.Description;


import com.github.junitrunner.JUnitSuite;
import com.github.junitrunner.JUnitTask; import com.github.junitrunner.JUnitTask;
import com.github.junitrunner.JUnitTest;


public class RunnerListenerContainer {// implements RunnerListener { public class RunnerListenerContainer {// implements RunnerListener {


Expand Down Expand Up @@ -36,54 +34,14 @@ public void taskIgnored(JUnitTask test) {
} }


public void taskStarted(JUnitTask task) { public void taskStarted(JUnitTask task) {
if (task instanceof JUnitSuite) {
testSuiteStarted(task);
} else {
testStarted(task);
}
}

public void taskFailed(JUnitTask task, Throwable exception) {
if (task instanceof JUnitTest) {
testFailed(task, exception);
}
}

public void taskFinished(JUnitTask task) {
if (task instanceof JUnitSuite) {
testSuiteFinished(task);
} else {
testFinished(task);
}
}

private void testSuiteStarted(JUnitTask test) {
for (RunnerListener listener : listeners) {
listener.testSuiteStarted(test);
}
}

private void testSuiteFinished(JUnitTask test) {
for (RunnerListener listener : listeners) {
listener.testSuiteFinished(test);
}
}

private void testStarted(JUnitTask test) {
for (RunnerListener listener : listeners) {
listener.testStarted(test);
}
}

private void testFailed(JUnitTask test, Throwable e) {
for (RunnerListener listener : listeners) { for (RunnerListener listener : listeners) {
listener.testFailed(test, e); listener.taskStarted(task);
} }
} }


private void testFinished(JUnitTask test) { public void taskFinished(JUnitTask task, Throwable failure) {
for (RunnerListener listener : listeners) { for (RunnerListener listener : listeners) {
listener.testFinished(test); listener.taskFinished(task, failure);
} }
} }


Expand Down

0 comments on commit d5983b7

Please sign in to comment.