diff options
Diffstat (limited to 'scripts/dev/bless_tests.php')
-rw-r--r-- | scripts/dev/bless_tests.php | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/scripts/dev/bless_tests.php b/scripts/dev/bless_tests.php new file mode 100644 index 0000000000..121a011f9a --- /dev/null +++ b/scripts/dev/bless_tests.php @@ -0,0 +1,49 @@ +#!/usr/bin/env php +<?php + +if ($argc < 2) { + die("Usage: php bless_tests.php dir/"); +} + +$dir = $argv[1]; +$it = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($dir), + RecursiveIteratorIterator::LEAVES_ONLY +); +foreach ($it as $file) { + $path = $file->getPathName(); + if (!preg_match('/^(.*)\.phpt$/', $path, $matches)) { + // Not a phpt test + continue; + } + + $outPath = $matches[1] . '.out'; + if (!file_exists($outPath)) { + // Test did not fail + continue; + } + + $phpt = file_get_contents($path); + if (false !== strpos($phpt, '--XFAIL--')) { + // Don't modify expected output of XFAIL tests + continue; + } + + $out = file_get_contents($outPath); + $out = normalizeOutput($out); + $phpt = insertOutput($phpt, $out); + file_put_contents($path, $phpt); +} + +function normalizeOutput(string $out): string { + $out = preg_replace('/in \/.+ on line \d+/', 'in %s on line %d', $out); + $out = preg_replace('/Resource id #\d+/', 'Resource id #%d', $out); + return $out; +} + +function insertOutput(string $phpt, string $out): string { + return preg_replace_callback('/--EXPECTF?--.*$/s', function($matches) use($out) { + $F = strpos($out, '%') !== false ? 'F' : ''; + return "--EXPECT$F--\n" . $out . "\n"; + }, $phpt); +} |