assertion | new? |
---|---|
assertObjectHasProperty | new |
assertObjectNotHasProperty | new |
assertFileMatchesFormat | new |
assertFileMatchesFormatFile | new |
assertArrayHasKey | exists |
assertArrayNotHasKey | exists |
assertIsList | exists |
assertContains | exists |
assertContainsEquals | exists |
assertNotContains | exists |
assertNotContainsEquals | exists |
assertContainsOnly | exists |
assertContainsOnlyInstancesOf | exists |
assertNotContainsOnly | exists |
assertCount | exists |
assertNotCount | exists |
assertEquals | exists |
assertEqualsCanonicalizing | exists |
assertEqualsIgnoringCase | exists |
assertEqualsWithDelta | exists |
assertNotEquals | exists |
assertNotEqualsCanonicalizing | exists |
assertNotEqualsIgnoringCase | exists |
assertNotEqualsWithDelta | exists |
assertObjectEquals | exists |
assertEmpty | exists |
assertNotEmpty | exists |
assertGreaterThan | exists |
assertGreaterThanOrEqual | exists |
assertLessThan | exists |
assertLessThanOrEqual | exists |
assertFileEquals | exists |
assertFileEqualsCanonicalizing | exists |
assertFileEqualsIgnoringCase | exists |
assertFileNotEquals | exists |
assertFileNotEqualsCanonicalizing | exists |
assertFileNotEqualsIgnoringCase | exists |
assertStringEqualsFile | exists |
assertStringEqualsFileCanonicalizing | exists |
assertStringEqualsFileIgnoringCase | exists |
assertStringNotEqualsFile | exists |
assertStringNotEqualsFileCanonicalizing | exists |
assertStringNotEqualsFileIgnoringCase | exists |
assertIsReadable | exists |
assertIsNotReadable | exists |
assertIsWritable | exists |
assertIsNotWritable | exists |
assertDirectoryExists | exists |
assertDirectoryDoesNotExist | exists |
assertDirectoryIsReadable | exists |
assertDirectoryIsNotReadable | exists |
assertDirectoryIsWritable | exists |
assertDirectoryIsNotWritable | exists |
assertFileExists | exists |
assertFileDoesNotExist | exists |
assertFileIsReadable | exists |
assertFileIsNotReadable | exists |
assertFileIsWritable | exists |
assertFileIsNotWritable | exists |
assertTrue | exists |
assertNotTrue | exists |
assertFalse | exists |
assertNotFalse | exists |
assertNull | exists |
assertNotNull | exists |
assertFinite | exists |
assertInfinite | exists |
assertNan | exists |
assertSame | exists |
assertNotSame | exists |
assertInstanceOf | exists |
assertNotInstanceOf | exists |
assertIsArray | exists |
assertIsBool | exists |
assertIsFloat | exists |
assertIsInt | exists |
assertIsNumeric | exists |
assertIsObject | exists |
assertIsResource | exists |
assertIsClosedResource | exists |
assertIsString | exists |
assertIsScalar | exists |
assertIsCallable | exists |
assertIsIterable | exists |
assertIsNotArray | exists |
assertIsNotBool | exists |
assertIsNotFloat | exists |
assertIsNotInt | exists |
assertIsNotNumeric | exists |
assertIsNotObject | exists |
assertIsNotResource | exists |
assertIsNotClosedResource | exists |
assertIsNotString | exists |
assertIsNotScalar | exists |
assertIsNotCallable | exists |
assertIsNotIterable | exists |
assertMatchesRegularExpression | exists |
assertDoesNotMatchRegularExpression | exists |
assertSameSize | exists |
assertNotSameSize | exists |
assertStringContainsStringIgnoringLineEndings | exists |
assertStringEqualsStringIgnoringLineEndings | exists |
assertStringMatchesFormat | exists |
assertStringNotMatchesFormat | exists |
assertStringMatchesFormatFile | exists |
assertStringNotMatchesFormatFile | exists |
assertStringStartsWith | exists |
assertStringStartsNotWith | exists |
assertStringContainsString | exists |
assertStringContainsStringIgnoringCase | exists |
assertStringNotContainsString | exists |
assertStringNotContainsStringIgnoringCase | exists |
assertStringEndsWith | exists |
assertStringEndsNotWith | exists |
assertXmlFileEqualsXmlFile | exists |
assertXmlFileNotEqualsXmlFile | exists |
assertXmlStringEqualsXmlFile | exists |
assertXmlStringNotEqualsXmlFile | exists |
assertXmlStringEqualsXmlString | exists |
assertXmlStringNotEqualsXmlString | exists |
assertThat | exists |
assertJson | exists |
assertJsonStringEqualsJsonString | exists |
assertJsonStringNotEqualsJsonString | exists |
assertJsonStringEqualsJsonFile | exists |
assertJsonStringNotEqualsJsonFile | exists |
assertJsonFileEqualsJsonFile | exists |
assertJsonFileNotEqualsJsonFile | exists |
Last active
May 28, 2024 16:12
-
-
Save o0h/fe9bf8d952362bf7332d41462335bc73 to your computer and use it in GitHub Desktop.
Compare the differences in assertion methods provided across two versions of PHPUnit
assertion | new? |
---|---|
assertArrayIsEqualToArrayOnlyConsideringListOfKeys | new |
assertArrayIsEqualToArrayIgnoringListOfKeys | new |
assertArrayIsIdenticalToArrayOnlyConsideringListOfKeys | new |
assertArrayIsIdenticalToArrayIgnoringListOfKeys | new |
assertObjectHasProperty | new |
assertObjectNotHasProperty | new |
assertFileMatchesFormat | new |
assertFileMatchesFormatFile | new |
assertArrayHasKey | exists |
assertArrayNotHasKey | exists |
assertIsList | exists |
assertContains | exists |
assertContainsEquals | exists |
assertNotContains | exists |
assertNotContainsEquals | exists |
assertContainsOnly | exists |
assertContainsOnlyInstancesOf | exists |
assertNotContainsOnly | exists |
assertCount | exists |
assertNotCount | exists |
assertEquals | exists |
assertEqualsCanonicalizing | exists |
assertEqualsIgnoringCase | exists |
assertEqualsWithDelta | exists |
assertNotEquals | exists |
assertNotEqualsCanonicalizing | exists |
assertNotEqualsIgnoringCase | exists |
assertNotEqualsWithDelta | exists |
assertObjectEquals | exists |
assertEmpty | exists |
assertNotEmpty | exists |
assertGreaterThan | exists |
assertGreaterThanOrEqual | exists |
assertLessThan | exists |
assertLessThanOrEqual | exists |
assertFileEquals | exists |
assertFileEqualsCanonicalizing | exists |
assertFileEqualsIgnoringCase | exists |
assertFileNotEquals | exists |
assertFileNotEqualsCanonicalizing | exists |
assertFileNotEqualsIgnoringCase | exists |
assertStringEqualsFile | exists |
assertStringEqualsFileCanonicalizing | exists |
assertStringEqualsFileIgnoringCase | exists |
assertStringNotEqualsFile | exists |
assertStringNotEqualsFileCanonicalizing | exists |
assertStringNotEqualsFileIgnoringCase | exists |
assertIsReadable | exists |
assertIsNotReadable | exists |
assertIsWritable | exists |
assertIsNotWritable | exists |
assertDirectoryExists | exists |
assertDirectoryDoesNotExist | exists |
assertDirectoryIsReadable | exists |
assertDirectoryIsNotReadable | exists |
assertDirectoryIsWritable | exists |
assertDirectoryIsNotWritable | exists |
assertFileExists | exists |
assertFileDoesNotExist | exists |
assertFileIsReadable | exists |
assertFileIsNotReadable | exists |
assertFileIsWritable | exists |
assertFileIsNotWritable | exists |
assertTrue | exists |
assertNotTrue | exists |
assertFalse | exists |
assertNotFalse | exists |
assertNull | exists |
assertNotNull | exists |
assertFinite | exists |
assertInfinite | exists |
assertNan | exists |
assertSame | exists |
assertNotSame | exists |
assertInstanceOf | exists |
assertNotInstanceOf | exists |
assertIsArray | exists |
assertIsBool | exists |
assertIsFloat | exists |
assertIsInt | exists |
assertIsNumeric | exists |
assertIsObject | exists |
assertIsResource | exists |
assertIsClosedResource | exists |
assertIsString | exists |
assertIsScalar | exists |
assertIsCallable | exists |
assertIsIterable | exists |
assertIsNotArray | exists |
assertIsNotBool | exists |
assertIsNotFloat | exists |
assertIsNotInt | exists |
assertIsNotNumeric | exists |
assertIsNotObject | exists |
assertIsNotResource | exists |
assertIsNotClosedResource | exists |
assertIsNotString | exists |
assertIsNotScalar | exists |
assertIsNotCallable | exists |
assertIsNotIterable | exists |
assertMatchesRegularExpression | exists |
assertDoesNotMatchRegularExpression | exists |
assertSameSize | exists |
assertNotSameSize | exists |
assertStringContainsStringIgnoringLineEndings | exists |
assertStringEqualsStringIgnoringLineEndings | exists |
assertStringMatchesFormat | exists |
assertStringNotMatchesFormat | exists |
assertStringMatchesFormatFile | exists |
assertStringNotMatchesFormatFile | exists |
assertStringStartsWith | exists |
assertStringStartsNotWith | exists |
assertStringContainsString | exists |
assertStringContainsStringIgnoringCase | exists |
assertStringNotContainsString | exists |
assertStringNotContainsStringIgnoringCase | exists |
assertStringEndsWith | exists |
assertStringEndsNotWith | exists |
assertXmlFileEqualsXmlFile | exists |
assertXmlFileNotEqualsXmlFile | exists |
assertXmlStringEqualsXmlFile | exists |
assertXmlStringNotEqualsXmlFile | exists |
assertXmlStringEqualsXmlString | exists |
assertXmlStringNotEqualsXmlString | exists |
assertThat | exists |
assertJson | exists |
assertJsonStringEqualsJsonString | exists |
assertJsonStringNotEqualsJsonString | exists |
assertJsonStringEqualsJsonFile | exists |
assertJsonStringNotEqualsJsonFile | exists |
assertJsonFileEqualsJsonFile | exists |
assertJsonFileNotEqualsJsonFile | exists |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php declare(strict_types=1); | |
assert(array_key_exists('GITHUB_TOKEN', $_SERVER)); | |
const TARGET_VERSIONS = [11 => '11.1.3', 10 => '10.0.0']; | |
const DOWNLOAD_DIR = __DIR__ . '/artifacts'; | |
if (!is_dir(DOWNLOAD_DIR) && !mkdir(DOWNLOAD_DIR, 0700, true)) { | |
throw new RuntimeException('Failed to create directory: ' . DOWNLOAD_DIR); | |
} elseif (!is_writable(DOWNLOAD_DIR)) { | |
chmod(DOWNLOAD_DIR, 0700); | |
} | |
$packageJson = file_get_contents('https://repo.packagist.org/p2/phpunit/phpunit.json'); | |
$packages = json_decode($packageJson, true); | |
$requestContext = stream_context_create([ | |
'http' => [ | |
'header' => [ | |
'User-Agent: php-program', | |
"Authorization: token {$_SERVER['GITHUB_TOKEN']}" | |
], | |
], | |
]); | |
foreach ($packages['packages']['phpunit/phpunit'] as $versionedPackage) { | |
$fullVersion = $versionedPackage['version']; | |
if (!in_array($fullVersion, TARGET_VERSIONS, true)) { | |
continue; | |
} | |
if (glob(DOWNLOAD_DIR . "/{$fullVersion}/**/composer.json")) { | |
continue; | |
} | |
$dist = $versionedPackage['dist']['url']; | |
$tmpFile = tempnam(sys_get_temp_dir(), 'zip'); | |
file_put_contents($tmpFile, file_get_contents($dist, context: $requestContext)); | |
$zip = new ZipArchive(); | |
$zip->open($tmpFile); | |
$zip->extractTo(DOWNLOAD_DIR . '/' . $fullVersion); | |
$zip->close(); | |
unlink($tmpFile); | |
} | |
$versionAssertions = []; | |
foreach (TARGET_VERSIONS as $majorVersion => $fullVersion) { | |
$rootDir = glob(DOWNLOAD_DIR . "/{$fullVersion}/*", GLOB_ONLYDIR)[0]; | |
$srcPath = "{$rootDir}/src/Framework/Assert.php"; | |
$src = str_replace( | |
'namespace PHPUnit\Framework;', | |
"namespace PHPUnit{$majorVersion}\\Framework;", | |
file_get_contents($srcPath) | |
); | |
eval(substr($src, 5)); | |
$reflection = new ReflectionClass("\\PHPUnit{$majorVersion}\\Framework\\Assert"); | |
$methods = $reflection->getMethods(); | |
$versionAssertions[$majorVersion] = []; | |
foreach ($methods as $method) { | |
$methodName = $method->getName(); | |
if (!str_starts_with($methodName, 'assert')) { | |
continue; | |
} | |
$versionAssertions[$majorVersion][] = $methodName; | |
} | |
} | |
$targetVersions = TARGET_VERSIONS; | |
arsort($targetVersions); | |
$newer = key($targetVersions); | |
$assertions = array_fill_keys($versionAssertions[$newer], '0. new'); | |
foreach ($versionAssertions[10] as $assertion) { | |
if (array_key_exists($assertion, $assertions)) { | |
$assertions[$assertion] = '1. exists'; | |
} else { | |
$assertions[$assertion] = '2. removed'; | |
} | |
} | |
asort($assertions); | |
$op = new SplFileObject(__DIR__ . '/README.md', 'w'); | |
$op->fwrite('| assertion | new? |' . PHP_EOL); | |
$op->fwrite('| --- | --- |' . PHP_EOL); | |
foreach ($assertions as $assertion => $status) { | |
$status = substr($status, 3); | |
$op->fwrite("| {$assertion} | {$status} |" . PHP_EOL); | |
} | |
unset($op); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment