]> granicus.if.org Git - php/commitdiff
Add bless_tests.php
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 11 Feb 2019 14:35:34 +0000 (15:35 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 11 Feb 2019 14:35:34 +0000 (15:35 +0100)
Helper script to perform certain kinds of trivial test updates.

scripts/dev/bless_tests.php [new file with mode: 0644]

diff --git a/scripts/dev/bless_tests.php b/scripts/dev/bless_tests.php
new file mode 100644 (file)
index 0000000..121a011
--- /dev/null
@@ -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);
+}