1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
<?php declare(strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PHPUnit\TextUI\Command;
use const PHP_EOL;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Small;
use PHPUnit\Framework\MockObject\Stub;
use PHPUnit\Framework\TestCase;
use PHPUnit\Util\Http\Downloader;
#[CoversClass(VersionCheckCommand::class)]
#[Small]
final class VersionCheckCommandTest extends TestCase
{
/**
* @return non-empty-list<array{0: non-empty-string, 1: non-negative-int, 2: positive-int, 3: non-empty-string, 4: non-empty-string, 5: non-empty-string}>
*/
public static function provider(): array
{
return [
[
'You are using the latest version of PHPUnit.' . PHP_EOL,
Result::SUCCESS,
10,
'10.5.0',
'10.5.0',
'10.5.0',
],
[
'You are not using the latest version of PHPUnit.' . PHP_EOL .
'The latest version compatible with PHPUnit 10.5.0 is PHPUnit 10.5.1.' . PHP_EOL .
'The latest version is PHPUnit 10.5.1.' . PHP_EOL,
Result::FAILURE,
10,
'10.5.0',
'10.5.1',
'10.5.1',
],
[
'You are not using the latest version of PHPUnit.' . PHP_EOL .
'The latest version compatible with PHPUnit 10.5.0 is PHPUnit 10.5.1.' . PHP_EOL .
'The latest version is PHPUnit 11.0.0.' . PHP_EOL,
Result::FAILURE,
10,
'10.5.0',
'11.0.0',
'10.5.1',
],
];
}
/**
* @param non-empty-string $expectedMessage
* @param non-negative-int $expectedShellExitCode
* @param positive-int $majorVersionNumber
* @param non-empty-string $versionId
* @param non-empty-string $latestVersion
* @param non-empty-string $latestCompatibleVersion
*/
#[DataProvider('provider')]
public function testChecksVersion(string $expectedMessage, int $expectedShellExitCode, int $majorVersionNumber, string $versionId, string $latestVersion, string $latestCompatibleVersion): void
{
$command = new VersionCheckCommand(
$this->downloader($latestVersion, $latestCompatibleVersion),
$majorVersionNumber,
$versionId,
);
$result = $command->execute();
$this->assertSame($expectedMessage, $result->output());
$this->assertSame($expectedShellExitCode, $result->shellExitCode());
}
private function downloader(string $latestVersion, string $latestCompatibleVersion): Downloader&Stub
{
$downloader = $this->createStub(Downloader::class);
$downloader
->method('download')
->willReturn($latestVersion, $latestCompatibleVersion);
return $downloader;
}
}
|