Skip to content

Commit aa4f403

Browse files
committed
original pull-request but re-based to latest HEAD
1 parent 12eee35 commit aa4f403

11 files changed

Lines changed: 175 additions & 15 deletions

File tree

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,22 @@ You can use variables in FILENAME.
272272

273273
See [the test-case example](src/test/resources/selenese/testcase_include.html).
274274

275+
Tests in DRAFT mode
276+
-------------------
277+
278+
Sometimes tests exist before the application-under-test has completely
279+
implemented the feature being tested (in Test-Driven-Development, for
280+
example). You can mark such tests to be in DRAFT (as opposed to FINAL)
281+
mode, whereby they are executed normally and their results are shown.
282+
But for build purposes, they will be accounted as "skipped" rather than
283+
"success" or "fail" - thereby allowing builds including them to succeed.
284+
285+
This is done by way of a ###-tagged "lifecycle" directive in a comment:
286+
287+
<!-- ### lifecycle=DRAFT ### -->
288+
289+
The default lifecycle state is FINAL.
290+
275291
License
276292
-------
277293

src/main/java/jp/vmi/junit/result/ITestTarget.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,19 @@
77
*/
88
public interface ITestTarget {
99

10+
/**
11+
* Selenese lifecycle types.
12+
*/
13+
@SuppressWarnings("javadoc")
14+
public enum Lifecycle {
15+
FINAL, DRAFT
16+
}
17+
18+
/**
19+
* Flag for triggering LIFECYCLE_DRAFT in a selenese test.
20+
*/
21+
public static final String FLAG_LIFECYCLE_DRAFT = "### lifecycle=" + Lifecycle.DRAFT.name() + " ###";
22+
1023
/**
1124
* Get test-target file base name.
1225
*
@@ -36,4 +49,18 @@ public interface ITestTarget {
3649
* @return stop watch.
3750
*/
3851
StopWatch getStopWatch();
52+
53+
/**
54+
* Get the lifecycle type.
55+
*
56+
* @return lifecycle type.
57+
*/
58+
Lifecycle getLifecycle();
59+
60+
/**
61+
* Set the lifecycle type.
62+
*
63+
* @param lifecycle
64+
*/
65+
void setLifecycle(Lifecycle lifecycle);
3966
}

src/main/java/jp/vmi/junit/result/JUnitResult.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.slf4j.Logger;
1212
import org.slf4j.LoggerFactory;
1313

14+
import jp.vmi.junit.result.ITestTarget.Lifecycle;
1415
import jp.vmi.selenium.selenese.utils.CommandLineUtils;
1516

1617
import static jp.vmi.junit.result.ObjectFactory.*;
@@ -102,7 +103,7 @@ public void startTestSuite(ITestSuite testSuite) {
102103
/**
103104
* End test-suite.
104105
*
105-
* @param testSuite test-suite instatnce.
106+
* @param testSuite test-suite instance.
106107
*/
107108
public void endTestSuite(ITestSuite testSuite) {
108109
TestSuiteResult suiteResult = (TestSuiteResult) map.remove(testSuite);
@@ -125,7 +126,7 @@ public void endTestSuite(ITestSuite testSuite) {
125126
/**
126127
* Add property in test-suite.
127128
*
128-
* @param testSuite test-suite instatnce.
129+
* @param testSuite test-suite instance.
129130
* @param name property name.
130131
* @param value property value.
131132
*/
@@ -166,7 +167,8 @@ public void endTestCase(ITestCase testCase) {
166167
public void setSuccess(ITestCase testCase) {
167168
TestCaseResult caseResult = (TestCaseResult) map.get(testCase);
168169
caseResult.setSuccess();
169-
failsafeSummary.completed++;
170+
if (testCase.getLifecycle() != Lifecycle.DRAFT)
171+
failsafeSummary.completed++;
170172
}
171173

172174
/**
@@ -179,8 +181,10 @@ public void setSuccess(ITestCase testCase) {
179181
public void setError(ITestCase testCase, String message, String trace) {
180182
TestCaseResult caseResult = (TestCaseResult) map.get(testCase);
181183
caseResult.setError(message, trace);
182-
failsafeSummary.completed++;
183-
failsafeSummary.errors++;
184+
if (testCase.getLifecycle() != Lifecycle.DRAFT) {
185+
failsafeSummary.completed++;
186+
failsafeSummary.errors++;
187+
}
184188
}
185189

186190
/**
@@ -193,8 +197,10 @@ public void setError(ITestCase testCase, String message, String trace) {
193197
public void setFailure(ITestCase testCase, String message, String trace) {
194198
TestCaseResult caseResult = (TestCaseResult) map.get(testCase);
195199
caseResult.setFailure(message, trace);
196-
failsafeSummary.completed++;
197-
failsafeSummary.failures++;
200+
if (testCase.getLifecycle() != Lifecycle.DRAFT) {
201+
failsafeSummary.completed++;
202+
failsafeSummary.failures++;
203+
}
198204
}
199205

200206
/**

src/main/java/jp/vmi/junit/result/TestCaseResult.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import org.apache.commons.lang3.StringUtils;
1414

15+
import jp.vmi.junit.result.ITestTarget.Lifecycle;
1516
import jp.vmi.selenium.selenese.utils.LogRecorder.LogMessage;
1617

1718
import static jp.vmi.junit.result.ObjectFactory.*;
@@ -44,7 +45,8 @@ public class TestCaseResult extends TestResult<ITestCase> {
4445
* Set success result.
4546
*/
4647
public void setSuccess() {
47-
this.success = true;
48+
if (this.testTarget.getLifecycle() != Lifecycle.DRAFT)
49+
this.success = true;
4850
}
4951

5052
/**
@@ -54,7 +56,8 @@ public void setSuccess() {
5456
* @param value error value.
5557
*/
5658
public void setError(String message, String value) {
57-
error = factory.createError(message, value);
59+
if (this.testTarget.getLifecycle() != Lifecycle.DRAFT)
60+
error = factory.createError(message, value);
5861
}
5962

6063
/**
@@ -64,7 +67,8 @@ public void setError(String message, String value) {
6467
* @param value failure value.
6568
*/
6669
public void setFailure(String message, String value) {
67-
failure = factory.createFailure(message, value);
70+
if (this.testTarget.getLifecycle() != Lifecycle.DRAFT)
71+
failure = factory.createFailure(message, value);
6872
}
6973

7074
/**
@@ -93,7 +97,7 @@ public int getFailures() {
9397
@XmlElementRef
9498
@XmlJavaTypeAdapter(SkippedAdapter.class)
9599
public Integer getSkipped() {
96-
return (!success && error == null && failure == null) ? 1 : 0;
100+
return ((this.testTarget.getLifecycle() == Lifecycle.DRAFT) || (!success && error == null && failure == null)) ? 1 : 0;
97101
}
98102

99103
/**

src/main/java/jp/vmi/selenium/selenese/ErrorTestCase.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
public class ErrorTestCase extends ErrorSource implements ITestCase, IHtmlResultTestCase {
1515

1616
private LogRecorder logRecorder = null;
17+
private Lifecycle lifecycle = Lifecycle.FINAL;
1718

1819
@Override
1920
public void setLogRecorder(LogRecorder logRecorder) {
@@ -35,6 +36,16 @@ public Type getType() {
3536
return Type.TEST_CASE;
3637
}
3738

39+
@Override
40+
public Lifecycle getLifecycle() {
41+
return lifecycle;
42+
}
43+
44+
@Override
45+
public void setLifecycle(Lifecycle lifecycle) {
46+
this.lifecycle = lifecycle;
47+
}
48+
3849
@ExecuteTestCase
3950
@Override
4051
public Result execute(Selenese parent, Context context) throws InvalidSeleneseException {

src/main/java/jp/vmi/selenium/selenese/ErrorTestSuite.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class ErrorTestSuite extends ErrorSource implements ITreedFileGenerator,
1212

1313
private ITreedFileGenerator parent = null;
1414
private int index = 0;
15+
private Lifecycle lifecycle = Lifecycle.FINAL;
1516

1617
@Override
1718
public ErrorTestSuite initialize(String filename, InvalidSeleneseException e) {
@@ -23,6 +24,16 @@ public Type getType() {
2324
return Type.TEST_SUITE;
2425
}
2526

27+
@Override
28+
public Lifecycle getLifecycle() {
29+
return lifecycle;
30+
}
31+
32+
@Override
33+
public void setLifecycle(Lifecycle lifecycle) {
34+
this.lifecycle = lifecycle;
35+
}
36+
2637
@Override
2738
public ITreedFileGenerator getParent() {
2839
return parent;

src/main/java/jp/vmi/selenium/selenese/TestCase.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ public class TestCase implements Selenese, ITestCase, IHtmlResultTestCase {
4747
private final StopWatch stopWatch = new StopWatch();
4848
private LogRecorder logRecorder = null;
4949

50+
private Lifecycle lifecycle = Lifecycle.FINAL;
51+
5052
/**
5153
* Initialize after constructed.
5254
*
@@ -74,6 +76,16 @@ public Type getType() {
7476
return Type.TEST_CASE;
7577
}
7678

79+
@Override
80+
public Lifecycle getLifecycle() {
81+
return lifecycle;
82+
}
83+
84+
@Override
85+
public void setLifecycle(Lifecycle lifecycle) {
86+
this.lifecycle = lifecycle;
87+
}
88+
7789
/**
7890
* Test-case source type.
7991
*

src/main/java/jp/vmi/selenium/selenese/TestSuite.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ public class TestSuite implements Selenese, ITreedFileGenerator, ITestSuite, IHt
3939
private final StopWatch stopWatch = new StopWatch();
4040
private Result result = UNEXECUTED;
4141

42+
private Lifecycle lifecycle = Lifecycle.FINAL;
43+
4244
/**
4345
* Initialize after constructed.
4446
*
@@ -78,6 +80,16 @@ public Type getType() {
7880
return Type.TEST_SUITE;
7981
}
8082

83+
@Override
84+
public Lifecycle getLifecycle() {
85+
return lifecycle;
86+
}
87+
88+
@Override
89+
public void setLifecycle(Lifecycle lifecycle) {
90+
this.lifecycle = lifecycle;
91+
}
92+
8193
@Override
8294
public boolean isError() {
8395
return false;

src/main/java/jp/vmi/selenium/selenese/command/Comment.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package jp.vmi.selenium.selenese.command;
22

3+
import jp.vmi.junit.result.ITestTarget;
4+
import jp.vmi.junit.result.ITestTarget.Lifecycle;
35
import jp.vmi.selenium.selenese.Context;
46
import jp.vmi.selenium.selenese.result.Result;
57

@@ -28,6 +30,11 @@ public boolean mayUpdateScreen() {
2830

2931
@Override
3032
protected Result executeImpl(Context context, String... curArgs) {
33+
// if a comment contains FLAG_LIFECYCLE_DRAFT, set this testcase to DRAFT
34+
String comment = getArguments()[MESSAGE];
35+
if (comment.contains(ITestTarget.FLAG_LIFECYCLE_DRAFT)) {
36+
context.getCurrentTestCase().setLifecycle(Lifecycle.DRAFT);
37+
}
3138
return SUCCESS;
3239
}
3340

0 commit comments

Comments
 (0)