packages/requirements/tests/Unit/Source/SourceExtensionTest.php

1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Source;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\Small;
9use PHPUnit\Framework\Attributes\UsesClass;
10use PHPUnit\Framework\TestCase;
11use Requirements\Model\Source;
12use Requirements\Source\LocalFile;
13use Requirements\Source\ResourceLoader;
14use Requirements\Source\ResourceLocation;
15use Requirements\Source\SourceExtension;
16use Requirements\Source\TextSource;
17use Requirements\Source\Unit;
18use Tests\Fake\ProjectDirectory;
19
20#[CoversClass(SourceExtension::class)]
21#[UsesClass(LocalFile::class)]
22#[UsesClass(ResourceLoader::class)]
23#[UsesClass(ResourceLocation::class)]
24#[UsesClass(Source::class)]
25#[UsesClass(TextSource::class)]
26#[UsesClass(Unit::class)]
27#[Small]
28final class SourceExtensionTest extends TestCase
29{
30    public function testSelectReturnsTheUnitsOfTheScopeOrOfAnEvidenceSelector(): void
31    {
32        $project = new ProjectDirectory();
33        $project->put('notes.txt', "Names start with a letter.\nNames may contain digits.\n");
34        $source = new Source('notes', 'notes.txt', 'text', 'lines:1-2');
35        $extension = new TextSource();
36
37        self::assertEquals([new Unit('line:1', 'Names start with a letter.'), new Unit('line:2', 'Names may contain digits.')], $extension->select($source, $source->selector, $project->directory, false));
38        self::assertEquals([new Unit('line:2', 'Names may contain digits.')], $extension->select($source, 'lines:2', $project->directory, false));
39    }
40}
41