Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
174 changes: 87 additions & 87 deletions src/Support/StateGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,21 @@
use PHPUnit\Event\Code\TestDoxBuilder;
use PHPUnit\Event\Code\TestMethod;
use PHPUnit\Event\Code\ThrowableBuilder;
use PHPUnit\Event\Test\ConsideredRisky;
use PHPUnit\Event\Test\Errored;
use PHPUnit\Event\Test\Failed;
use PHPUnit\Event\Test\MarkedIncomplete;
use PHPUnit\Event\Test\PhpunitDeprecationTriggered;
use PHPUnit\Event\Test\PhpunitErrorTriggered;
use PHPUnit\Event\Test\PhpunitNoticeTriggered;
use PHPUnit\Event\Test\PhpunitWarningTriggered;
use PHPUnit\Event\TestData\TestDataCollection;
use PHPUnit\Event\TestRunner\DeprecationTriggered;
use PHPUnit\Event\TestRunner\NoticeTriggered;
use PHPUnit\Event\TestRunner\WarningTriggered;
use PHPUnit\Framework\SkippedWithMessageException;
use PHPUnit\Metadata\MetadataCollection;
use PHPUnit\TestRunner\TestResult\Issues\Issue;
use PHPUnit\TestRunner\TestResult\TestResult as PHPUnitTestResult;

final class StateGenerator
Expand Down Expand Up @@ -55,23 +61,8 @@ public function fromPhpUnitTestResult(int $passedTests, PHPUnitTestResult $testR

$this->addTriggeredPhpunitEvents($state, $testResult->testTriggeredPhpunitErrorEvents(), TestResult::FAIL);

foreach ($testResult->testMarkedIncompleteEvents() as $testResultEvent) {
$state->add(TestResult::fromPestParallelTestCase(
$testResultEvent->test(),
TestResult::INCOMPLETE,
$testResultEvent->throwable()
));
}

foreach ($testResult->testConsideredRiskyEvents() as $riskyEvents) {
foreach ($riskyEvents as $riskyEvent) {
$state->add(TestResult::fromPestParallelTestCase(
$riskyEvent->test(),
TestResult::RISKY,
ThrowableBuilder::from(new TestOutcome($riskyEvent->message()))
));
}
}
$this->addThrowableEvents($state, $testResult->testMarkedIncompleteEvents(), TestResult::INCOMPLETE);
$this->addTriggeredPhpunitEvents($state, $testResult->testConsideredRiskyEvents(), TestResult::RISKY);

foreach ($testResult->testSkippedEvents() as $testResultEvent) {
if ($testResultEvent->message() === '__TODO__') {
Expand All @@ -87,84 +78,34 @@ public function fromPhpUnitTestResult(int $passedTests, PHPUnitTestResult $testR
));
}

foreach ($testResult->deprecations() as $testResultEvent) {
foreach ($testResultEvent->triggeringTests() as $triggeringTest) {
['test' => $test] = $triggeringTest;

$state->add(TestResult::fromPestParallelTestCase(
$test,
TestResult::DEPRECATED,
ThrowableBuilder::from(new TestOutcome($testResultEvent->description()))
));
}
}

foreach ($testResult->phpDeprecations() as $testResultEvent) {
foreach ($testResultEvent->triggeringTests() as $triggeringTest) {
['test' => $test] = $triggeringTest;

$state->add(TestResult::fromPestParallelTestCase(
$test,
TestResult::DEPRECATED,
ThrowableBuilder::from(new TestOutcome($testResultEvent->description()))
));
}
}

$this->addIssueEvents($state, $testResult->deprecations(), TestResult::DEPRECATED);
$this->addIssueEvents($state, $testResult->phpDeprecations(), TestResult::DEPRECATED);
$this->addTriggeredPhpunitEvents($state, $testResult->testTriggeredPhpunitDeprecationEvents(), TestResult::DEPRECATED);

foreach ($testResult->notices() as $testResultEvent) {
foreach ($testResultEvent->triggeringTests() as $triggeringTest) {
['test' => $test] = $triggeringTest;

$state->add(TestResult::fromPestParallelTestCase(
$test,
TestResult::NOTICE,
ThrowableBuilder::from(new TestOutcome($testResultEvent->description()))
));
}
}

foreach ($testResult->phpNotices() as $testResultEvent) {
foreach ($testResultEvent->triggeringTests() as $triggeringTest) {
['test' => $test] = $triggeringTest;

$state->add(TestResult::fromPestParallelTestCase(
$test,
TestResult::NOTICE,
ThrowableBuilder::from(new TestOutcome($testResultEvent->description()))
));
}
}

$this->addIssueEvents($state, $testResult->notices(), TestResult::NOTICE);
$this->addIssueEvents($state, $testResult->phpNotices(), TestResult::NOTICE);
$this->addTriggeredPhpunitEvents($state, $testResult->testTriggeredPhpunitNoticeEvents(), TestResult::NOTICE);

foreach ($testResult->warnings() as $testResultEvent) {
foreach ($testResultEvent->triggeringTests() as $triggeringTest) {
['test' => $test] = $triggeringTest;

$state->add(TestResult::fromPestParallelTestCase(
$test,
TestResult::WARN,
ThrowableBuilder::from(new TestOutcome($testResultEvent->description()))
));
}
}

$this->addIssueEvents($state, $testResult->warnings(), TestResult::WARN);
$this->addIssueEvents($state, $testResult->phpWarnings(), TestResult::WARN);
$this->addTriggeredPhpunitEvents($state, $testResult->testTriggeredPhpunitWarningEvents(), TestResult::WARN);

foreach ($testResult->phpWarnings() as $testResultEvent) {
foreach ($testResultEvent->triggeringTests() as $triggeringTest) {
['test' => $test] = $triggeringTest;
$this->addIssueEvents($state, $testResult->errors(), TestResult::FAIL);

$state->add(TestResult::fromPestParallelTestCase(
$test,
TestResult::WARN,
ThrowableBuilder::from(new TestOutcome($testResultEvent->description()))
));
}
foreach ($testResult->testSuiteSkippedEvents() as $index => $testResultEvent) {
$this->addStandaloneEvent(
$state,
$testResultEvent->testSuite()->name(),
TestResult::SKIPPED,
$testResultEvent->message(),
$index,
);
}

$this->addStandaloneEvents($state, $testResult->testRunnerTriggeredDeprecationEvents(), 'PHPUnit test runner deprecation', TestResult::DEPRECATED);
$this->addStandaloneEvents($state, $testResult->testRunnerTriggeredNoticeEvents(), 'PHPUnit test runner notice', TestResult::NOTICE);
$this->addStandaloneEvents($state, $testResult->testRunnerTriggeredWarningEvents(), 'PHPUnit test runner warning', TestResult::WARN);

// for each test that passed, we need to add it to the state
for ($i = 0; $i < $passedTests; $i++) {
$state->add(TestResult::fromPestParallelTestCase(
Expand All @@ -185,7 +126,37 @@ public function fromPhpUnitTestResult(int $passedTests, PHPUnitTestResult $testR
}

/**
* @param array<string, list<PhpunitDeprecationTriggered|PhpunitErrorTriggered|PhpunitNoticeTriggered|PhpunitWarningTriggered>> $testResultEvents
* @param list<Issue> $issues
*/
private function addIssueEvents(State $state, array $issues, string $type): void
{
foreach ($issues as $issue) {
foreach ($issue->triggeringTests() as ['test' => $test]) {
$state->add(TestResult::fromPestParallelTestCase(
$test,
$type,
ThrowableBuilder::from(new TestOutcome($issue->description()))
));
}
}
}

/**
* @param list<Failed|MarkedIncomplete> $events
*/
private function addThrowableEvents(State $state, array $events, string $type): void
{
foreach ($events as $event) {
$state->add(TestResult::fromPestParallelTestCase(
$event->test(),
$type,
$event->throwable(),
));
}
}

/**
* @param array<string, list<ConsideredRisky|PhpunitDeprecationTriggered|PhpunitErrorTriggered|PhpunitNoticeTriggered|PhpunitWarningTriggered>> $testResultEvents
*/
private function addTriggeredPhpunitEvents(State $state, array $testResultEvents, string $type): void
{
Expand All @@ -203,4 +174,33 @@ private function addTriggeredPhpunitEvents(State $state, array $testResultEvents
}
}
}

/**
* @param list<DeprecationTriggered|NoticeTriggered|WarningTriggered> $events
*/
private function addStandaloneEvents(State $state, array $events, string $className, string $type): void
{
foreach ($events as $index => $event) {
$this->addStandaloneEvent($state, $className, $type, $event->message(), $index);
}
}

private function addStandaloneEvent(State $state, string $className, string $type, string $message, int $index): void
{
$methodName = 'event#'.$index;

$state->add(TestResult::fromPestParallelTestCase(
new TestMethod(
$className, // @phpstan-ignore-line
$methodName, // @phpstan-ignore-line
' ', // @phpstan-ignore-line
1,
TestDoxBuilder::fromClassNameAndMethodName($className, $methodName), // @phpstan-ignore-line
MetadataCollection::fromArray([]),
TestDataCollection::fromArray([]),
),
$type,
ThrowableBuilder::from(new TestOutcome($message))
));
}
}
4 changes: 2 additions & 2 deletions tests/.snapshots/Failure.php.inc
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@
##teamcity[testSuiteFinished name='Tests/tests/Failure' flowId='1234']
##teamcity[testSuiteFinished name='Tests/tests/Failure' flowId='1234']

Tests: 3 failed, 1 risky, 2 todos, 1 skipped, 1 passed (3 assertions)
Tests: 3 failed, 4 warnings, 1 risky, 2 todos, 1 skipped, 1 passed (3 assertions)
Duration: 1.00s


Tests: 3 failed, 1 risky, 2 todos, 1 skipped, 1 passed (3 assertions)
Tests: 3 failed, 4 warnings, 1 risky, 2 todos, 1 skipped, 1 passed (3 assertions)
Duration: 1.00s

10 changes: 9 additions & 1 deletion tests/.snapshots/success.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1820,6 +1820,14 @@
✓ it gets properties from classes
✓ it gets methods from classes

PASS Tests\Unit\Support\StateGenerator
✓ it records errors as failed results
✓ it records test runner triggered deprecation events
✓ it records test runner triggered notice events
✓ it records test runner triggered warning events
✓ it records test suite skipped events
✓ it keeps multiple standalone events as distinct entries

PASS Tests\Unit\Support\Str
✓ it evaluates the code with ('version()', '__pest_evaluable_version__')
✓ it evaluates the code with ('version__ ', '__pest_evaluable_version_____')
Expand Down Expand Up @@ -1938,4 +1946,4 @@
✓ pass with dataset with ('my-datas-set-value')
✓ within describe → pass with dataset with ('my-datas-set-value')

Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 40 todos, 35 skipped, 1329 passed (3010 assertions)
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 40 todos, 35 skipped, 1335 passed (3030 assertions)
Loading
Loading