| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | #!/usr/bin/env php<?phpif (file_exists(__DIR__ . '/../vendor/autoload.php')) {    require __DIR__ . '/../vendor/autoload.php';} elseif (file_exists(__DIR__ . '/../../../autoload.php')) {    require __DIR__ . '/../../../autoload.php';} elseif (file_exists(__DIR__ . '/../autoload.php')) {    require __DIR__ . '/../autoload.php';} else {    throw new RuntimeException('Unable to locate autoload.php file.');}use JmesPath\Env;use JmesPath\DebugRuntime;$description = <<<EOTRuns a JMESPath expression on the provided input or a test case.Provide the JSON input and expression:    echo '{}' | jp.php expressionOr provide the path to a compliance script, a suite, and test case number:    jp.php --script path_to_script --suite test_suite_number --case test_case_number [expression]EOT;$args = [];$currentKey = null;for ($i = 1, $total = count($argv); $i < $total; $i++) {    if ($i % 2) {        if (substr($argv[$i], 0, 2) == '--') {            $currentKey = str_replace('--', '', $argv[$i]);        } else {            $currentKey = trim($argv[$i]);        }    } else {        $args[$currentKey] = $argv[$i];        $currentKey = null;    }}$expression = $currentKey;if (isset($args['file']) || isset($args['suite']) || isset($args['case'])) {    if (!isset($args['file']) || !isset($args['suite']) || !isset($args['case'])) {        die($description);    }    // Manually run a compliance test    $path = realpath($args['file']);    file_exists($path) or die('File not found at ' . $path);    $json = json_decode(file_get_contents($path), true);    $set = $json[$args['suite']];    $data = $set['given'];    if (!isset($expression)) {        $expression = $set['cases'][$args['case']]['expression'];        echo "Expects\n=======\n";        if (isset($set['cases'][$args['case']]['result'])) {            echo json_encode($set['cases'][$args['case']]['result'], JSON_PRETTY_PRINT) . "\n\n";        } elseif (isset($set['cases'][$args['case']]['error'])) {            echo "{$set['cases'][$argv['case']]['error']} error\n\n";        } else {            echo "NULL\n\n";        }    }} elseif (isset($expression)) {    // Pass in an expression and STDIN as a standalone argument    $data = json_decode(stream_get_contents(STDIN), true);} else {    die($description);}$runtime = new DebugRuntime(Env::createRuntime());$runtime($expression, $data);
 |