Skip to content

Commit

Permalink
[FIXED JENKINSS-15401] Fixed misbehaviour when using TODO with test r…
Browse files Browse the repository at this point in the history
…esults. Now there's a configuration that changes the way a TODO can be used.
  • Loading branch information
kinow committed Nov 25, 2012
1 parent ae77349 commit 25be38e
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 17 deletions.
7 changes: 5 additions & 2 deletions src/main/java/org/tap4j/plugin/TapParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,17 @@ public class TapParser {
.getName());
private Boolean outputTapToConsole;
private Boolean enableSubtests;
private Boolean todoIsFailure;

/** Build's logger to print logs as part of build's console output */
private PrintStream logger;
private boolean parserErrors;
private boolean hasFailedTests;

public TapParser(Boolean outputTapToConsole, Boolean enableSubtests, PrintStream logger) {
public TapParser(Boolean outputTapToConsole, Boolean enableSubtests, Boolean todoIsFailure, PrintStream logger) {
this.outputTapToConsole = outputTapToConsole;
this.enableSubtests = enableSubtests;
this.todoIsFailure = todoIsFailure;
this.logger = logger;
this.parserErrors = false;
this.hasFailedTests = false;
Expand Down Expand Up @@ -126,7 +129,7 @@ public TapResult parse(FilePath[] results, AbstractBuild<?, ?> build) {
}
}
//final TapResult testResult = new TapResult(UUID.randomUUID().toString(), build, testSets);
final TapResult testResult = new TapResult("TAP Test Results", build, testSets);
final TapResult testResult = new TapResult("TAP Test Results", build, testSets, this.todoIsFailure);
return testResult;
}

Expand Down
28 changes: 23 additions & 5 deletions src/main/java/org/tap4j/plugin/TapPublisher.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,14 +63,16 @@ public class TapPublisher extends Recorder implements MatrixAggregatable {
private final Boolean outputTapToConsole;
private final Boolean enableSubtests;
private final Boolean discardOldReports;
private final Boolean todoIsFailure;

@DataBoundConstructor
public TapPublisher(String testResults,
Boolean failIfNoResults,
Boolean failedTestsMarkBuildAsFailure,
Boolean outputTapToConsole,
Boolean enableSubtests,
Boolean discardOldReports) {
Boolean discardOldReports,
Boolean todoIsFailure) {
this.testResults = testResults;
if(failIfNoResults == null) {
this.failIfNoResults = Boolean.FALSE;
Expand All @@ -93,6 +95,11 @@ public TapPublisher(String testResults,
} else {
this.discardOldReports = discardOldReports;
}
if(todoIsFailure == null) {
this.todoIsFailure = Boolean.TRUE;
} else {
this.todoIsFailure = todoIsFailure;
}
}

public Object readResolve() {
Expand All @@ -102,6 +109,7 @@ public Object readResolve() {
Boolean outputTapToConsole = this.getOutputTapToConsole();
Boolean enableSubtests = this.getEnableSubtests();
Boolean discardOldReports = this.getDiscardOldReports();
Boolean todoIsFailure = this.getTodoIsFailure();
if (failedTestsMarkBuildAsFailure == null) {
failedTestsMarkBuildAsFailure = Boolean.FALSE;
}
Expand All @@ -117,8 +125,10 @@ public Object readResolve() {
if(discardOldReports == null) {
discardOldReports = Boolean.FALSE;
}

return new TapPublisher(testResults, failIfNoResults, failedTestsMarkBuildAsFailure, outputTapToConsole, enableSubtests, discardOldReports);
if(todoIsFailure == null) {
todoIsFailure = Boolean.TRUE;
}
return new TapPublisher(testResults, failIfNoResults, failedTestsMarkBuildAsFailure, outputTapToConsole, enableSubtests, discardOldReports, todoIsFailure);
}

/**
Expand Down Expand Up @@ -159,6 +169,13 @@ public Boolean getEnableSubtests() {
public Boolean getDiscardOldReports() {
return discardOldReports;
}

/**
* @return the todoIsFailure
*/
public Boolean getTodoIsFailure() {
return todoIsFailure;
}

/*
* (non-Javadoc)
Expand Down Expand Up @@ -270,12 +287,12 @@ private TapResult loadResults(AbstractBuild<?, ?> owner,

TapResult tr = null;
if (results == null) {
tr = new TapResult("", owner, Collections.EMPTY_LIST);
tr = new TapResult("", owner, Collections.EMPTY_LIST, this.todoIsFailure);
tr.setOwner(owner);
return tr;
}

TapParser parser = new TapParser(this.outputTapToConsole, this.enableSubtests, logger);
TapParser parser = new TapParser(this.outputTapToConsole, this.enableSubtests, this.todoIsFailure, logger);
TapResult result = parser.parse(results, owner);
result.setOwner(owner);
return result;
Expand All @@ -297,6 +314,7 @@ private boolean saveReports(FilePath tapDir, FilePath[] reports,
// String name = "tap-report" + (i > 0 ? "-" + i : "")
// + ".tap";
// i++;
// TODO: !
FilePath dst = tapDir.child(report.getName());
report.copyTo(dst);
}
Expand Down
34 changes: 29 additions & 5 deletions src/main/java/org/tap4j/plugin/TapResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -71,15 +71,39 @@ public class TapResult implements ModelObject, Serializable {
private int bailOuts = 0;
private int total = 0;
private String name;
private Boolean todoIsFailure;

/**
* @deprecated since JENKINS-15401
* @param name
* @param owner
* @param testSets
*/
public TapResult(String name, AbstractBuild<?, ?> owner,
List<TestSetMap> testSets) {
this.name = name;
this.build = owner;
this.testSets = this.filterTestSet(testSets);
this.parseErrorTestSets = this.filterParseErrorTestSets(testSets);
this.todoIsFailure = true;
}


public TapResult(String name, AbstractBuild<?, ?> owner,
List<TestSetMap> testSets, Boolean todoIsFailure) {
this.name = name;
this.build = owner;
this.testSets = this.filterTestSet(testSets);
this.parseErrorTestSets = this.filterParseErrorTestSets(testSets);
this.todoIsFailure = todoIsFailure;
}

/**
* @return the todoIsFailure
*/
public Boolean getTodoIsFailure() {
return todoIsFailure;
}

/**
* @param testSets
* Untiltered test sets
Expand Down Expand Up @@ -203,10 +227,10 @@ private boolean isFailure(TestResult testResult) {
boolean r = false;
Directive directive = testResult.getDirective();
StatusValues status = testResult.getStatus();
// TODO !
if (directive != null
&& directive.getDirectiveValue() == DirectiveValues.TODO) {
r = true;
if (directive != null) {
if(directive.getDirectiveValue() == DirectiveValues.TODO && todoIsFailure != null && true == todoIsFailure) {
r = true;
}
} else if (status != null && status == StatusValues.NOT_OK) {
r = true;
}
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/org/tap4j/plugin/model/TapStreamResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public TapStreamResult(AbstractBuild<?, ?> owner, TapResult tapResult) {
for(TestSetMap tsm : tapResult.getTestSets()) {
TestSet ts = tsm.getTestSet();
for(org.tap4j.model.TestResult tr : ts.getTestResults()) {
this.children.add(new TapTestResultResult(owner, tsm, tr));
this.children.add(new TapTestResultResult(owner, tsm, tr, this.tapResult.getTodoIsFailure()));
}
}
}
Expand Down Expand Up @@ -154,7 +154,7 @@ public List<TestResult> getFailedTests2() {
TestSet ts = tsm.getTestSet();
for(org.tap4j.model.TestResult tr : ts.getTestResults()) {
if(tr.getStatus() == StatusValues.NOT_OK) {
failedTests.add(new TapTestResultResult(owner, tsm, tr));
failedTests.add(new TapTestResultResult(owner, tsm, tr, this.tapResult.getTodoIsFailure()));
}
}
}
Expand Down Expand Up @@ -183,7 +183,7 @@ private TapTestResultResult getTapTestResultResult(String name) {
if(tsm.getFileName().equals(fileName)) {
TestSet ts = tsm.getTestSet();
org.tap4j.model.TestResult desired = ts.getTestResult(Integer.parseInt(testNumber));
return new TapTestResultResult(owner, tsm, desired);
return new TapTestResultResult(owner, tsm, desired, this.tapResult.getTodoIsFailure());
}
}
return null;
Expand Down
20 changes: 19 additions & 1 deletion src/main/java/org/tap4j/plugin/model/TapTestResultResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,31 @@ public class TapTestResultResult extends TestResult {
private final AbstractBuild<?, ?> owner;
private final org.tap4j.model.TestResult tapTestResult;
private final TestSetMap testSetMap;
private final Boolean todoIsFailure;

/**
* @deprecated
* @param owner
* @param testSetMap
* @param tapTestResult
*/
public TapTestResultResult(AbstractBuild<?, ?> owner,
TestSetMap testSetMap,
org.tap4j.model.TestResult tapTestResult) {
this.owner = owner;
this.testSetMap = testSetMap;
this.tapTestResult = tapTestResult;
this.todoIsFailure = Boolean.TRUE;
}

public TapTestResultResult(AbstractBuild<?, ?> owner,
TestSetMap testSetMap,
org.tap4j.model.TestResult tapTestResult,
Boolean todoIsFailure) {
this.owner = owner;
this.testSetMap = testSetMap;
this.tapTestResult = tapTestResult;
this.todoIsFailure = todoIsFailure;
}

/* (non-Javadoc)
Expand Down Expand Up @@ -86,7 +104,7 @@ public TestObject getParent() {
if(subTest != null) {
List<TestSetMap> list = new ArrayList<TestSetMap>();
list.add(subTest);
parent = new TapStreamResult(owner, new TapResult("TAP Test Results", owner, list));
parent = new TapStreamResult(owner, new TapResult("TAP Test Results", owner, list, todoIsFailure));
}
}
return parent;
Expand Down
3 changes: 3 additions & 0 deletions src/main/resources/org/tap4j/plugin/TapPublisher/config.jelly
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,7 @@
<f:entry title="Discard old reports">
<f:checkbox name="TapPublisher.discardOldReports" value="${instance.discardOldReports}" checked="${instance.discardOldReports}" />
</f:entry>
<f:entry title="TODO directive fails a test">
<f:checkbox name="TapPublisher.todoIsFailure" value="${instance.todoIsFailure}" checked="${instance.todoIsFailure}" />
</f:entry>
</j:jelly>
2 changes: 1 addition & 1 deletion src/test/java/org/tap4j/plugin/TestTapResultContents.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public File getRootDir() {
return new File(TestTapResultContents.class.getResource("/org/tap4j/plugin/").getFile());
}
};
TapResult result = new TapResult("name", a, tss);
TapResult result = new TapResult("name", a, tss, true);
String contents = result.getContents("sample.tap");
String expected = "1..3\nok 1\nnot ok 2\n # some IO error\n # and more text here\nok 3 # SKIP error in test 2";
assertEquals(expected, contents);
Expand Down

0 comments on commit 25be38e

Please sign in to comment.