Skip to content

Commit

Permalink
PHP: Fixed incorrect display of skipped tests in the Test Results win…
Browse files Browse the repository at this point in the history
…dow for Codeception.
  • Loading branch information
troizet committed Oct 9, 2024
1 parent 8cab2ae commit fe5a2da
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ public final class CodeceptionLogParser extends DefaultHandler {
private enum Content {
NONE,
ERROR,
FAILURE
FAILURE,
SKIPPED
};

final XMLReader xmlReader;
Expand Down Expand Up @@ -101,6 +102,9 @@ public void startElement(String uri, String localName, String qName, Attributes
case "error": // NOI18N
startTestError(attributes);
break;
case "skipped": // NOI18N
startTestSkipped(attributes);
break;
default:
// noop
}
Expand Down Expand Up @@ -132,6 +136,7 @@ public void characters(char[] ch, int start, int length) throws SAXException {
switch (content) {
case FAILURE:
case ERROR:
case SKIPPED:
buffer.append(new String(ch, start, length));
break;
case NONE:
Expand Down Expand Up @@ -189,6 +194,11 @@ private void startTestFailure(Attributes attributes) {
content = Content.FAILURE;
}

private void startTestSkipped(Attributes attributes) {
content = Content.SKIPPED;
testCase.setSkippedStatus();
}

private void endTestContent() {
assert testCase != null;
assert buffer.length() > 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,11 @@ public void setFailureStatus() {
status = TestCase.Status.FAILED;
}

public void setSkippedStatus() {
assert status == TestCase.Status.PASSED : "Expected PASSED status but was: " + status; // NOI18N;
status = TestCase.Status.SKIPPED;
}

public TestCase.Status getStatus() {
return status;
}
Expand All @@ -171,6 +176,10 @@ public boolean isFailure() {
return status.equals(TestCase.Status.FAILED);
}

public boolean isSkipped() {
return status.equals(TestCase.Status.SKIPPED);
}

@Override
public String toString() {
return String.format("TestCaseVo{name: %s, file: %s, line: %d, time: %d, status: %s, stacktrace: %s}", // NOI18N
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="functional" tests="6" assertions="7" errors="0" failures="0" skipped="1" useless="0" time="0.190654">
<testcase name="openLoginPage" class="LoginFormCest" file="/var/www/new_yyi2/basic/tests/functional/LoginFormCest.php" feature="open login page" time="0.000000" assertions="0">
<skipped/>
</testcase>
<testcase name="internalLoginById" class="LoginFormCest" file="/var/www/new_yyi2/basic/tests/functional/LoginFormCest.php" feature="internal login by id" time="0.084995" assertions="1"/>
<testcase name="internalLoginByInstance" class="LoginFormCest" file="/var/www/new_yyi2/basic/tests/functional/LoginFormCest.php" feature="internal login by instance" time="0.020276" assertions="1"/>
<testcase name="loginWithEmptyCredentials" class="LoginFormCest" file="/var/www/new_yyi2/basic/tests/functional/LoginFormCest.php" feature="login with empty credentials" time="0.035114" assertions="2"/>
<testcase name="loginWithWrongCredentials" class="LoginFormCest" file="/var/www/new_yyi2/basic/tests/functional/LoginFormCest.php" feature="login with wrong credentials" time="0.026634" assertions="1"/>
<testcase name="loginSuccessfully" class="LoginFormCest" file="/var/www/new_yyi2/basic/tests/functional/LoginFormCest.php" feature="login successfully" time="0.023634" assertions="2"/>
</testsuite>
</testsuites>
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="unit" tests="13" assertions="74" errors="0" failures="0" skipped="1" useless="0" time="0.043183">
<testcase name="testSingleErrorMessage" class="tests\unit\widgets\AlertTest" file="/var/www/new_yyi2/basic/tests/unit/widgets/AlertTest.php" time="0.022930" assertions="5"/>
<testcase name="testMultipleErrorMessages" class="tests\unit\widgets\AlertTest" file="/var/www/new_yyi2/basic/tests/unit/widgets/AlertTest.php" time="0.001102" assertions="0">
<skipped/>
</testcase>
<testcase name="testSingleDangerMessage" class="tests\unit\widgets\AlertTest" file="/var/www/new_yyi2/basic/tests/unit/widgets/AlertTest.php" time="0.001268" assertions="5"/>
<testcase name="testMultipleDangerMessages" class="tests\unit\widgets\AlertTest" file="/var/www/new_yyi2/basic/tests/unit/widgets/AlertTest.php" time="0.001294" assertions="6"/>
<testcase name="testSingleSuccessMessage" class="tests\unit\widgets\AlertTest" file="/var/www/new_yyi2/basic/tests/unit/widgets/AlertTest.php" time="0.001147" assertions="5"/>
<testcase name="testMultipleSuccessMessages" class="tests\unit\widgets\AlertTest" file="/var/www/new_yyi2/basic/tests/unit/widgets/AlertTest.php" time="0.001416" assertions="6"/>
<testcase name="testSingleInfoMessage" class="tests\unit\widgets\AlertTest" file="/var/www/new_yyi2/basic/tests/unit/widgets/AlertTest.php" time="0.002299" assertions="5"/>
<testcase name="testMultipleInfoMessages" class="tests\unit\widgets\AlertTest" file="/var/www/new_yyi2/basic/tests/unit/widgets/AlertTest.php" time="0.002400" assertions="6"/>
<testcase name="testSingleWarningMessage" class="tests\unit\widgets\AlertTest" file="/var/www/new_yyi2/basic/tests/unit/widgets/AlertTest.php" time="0.001816" assertions="5"/>
<testcase name="testMultipleWarningMessages" class="tests\unit\widgets\AlertTest" file="/var/www/new_yyi2/basic/tests/unit/widgets/AlertTest.php" time="0.001602" assertions="6"/>
<testcase name="testSingleMixedMessages" class="tests\unit\widgets\AlertTest" file="/var/www/new_yyi2/basic/tests/unit/widgets/AlertTest.php" time="0.001809" assertions="9"/>
<testcase name="testMultipleMixedMessages" class="tests\unit\widgets\AlertTest" file="/var/www/new_yyi2/basic/tests/unit/widgets/AlertTest.php" time="0.002266" assertions="14"/>
<testcase name="testFlashIntegrity" class="tests\unit\widgets\AlertTest" file="/var/www/new_yyi2/basic/tests/unit/widgets/AlertTest.php" time="0.001833" assertions="2"/>
</testsuite>
</testsuites>
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;
import java.util.Arrays;
import org.netbeans.junit.NbTestCase;
import org.netbeans.modules.php.spi.testing.run.TestCase;

Expand Down Expand Up @@ -216,6 +217,48 @@ public void testParseLogWithWarningPhpUnitSuite() throws Exception {
assertEquals("Trying to configure method \"getBarAAA\" which cannot be configured because it does not exist, has not been specified, is final, or is static", testCase.getStackTrace()[0]);
}

public void testParseLogSkippedUnitTests() throws Exception {
Reader reader = createReader("codeception-log-skipped-unit-tests.xml");
TestSessionVo testSession = new TestSessionVo();

CodeceptionLogParser.parse(reader, testSession);
assertEquals(43, testSession.getTime());
assertEquals(13, testSession.getTests());

assertEquals(1, testSession.getTestSuites().size());

TestSuiteVo testSuite = testSession.getTestSuites().get(0);
assertEquals("unit", testSuite.getName());
assertEquals(null, testSuite.getLocation());
assertEquals(43, testSuite.getTime());
assertEquals(13, testSuite.getTestCases().size());

TestCaseVo testCase = testSuite.getTestCases().get(1);
assertTrue(testCase.isSkipped());
assertTrue(Arrays.asList(testCase.getStackTrace()).isEmpty());
}

public void testParseLogSkippedFunctionalTests() throws Exception {
Reader reader = createReader("codeception-log-skipped-functional-tests.xml");
TestSessionVo testSession = new TestSessionVo();

CodeceptionLogParser.parse(reader, testSession);
assertEquals(191, testSession.getTime());
assertEquals(6, testSession.getTests());

assertEquals(1, testSession.getTestSuites().size());

TestSuiteVo testSuite = testSession.getTestSuites().get(0);
assertEquals("functional", testSuite.getName());
assertEquals(null, testSuite.getLocation());
assertEquals(191, testSuite.getTime());
assertEquals(6, testSuite.getTestCases().size());

TestCaseVo testCase = testSuite.getTestCases().get(0);
assertTrue(testCase.isSkipped());
assertTrue(Arrays.asList(testCase.getStackTrace()).isEmpty());
}

private Reader createReader(String filename) throws FileNotFoundException {
return new BufferedReader(new FileReader(new File(getDataDir(), filename)));
}
Expand Down

0 comments on commit fe5a2da

Please sign in to comment.