dever 4 years ago
parent
commit
f4392d69dd
2 changed files with 74 additions and 1 deletions
  1. 0 1
      vendor/bin/jp.php
  2. 74 0
      vendor/bin/jp.php

+ 0 - 1
vendor/bin/jp.php

@@ -1 +0,0 @@
-../mtdowling/jmespath.php/bin/jp.php

+ 74 - 0
vendor/bin/jp.php

@@ -0,0 +1,74 @@
+#!/usr/bin/env php
+<?php
+
+if (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 = <<<EOT
+Runs a JMESPath expression on the provided input or a test case.
+
+Provide the JSON input and expression:
+    echo '{}' | jp.php expression
+
+Or 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);