"""Acceptance coverage for JSON stream input and compact output."""
import json
import subprocess
from pathlib import Path
ROOT = Path(__file__).parents[1]
EXECUTABLE = ROOT / "jq"
def run_jq(program: str, input_text: str) -> subprocess.CompletedProcess[str]:
return subprocess.run(
[str(EXECUTABLE), "-c", program],
input=input_text,
capture_output=True,
text=True,
check=False,
)
def test_multiple_input_values_are_processed_in_order() -> None:
inputs = "1\n2\n3\n"
result = run_jq(".", inputs)
assert result.returncode == 0
assert result.stdout.splitlines() == inputs.splitlines()
def test_generator_outputs_preserve_order_and_multiplicity() -> None:
result = run_jq(".[]", "[1,2,3]\n")
assert result.returncode == 0
assert result.stdout.splitlines() == ["1", "2", "3"]
def test_objects_are_compact_single_line_json() -> None:
input_text = '{"a": 1, "b": [2, 3]}\n'
result = run_jq(".", input_text)
assert result.returncode == 0
assert json.loads(result.stdout) == json.loads(input_text)
assert len(result.stdout.splitlines()) == 1
def test_multiline_and_unicode_json_values_are_decoded() -> None:
result = run_jq(".", '{\n "answer": "μ"\n}\n[1, 2]\n')
assert result.returncode == 0
assert [json.loads(line) for line in result.stdout.splitlines()] == [
{"answer": "μ"},
[1, 2],
]
def test_inputs_emits_only_values_after_the_current_input() -> None:
result = run_jq("inputs", "1\n2\n3\n")
assert result.returncode == 0
assert [json.loads(line) for line in result.stdout.splitlines()] == [2, 3]
def test_input_emits_the_next_value_without_replacing_current_input() -> None:
result = run_jq("[., input]", "1\n2\n")
assert result.returncode == 0
assert json.loads(result.stdout) == [1, 2]
def test_stdin_metadata_reports_filename_and_value_start_line() -> None:
result = run_jq("[input_filename, input_line_number]", "1\n\n 2\n")
assert result.returncode == 0
assert [json.loads(line) for line in result.stdout.splitlines()] == [
["<stdin>", 1],
["<stdin>", 3],
]
Run artifact