snapshot()->userCpuTime(); return new Info( $system->snapshot(), $zeroDuration, $zeroMemory, $zeroDuration, $zeroMemory, $zeroCpuTime, $zeroCpuTime, $zeroCpuTime, $zeroCpuTime, $zeroCpuTime, $zeroCpuTime, ); } it('keys a result per dataset row rather than per method', function (): void { $collector = new ResultCollector; $subscriber = new EnsureTiaResultsAreCollected($collector); $subscriber->notify(new PreparationStarted(tiaResultKeyTelemetryInfo(), tiaResultKeyTestMethod('opp'))); $collector->testPassed(); $collector->finishTest(); $subscriber->notify(new PreparationStarted(tiaResultKeyTelemetryInfo(), tiaResultKeyTestMethod('fake'))); $collector->testSkipped('the fake driver does not report balances'); $collector->finishTest(); // Without the dataset in the key both rows write to `Class::method`, so the // second one overwrites the first and a replay hands every row the same // status — a passing row reported as skipped, or a failing one as passed. expect(array_keys($collector->all()))->toBe([ 'Tests\Feature\OrderTest::it prices an order#opp', 'Tests\Feature\OrderTest::it prices an order#fake', ]); }); it('records assertions against the same per-dataset key', function (): void { $collector = new ResultCollector; new EnsureTiaResultsAreCollected($collector)->notify( new PreparationStarted(tiaResultKeyTelemetryInfo(), tiaResultKeyTestMethod('opp')), ); $collector->testPassed(); new EnsureTiaAssertionsAreRecordedOnFinished($collector)->notify( new Finished(tiaResultKeyTelemetryInfo(), tiaResultKeyTestMethod('opp'), 7), ); expect($collector->all()['Tests\Feature\OrderTest::it prices an order#opp']['assertions'])->toBe(7); }); it('leaves a test without a dataset keyed by class and method', function (): void { $collector = new ResultCollector; new EnsureTiaResultsAreCollected($collector)->notify( new PreparationStarted(tiaResultKeyTelemetryInfo(), tiaResultKeyTestMethod(null)), ); $collector->testPassed(); expect(array_keys($collector->all()))->toBe(['Tests\Feature\OrderTest::it prices an order']); });