Skip to content

Commit 13c3662

Browse files
committed
Treat result attribute as case-insensitive in NUnit test reports
1 parent 68f5fe3 commit 13c3662

File tree

6 files changed

+150
-11
lines changed

6 files changed

+150
-11
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1616
- Include "found" and "expected" values for issues messages in `LowercaseKeyword`.
1717
- Exclude `J` and `K` by default in `ShortIdentifier`.
1818

19+
### Fixed
20+
21+
- The `result` attribute in NUnit test reports was not being treated as case-insensitive.
22+
1923
## [1.6.0] - 2024-05-31
2024

2125
### Added

delphi-frontend/src/main/java/au/com/integradev/delphi/nunit/NUnit2FileParser.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ protected TestResult parseTestResult(NamedNodeMap testCase) throws NUnitParseExc
3838
}
3939

4040
private TestResult.Status parseTestCaseStatus(String statusText) {
41-
switch (statusText) {
42-
case "Success":
41+
switch (statusText.toLowerCase()) {
42+
case "success":
4343
return Status.PASSED;
44-
case "Ignored":
44+
case "ignored":
4545
return Status.SKIPPED;
46-
case "Failure":
47-
case "Error":
46+
case "failure":
47+
case "error":
4848
return Status.FAILED;
4949
default:
5050
LOG.warn("Unexpected test result status: '{}'. Treating as Failure.", statusText);

delphi-frontend/src/main/java/au/com/integradev/delphi/nunit/NUnit3FileParser.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ protected TestResult parseTestResult(NamedNodeMap testCase) throws NUnitParseExc
3838
}
3939

4040
private static TestResult.Status parseTestCaseStatus(String statusText) {
41-
switch (statusText) {
42-
case "Passed":
41+
switch (statusText.toLowerCase()) {
42+
case "passed":
4343
return Status.PASSED;
44-
case "Skipped":
45-
case "Inconclusive":
44+
case "skipped":
45+
case "inconclusive":
4646
return Status.SKIPPED;
47-
case "Failed":
47+
case "failed":
4848
return Status.FAILED;
4949
default:
5050
LOG.warn("Unexpected test result status: '{}'. Treating as Failure.", statusText);

delphi-frontend/src/test/java/au/com/integradev/delphi/nunit/DelphiNUnitParserTest.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void testCollectFromParentDir() {
4545
ResultsAggregator results = getResults(getPath("v3"));
4646

4747
assertThat(results).isNotNull();
48-
assertThat(results.getTestsRun()).isEqualTo(12);
48+
assertThat(results.getTestsRun()).isEqualTo(20);
4949
}
5050

5151
@ParameterizedTest
@@ -59,6 +59,17 @@ void testParseReport(String version) {
5959
assertThat(results.getFailures()).isEqualTo(3);
6060
}
6161

62+
@ParameterizedTest
63+
@ValueSource(strings = {"v2", "v3"})
64+
void testParseReportWithUnusualStatusCasing(String version) {
65+
ResultsAggregator results = getResults(getPath(version) + "/unusualStatusCasing");
66+
67+
assertThat(results).isNotNull();
68+
assertThat(results.getTestsRun()).isEqualTo(8);
69+
assertThat(results.getSkipped()).isEqualTo(1);
70+
assertThat(results.getFailures()).isEqualTo(3);
71+
}
72+
6273
@ParameterizedTest
6374
@ValueSource(strings = {"v2", "v3"})
6475
void testCollectMalformedReport(String version) {
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
2+
<test-results name="path\to\executable.exe" total="5" errors="1" failures="1" ignored="1" inconclusive="0" not-run="1" skipped="0" invalid="0" date="2023-11-30" time="0.017">
3+
<culture-info current-culture="en" current-uiculture="en" />
4+
<test-suite type="Assembly" name="executable.exe" executed="true" result="failure" success="False" time="0.017" asserts="0">
5+
<results>
6+
<test-suite type="Namespace" name="MyTests" executed="true" result="success" success="True" time="0.016" asserts="0" >
7+
<results>
8+
<test-suite type="Fixture" name="PassingAndSkippedSuite" executed="True" result="SuCCesS" success="True" time="0.016" >
9+
<results>
10+
<test-case name="SkippedTest" executed="False" result="ignored" time="0.000" asserts="0" >
11+
<reason>
12+
<message>
13+
<![CDATA[ This is my reason for skipping ]]>
14+
</message>
15+
</reason>
16+
</test-case>
17+
<test-case name="PassedTest." executed="True" result="SUCCESS" success="True" time="0.000" asserts="0" />
18+
</results>
19+
</test-suite>
20+
</results>
21+
</test-suite>
22+
<test-suite type="Fixture" name="ErrorSuite" executed="True" result="SUccESS" success="True" time="0.016" >
23+
<results>
24+
<test-case name="ErrorCase." executed="True" result="ERROR" success="False" time="0.000" asserts="0" >
25+
<failure>
26+
<message>
27+
<![CDATA[ This is my exception message ]]>
28+
</message>
29+
<stack-trace>
30+
<![CDATA[ ]]>
31+
</stack-trace>
32+
</failure>
33+
</test-case>
34+
</results>
35+
</test-suite>
36+
<test-suite type="Fixture" name="PassingSuite" executed="True" result="Success" success="True" time="0.012" >
37+
<results>
38+
<test-case name="TestCase1." executed="True" result="success" success="True" time="0.000" asserts="0" />
39+
<test-case name="TestCase2." executed="True" result="SUCCESS" success="True" time="0.000" asserts="0" />
40+
<test-case name="TestCase3." executed="True" result="sUcCeSs" success="True" time="0.000" asserts="0" />
41+
<test-case name="TestCase4." executed="True" result="SuCcEsS" success="True" time="0.000" asserts="0" />
42+
</results>
43+
</test-suite>
44+
<test-suite type="Fixture" name="FailingSuite" executed="True" result="Failure" success="False" time="0.005" >
45+
<results>
46+
<test-case name="FailedCase1." executed="True" result="fAiLuRe" success="False" time="0.000" asserts="0" >
47+
<failure>
48+
<message>
49+
<![CDATA[ This is my failure message ]]>
50+
</message>
51+
<stack-trace>
52+
<![CDATA[ ]]>
53+
</stack-trace>
54+
</failure>
55+
</test-case>
56+
<test-case name="FailedCase2." executed="True" result="failure" success="False" time="0.000" asserts="0" >
57+
<failure>
58+
<message>
59+
<![CDATA[ This is my failure message ]]>
60+
</message>
61+
<stack-trace>
62+
<![CDATA[ ]]>
63+
</stack-trace>
64+
</failure>
65+
</test-case>
66+
</results>
67+
</test-suite>
68+
</results>
69+
</test-suite>
70+
</test-results>
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<test-run testcasecount="9" result="passed" total="8" passed="5" failed="3" inconclusive="0" skipped="1"
3+
duration="1.561">
4+
<test-suite type="TestSuite" name="TopLevelParentSuite"
5+
testcasecount="6" runstate="Runnable" result="passed"
6+
duration="1.235" total="5" passed="5" failed="0" skipped="1" inconclusive="0">
7+
<test-suite type="TestSuite" name="PassingAndSkippedSuite"
8+
testcasecount="4" runstate="Runnable" result="PASSED"
9+
duration="1.234" total="3" passed="3" failed="0" skipped="1" inconclusive="0">
10+
<test-case name="Setup" classname="PassingAndSkippedClass"
11+
runstate="Runnable" result="passed"
12+
duration="0.704">
13+
</test-case>
14+
<test-case name="SkippedTest"
15+
classname="PassingAndSkippedClass" runstate="Skipped" result="sKiPpEd"
16+
duration="0.185">
17+
</test-case>
18+
<test-case name="PassedTest"
19+
classname="PassingAndSkippedClass" runstate="Runnable" result="pAsSeD"
20+
duration="0.076">
21+
</test-case>
22+
<test-case name="Teardown" classname="PassingAndSkippedClass"
23+
runstate="Runnable" result="PaSsEd" duration="0.269">
24+
</test-case>
25+
</test-suite>
26+
<test-suite type="TestSuite" name="PassingSuite"
27+
testcasecount="2" runstate="Runnable" result="passed"
28+
duration="0.001" total="2" passed="2" failed="0" skipped="0" inconclusive="0">
29+
<test-case name="TestCase1"
30+
classname="TTestClass2" runstate="Runnable" result="passed"
31+
duration="0.000">
32+
</test-case>
33+
<test-case name="TestCase1"
34+
classname="TTestClass2" runstate="Runnable" result="passed"
35+
duration="0.001">
36+
</test-case>
37+
</test-suite>
38+
<test-suite type="TestSuite" name="FailingSuite"
39+
testcasecount="3" runstate="Runnable" result="FAILED"
40+
duration="0.326" total="3" passed="0" failed="3" skipped="0" inconclusive="0">
41+
<test-case name="Setup" classname="FailingClass"
42+
runstate="Runnable" result="failed"
43+
duration="0.102">
44+
</test-case>
45+
<test-case name="FailedCase"
46+
classname="FailingClass" runstate="Runnable" result="FaIlEd"
47+
duration="0.092">
48+
</test-case>
49+
<test-case name="Teardown" classname="FailingClass"
50+
runstate="Runnable" result="fAiLeD" duration="0.132">
51+
</test-case>
52+
</test-suite>
53+
</test-suite>
54+
</test-run>

0 commit comments

Comments
 (0)