#!/usr/bin/env php | +----------------------------------------------------------------------+ */ ##### ## This is just a helper for intercepting stdin/stdout and the file and create a half-finished test. ## The output still may need adapting to match file names etc. ##### error_reporting(-1); $phpdbg = getenv('TEST_PHPDBG_EXECUTABLE') ?: null; $pass_options = ' -qbI -n -d "error_reporting=32767" -d "display_errors=1" -d "display_startup_errors=1" -d "log_errors=0"'; $file = ""; $cmdargv = ""; if (isset($argc) && $argc > 1) { $post_ddash = false; for ($i = 1; $i < $argc; $i++) { if ($argv[$i][0] == "-" && !$post_ddash) { switch (substr($argv[$i], 1)) { case "p": $phpdbg = $argv[++$i]; break; case "n": $pass_options .= " -n"; break; case "d": $pass_options .= " -d ".escapeshellarg($argv[++$i]); $ini[] = $argv[$i]; break; case "-": $post_ddash = true; break; } } else { $real_argv[] = $argv[$i]; } } if (isset($real_argv[0])) { $file = realpath($real_argv[0]); $cmdargv = implode(" ", array_map("escapeshellarg", array_slice($real_argv, 1))); } } $proc = proc_open("$phpdbg $pass_options $file -- $cmdargv", [["pipe", "r"], ["pipe", "w"], ["pipe", "w"]], $pipes); if (!$proc) { die("Couldn't start phpdbg\n"); } $input = $output = ""; stream_set_blocking(STDIN, false); do { $r = [$pipes[1], STDIN]; $w = $e = null; $n = @stream_select($r, $w, $e, null); if ($n > 0) { if ("" != $in = fread(STDIN, 1024)) { $input .= $in; fwrite($pipes[0], $in); continue; } if (feof(STDIN)) { die("stdin closed?!\n"); } if (feof($pipes[1])) { $n = false; } else { $output .= $c = fgetc($pipes[1]); echo $c; } } } while ($n !== false); stream_set_blocking(STDIN, true); print "\n"; if (!isset($name)) { print "Specify the test description: "; $desc = trim(fgets(STDIN)); } while (!isset($testfile)) { print "Specify the test file name (leave empty to write to stderr): "; $testfile = trim(fgets(STDIN)); if ($testfile != "" && file_exists($testfile)) { print "That file already exists. Type y or yes to overwrite: "; $y = trim(fgets(STDIN)); if ($y !== "y" && $y !== "yes") { unset($testfile); } } } $output = str_replace("string(".strlen($file).") \"$file\"", 'string(%d) "%s"', $output); $output = str_replace($file, "%s", $output); $input = trim($input); $testdata = <<