#!/usr/bin/env php getPathName(); } } else if (is_file($dirOrFile)) { yield $dirOrFile; } else { die("$dirOrFile is not a directory or file\n"); } } } function normalizeOutput(string $out): string { $out = preg_replace('/in \/.+ on line \d+$/m', 'in %s on line %d', $out); $out = preg_replace('/in \/.+:\d+$/m', 'in %s:%d', $out); $out = preg_replace('/^#(\d+) \/.+\(\d+\):/m', '#$1 %s(%d):', $out); $out = preg_replace('/Resource id #\d+/', 'Resource id #%d', $out); $out = preg_replace('/resource\(\d+\) of type/', 'resource(%d) of type', $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); }