Files
nih-php-command-builder/tests/unit/StdioTest.php
2026-02-15 15:46:27 +01:00

82 lines
1.8 KiB
PHP

<?php
namespace Nih\CommandBuilder;
use InvalidArgumentException;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
#[CoversClass(Stdio::class)]
final class StdioTest extends TestCase
{
public function testNull(): void
{
$null = match (PHP_OS_FAMILY) {
'Windows' => 'nul',
default => '/dev/null',
};
$this->assertEquals(
['file', $null, 'r'],
Stdio::null()->getDescriptiorSpec(0),
);
$this->assertEquals(
['file', $null, 'w'],
Stdio::null()->getDescriptiorSpec(1),
);
$this->assertEquals(
['file', $null, 'w'],
Stdio::null()->getDescriptiorSpec(2),
);
}
public function testInherit(): void
{
$this->assertEquals(
STDIN,
Stdio::inherit()->getDescriptiorSpec(0),
);
$this->assertEquals(
STDOUT,
Stdio::inherit()->getDescriptiorSpec(1),
);
$this->assertEquals(
STDERR,
Stdio::inherit()->getDescriptiorSpec(2),
);
}
public function testFile(): void
{
$this->assertEquals(
['file', '/foo/bar/baz', 'r'],
Stdio::file('/foo/bar/baz', 'r')->getDescriptiorSpec(0),
);
}
public function testStream(): void
{
$this->assertEquals(
STDOUT,
Stdio::stream(STDOUT)->getDescriptiorSpec(0),
);
}
public function testThrowsOnInvalidStream(): void
{
$handle = fopen('php://memory', 'w');
$this->assertNotFalse($handle);
fclose($handle);
$this->expectException(InvalidArgumentException::class);
/** @psalm-suppress InvalidArgument */
Stdio::stream($handle);
}
}