packages/deriver/tests/Unit/Reporter/TextReporterTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Reporter;
6
7use Deriver\Deriver\Candidate;
8use Deriver\Deriver\Candidate\Alternative;
9use Deriver\Deriver\Candidate\CandidateCollection;
10use Deriver\Deriver\Candidate\ResultRef;
11use Deriver\Deriver\Candidate\Snapshot;
12use Deriver\Deriver\Evaluator\Evidence\EvidenceKind;
13use Deriver\Deriver\Evaluator\Evidence\Node;
14use Deriver\Deriver\Evaluator\Term;
15use Deriver\Reporter\TextReporter;
16use PHPUnit\Framework\Attributes\CoversNothing;
17use PHPUnit\Framework\TestCase;
18
19#[CoversNothing]
20final class TextReporterTest extends TestCase
21{
22 public function testReportKeepsNativeLiteralTypesVisible(): void
23 {
24 $node = new Node(EvidenceKind::Observation);
25 $evidence = [new Alternative($node, $node, new Snapshot('s', [], [], new \Deriver\Deriver\Evaluator\TargetProfile(), 'environment'))];
26 $candidates = new CandidateCollection([new Candidate(Term::fromNative(['id' => 7, 'enabled' => false]), $evidence)], new ResultRef('r'));
27 $text = (new TextReporter())->report($candidates);
28 self::assertStringContainsString('[0] analyzed array', $text);
29 self::assertStringContainsString("'enabled' => false", $text);
30 self::assertStringContainsString('Evidence: 1 derivation(s).', $text);
31 }
32
33 public function testReportDistinguishesPartialsAndInterruption(): void
34 {
35 $node = new Node(EvidenceKind::Observation);
36 $evidence = [new Alternative($node, $node, new Snapshot('s', [], [], new \Deriver\Deriver\Evaluator\TargetProfile(), 'environment'))];
37 $candidates = new CandidateCollection([new Candidate(Term::parameter('id', 'int'), $evidence)], new ResultRef('r'), interrupted: true);
38 $text = (new TextReporter())->report($candidates);
39 self::assertStringContainsString('[0] partials int', $text);
40 self::assertStringContainsString("'literal' => 'id'", $text);
41 self::assertStringContainsString('Exploration interrupted', $text);
42 }
43
44 public function testReportDescribesAnEmptyCollection(): void
45 {
46 self::assertSame("No candidates.\n", (new TextReporter())->report(new CandidateCollection([], new ResultRef('r'))));
47 }
48}
49