mirror of
https://github.com/pestphp/pest.git
synced 2026-09-05 06:13:35 +02:00
chore: removes --tia hidden code
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
|
||||
PASS Tests\Arch
|
||||
✓ preset → php → ignoring ['Pest\Expectation', 'debug_backtrace', 'var_export', …]
|
||||
✓ preset → strict → ignoring ['Pest\Plugins\Tia\BaselineSync', 'usleep']
|
||||
✓ preset → strict → ignoring ['usleep']
|
||||
✓ preset → security → ignoring ['eval', 'str_shuffle', 'exec', …]
|
||||
✓ globals
|
||||
|
||||
@@ -1720,47 +1720,6 @@
|
||||
PASS Tests\Unit\Plugins\Retry
|
||||
✓ it orders by defects and stop on defects if when --retry is used
|
||||
|
||||
PASS Tests\Unit\Plugins\Tia\ContentHash
|
||||
✓ of() → it returns false when file does not exist
|
||||
✓ of() → it hashes an existing file
|
||||
✓ PHP files → it produces the same hash regardless of whitespace differences
|
||||
✓ PHP files → it ignores single-line comments
|
||||
✓ PHP files → it ignores hash-style comments
|
||||
✓ PHP files → it ignores multi-line comments
|
||||
✓ PHP files → it ignores doc comments
|
||||
✓ PHP files → it detects code changes
|
||||
✓ PHP files → it preserves whitespace inside string literals
|
||||
✓ PHP files → it treats variable renames as a change
|
||||
✓ PHP files → it falls back to a raw hash for unparseable PHP
|
||||
✓ PHP files → it is case-insensitive on the file extension
|
||||
✓ Blade files → it strips blade comments
|
||||
✓ Blade files → it strips multi-line blade comments
|
||||
✓ Blade files → it collapses whitespace
|
||||
✓ Blade files → it detects content changes
|
||||
✓ Blade files → it keeps blade directives intact
|
||||
✓ Blade files → it does not use the PHP tokenizer for blade files
|
||||
✓ JavaScript-like files → it strips line comments
|
||||
✓ JavaScript-like files → it strips block comments on their own lines
|
||||
✓ JavaScript-like files → it collapses whitespace
|
||||
✓ JavaScript-like files → it detects code changes
|
||||
✓ JavaScript-like files → it does not strip inline trailing comments
|
||||
✓ JavaScript-like files → it applies the same rules to .ts files
|
||||
✓ JavaScript-like files → it applies the same rules to .tsx files
|
||||
✓ JavaScript-like files → it applies the same rules to .jsx files
|
||||
✓ JavaScript-like files → it applies the same rules to .vue files
|
||||
✓ JavaScript-like files → it applies the same rules to .svelte files
|
||||
✓ JavaScript-like files → it applies the same rules to .mjs, .cjs, and .mts files
|
||||
✓ unknown extensions → it hashes the raw content for unknown extensions
|
||||
✓ unknown extensions → it does not normalise whitespace for unknown extensions
|
||||
✓ unknown extensions → it does not strip comments for unknown extensions
|
||||
✓ unknown extensions → it hashes files with no extension as raw content
|
||||
✓ output format → it returns a 32-character hex xxh128 hash
|
||||
✓ output format → it returns a stable hash for empty content
|
||||
|
||||
PASS Tests\Unit\Plugins\Tia\IsEnabledForRun
|
||||
✓ does not throw when an integer --random-order-seed is passed as a separate argv element
|
||||
✓ still detects --tia when an integer argument is present
|
||||
|
||||
PASS Tests\Unit\Preset
|
||||
✓ preset invalid name
|
||||
✓ preset → myFramework
|
||||
@@ -1946,4 +1905,4 @@
|
||||
✓ pass with dataset with ('my-datas-set-value')
|
||||
✓ within describe → pass with dataset with ('my-datas-set-value')
|
||||
|
||||
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 40 todos, 35 skipped, 1333 passed (3020 assertions)
|
||||
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 40 todos, 35 skipped, 1296 passed (2979 assertions)
|
||||
@@ -1,7 +1,6 @@
|
||||
<?php
|
||||
|
||||
use Pest\Expectation;
|
||||
use Pest\Plugins\Tia\BaselineSync;
|
||||
|
||||
arch()->preset()->php()->ignoring([
|
||||
Expectation::class,
|
||||
@@ -14,7 +13,6 @@ arch()->preset()->php()->ignoring([
|
||||
]);
|
||||
|
||||
arch()->preset()->strict()->ignoring([
|
||||
BaselineSync::class,
|
||||
'usleep',
|
||||
]);
|
||||
|
||||
|
||||
@@ -1,261 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Pest\Plugins\Tia\ContentHash;
|
||||
|
||||
describe('of()', function () {
|
||||
it('returns false when file does not exist', function () {
|
||||
expect(ContentHash::of('/path/that/does/not/exist.php'))->toBeFalse();
|
||||
});
|
||||
|
||||
it('hashes an existing file', function () {
|
||||
$path = tempnam(sys_get_temp_dir(), 'pest_').'.php';
|
||||
file_put_contents($path, "<?php echo 'hi';");
|
||||
|
||||
try {
|
||||
expect(ContentHash::of($path))->toBeString()->not->toBeEmpty();
|
||||
} finally {
|
||||
@unlink($path);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('PHP files', function () {
|
||||
it('produces the same hash regardless of whitespace differences', function () {
|
||||
$a = ContentHash::ofContent('a.php', "<?php \$foo = 1;\n\necho \$foo;");
|
||||
$b = ContentHash::ofContent('a.php', '<?php $foo=1; echo $foo;');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('ignores single-line comments', function () {
|
||||
$a = ContentHash::ofContent('a.php', "<?php\n// this is a comment\n\$foo = 1;");
|
||||
$b = ContentHash::ofContent('a.php', "<?php\n\$foo = 1;");
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('ignores hash-style comments', function () {
|
||||
$a = ContentHash::ofContent('a.php', "<?php\n# hash comment\n\$foo = 1;");
|
||||
$b = ContentHash::ofContent('a.php', "<?php\n\$foo = 1;");
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('ignores multi-line comments', function () {
|
||||
$a = ContentHash::ofContent('a.php', "<?php\n/* a multi\n line comment */\n\$foo = 1;");
|
||||
$b = ContentHash::ofContent('a.php', "<?php\n\$foo = 1;");
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('ignores doc comments', function () {
|
||||
$a = ContentHash::ofContent('a.php', "<?php\n/**\n * @return int\n */\nfunction foo() { return 1; }");
|
||||
$b = ContentHash::ofContent('a.php', "<?php\nfunction foo() { return 1; }");
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('detects code changes', function () {
|
||||
$a = ContentHash::ofContent('a.php', '<?php $foo = 1;');
|
||||
$b = ContentHash::ofContent('a.php', '<?php $foo = 2;');
|
||||
|
||||
expect($a)->not->toBe($b);
|
||||
});
|
||||
|
||||
it('preserves whitespace inside string literals', function () {
|
||||
$a = ContentHash::ofContent('a.php', "<?php \$foo = 'hello world';");
|
||||
$b = ContentHash::ofContent('a.php', "<?php \$foo = 'helloworld';");
|
||||
|
||||
expect($a)->not->toBe($b);
|
||||
});
|
||||
|
||||
it('treats variable renames as a change', function () {
|
||||
$a = ContentHash::ofContent('a.php', '<?php $foo = 1;');
|
||||
$b = ContentHash::ofContent('a.php', '<?php $bar = 1;');
|
||||
|
||||
expect($a)->not->toBe($b);
|
||||
});
|
||||
|
||||
it('falls back to a raw hash for unparseable PHP', function () {
|
||||
$hash = ContentHash::ofContent('a.php', 'not valid php at all');
|
||||
|
||||
expect($hash)->toBeString()->not->toBeEmpty();
|
||||
});
|
||||
|
||||
it('is case-insensitive on the file extension', function () {
|
||||
$a = ContentHash::ofContent('a.PHP', "<?php\n// comment\n\$foo = 1;");
|
||||
$b = ContentHash::ofContent('a.php', "<?php\n\$foo = 1;");
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Blade files', function () {
|
||||
it('strips blade comments', function () {
|
||||
$a = ContentHash::ofContent('a.blade.php', '<div>{{-- a comment --}}Hello</div>');
|
||||
$b = ContentHash::ofContent('a.blade.php', '<div>Hello</div>');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('strips multi-line blade comments', function () {
|
||||
$a = ContentHash::ofContent('a.blade.php', "<div>\n{{--\n multi\n line\n--}}\nHello\n</div>");
|
||||
$b = ContentHash::ofContent('a.blade.php', '<div> Hello </div>');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('collapses whitespace', function () {
|
||||
$a = ContentHash::ofContent('a.blade.php', "<div>\n Hello\n World\n</div>");
|
||||
$b = ContentHash::ofContent('a.blade.php', '<div> Hello World </div>');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('detects content changes', function () {
|
||||
$a = ContentHash::ofContent('a.blade.php', '<div>Hello</div>');
|
||||
$b = ContentHash::ofContent('a.blade.php', '<div>Goodbye</div>');
|
||||
|
||||
expect($a)->not->toBe($b);
|
||||
});
|
||||
|
||||
it('keeps blade directives intact', function () {
|
||||
$a = ContentHash::ofContent('a.blade.php', '@if($user)Hi @endif');
|
||||
$b = ContentHash::ofContent('a.blade.php', '@if($user)Bye @endif');
|
||||
|
||||
expect($a)->not->toBe($b);
|
||||
});
|
||||
|
||||
it('does not use the PHP tokenizer for blade files', function () {
|
||||
$a = ContentHash::ofContent('a.blade.php', '<?php // not stripped ?> hello');
|
||||
$b = ContentHash::ofContent('a.blade.php', '<?php ?> hello');
|
||||
|
||||
expect($a)->not->toBe($b);
|
||||
});
|
||||
});
|
||||
|
||||
describe('JavaScript-like files', function () {
|
||||
it('strips line comments', function () {
|
||||
$a = ContentHash::ofContent('a.js', "// a comment\nconst foo = 1;");
|
||||
$b = ContentHash::ofContent('a.js', 'const foo = 1;');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('strips block comments on their own lines', function () {
|
||||
$a = ContentHash::ofContent('a.js', "/* block */\nconst foo = 1;");
|
||||
$b = ContentHash::ofContent('a.js', 'const foo = 1;');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('collapses whitespace', function () {
|
||||
$a = ContentHash::ofContent('a.js', "const foo = 1;\n\nconst bar = 2;");
|
||||
$b = ContentHash::ofContent('a.js', 'const foo = 1; const bar = 2;');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('detects code changes', function () {
|
||||
$a = ContentHash::ofContent('a.js', 'const foo = 1;');
|
||||
$b = ContentHash::ofContent('a.js', 'const foo = 2;');
|
||||
|
||||
expect($a)->not->toBe($b);
|
||||
});
|
||||
|
||||
it('does not strip inline trailing comments', function () {
|
||||
$a = ContentHash::ofContent('a.js', 'const foo = 1; // inline');
|
||||
$b = ContentHash::ofContent('a.js', 'const foo = 1;');
|
||||
|
||||
expect($a)->not->toBe($b);
|
||||
});
|
||||
|
||||
it('applies the same rules to .ts files', function () {
|
||||
$a = ContentHash::ofContent('a.ts', "// comment\nconst foo: number = 1;");
|
||||
$b = ContentHash::ofContent('a.ts', 'const foo: number = 1;');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('applies the same rules to .tsx files', function () {
|
||||
$a = ContentHash::ofContent('a.tsx', "// comment\nconst Foo = () => <div/>;");
|
||||
$b = ContentHash::ofContent('a.tsx', 'const Foo = () => <div/>;');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('applies the same rules to .jsx files', function () {
|
||||
$a = ContentHash::ofContent('a.jsx', "// comment\nconst Foo = () => <div/>;");
|
||||
$b = ContentHash::ofContent('a.jsx', 'const Foo = () => <div/>;');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('applies the same rules to .vue files', function () {
|
||||
$a = ContentHash::ofContent('a.vue', "<script>\n// comment\nexport default {}\n</script>");
|
||||
$b = ContentHash::ofContent('a.vue', '<script> export default {} </script>');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('applies the same rules to .svelte files', function () {
|
||||
$a = ContentHash::ofContent('a.svelte', "<script>\n// comment\nlet foo = 1;\n</script>");
|
||||
$b = ContentHash::ofContent('a.svelte', '<script> let foo = 1; </script>');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('applies the same rules to .mjs, .cjs, and .mts files', function () {
|
||||
foreach (['mjs', 'cjs', 'mts'] as $ext) {
|
||||
$a = ContentHash::ofContent("a.$ext", "// comment\nexport const foo = 1;");
|
||||
$b = ContentHash::ofContent("a.$ext", 'export const foo = 1;');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('unknown extensions', function () {
|
||||
it('hashes the raw content for unknown extensions', function () {
|
||||
$a = ContentHash::ofContent('a.txt', 'hello world');
|
||||
$b = ContentHash::ofContent('a.txt', 'hello world');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
|
||||
it('does not normalise whitespace for unknown extensions', function () {
|
||||
$a = ContentHash::ofContent('a.txt', 'hello world');
|
||||
$b = ContentHash::ofContent('a.txt', 'hello world');
|
||||
|
||||
expect($a)->not->toBe($b);
|
||||
});
|
||||
|
||||
it('does not strip comments for unknown extensions', function () {
|
||||
$a = ContentHash::ofContent('a.txt', "// not a comment here\nhello");
|
||||
$b = ContentHash::ofContent('a.txt', 'hello');
|
||||
|
||||
expect($a)->not->toBe($b);
|
||||
});
|
||||
|
||||
it('hashes files with no extension as raw content', function () {
|
||||
$a = ContentHash::ofContent('Makefile', "all:\n\techo hi");
|
||||
$b = ContentHash::ofContent('Makefile', "all:\n\techo hi");
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
});
|
||||
|
||||
describe('output format', function () {
|
||||
it('returns a 32-character hex xxh128 hash', function () {
|
||||
$hash = ContentHash::ofContent('a.php', '<?php $foo = 1;');
|
||||
|
||||
expect($hash)->toMatch('/^[a-f0-9]{32}$/');
|
||||
});
|
||||
|
||||
it('returns a stable hash for empty content', function () {
|
||||
$a = ContentHash::ofContent('a.php', '');
|
||||
$b = ContentHash::ofContent('a.php', '');
|
||||
|
||||
expect($a)->toBe($b);
|
||||
});
|
||||
});
|
||||
@@ -1,20 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Pest\Plugins\Tia;
|
||||
|
||||
test('does not throw when an integer --random-order-seed is passed as a separate argv element', function () {
|
||||
// Mirrors the parallel worker argv (see bin/worker.php), where
|
||||
// `--random-order-seed` and its value arrive as separate items and the
|
||||
// seed value is an int rather than a string. Regression test for the
|
||||
// str_starts_with() TypeError in Tia::argumentPresent() — the same class
|
||||
// of bug as #1206, which was only fixed in HandleArguments.
|
||||
$arguments = ['--order-by=random', '--random-order-seed', 1782350398];
|
||||
|
||||
expect(Tia::isEnabledForRun($arguments))->toBeFalse();
|
||||
});
|
||||
|
||||
test('still detects --tia when an integer argument is present', function () {
|
||||
$arguments = ['--tia', '--random-order-seed', 1782350398];
|
||||
|
||||
expect(Tia::isEnabledForRun($arguments))->toBeTrue();
|
||||
});
|
||||
@@ -24,13 +24,13 @@ test('parallel', function () use ($run) {
|
||||
$file = file_get_contents(__FILE__);
|
||||
$file = preg_replace(
|
||||
'/\$expected = \'.*?\';/',
|
||||
"\$expected = '2 deprecated, 4 warnings, 5 incomplete, 3 notices, 40 todos, 27 skipped, 1317 passed (2969 assertions)';",
|
||||
"\$expected = '2 deprecated, 4 warnings, 5 incomplete, 3 notices, 40 todos, 27 skipped, 1280 passed (2928 assertions)';",
|
||||
$file,
|
||||
);
|
||||
file_put_contents(__FILE__, $file);
|
||||
}
|
||||
|
||||
$expected = '2 deprecated, 4 warnings, 5 incomplete, 3 notices, 40 todos, 27 skipped, 1317 passed (2969 assertions)';
|
||||
$expected = '2 deprecated, 4 warnings, 5 incomplete, 3 notices, 40 todos, 27 skipped, 1280 passed (2928 assertions)';
|
||||
|
||||
expect($output)
|
||||
->toContain("Tests: {$expected}")
|
||||
|
||||
Reference in New Issue
Block a user