forked from Crockan/MercuryToolbox
80 lines
2.3 KiB
Rust
80 lines
2.3 KiB
Rust
//! Integration tests for the `toon` command.
|
|
|
|
use std::fs;
|
|
|
|
use assert_cmd::Command;
|
|
use predicates::prelude::*;
|
|
use tempfile::tempdir;
|
|
|
|
fn cargo_command() -> Command {
|
|
Command::cargo_bin("toon").expect("binary")
|
|
}
|
|
|
|
#[test]
|
|
fn help_includes_pipeline_examples() {
|
|
cargo_command()
|
|
.arg("--help")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("Convert between JSON and TOON"))
|
|
.stdout(predicate::str::contains("'{\"ok\":true}' | toon"))
|
|
.stdout(predicate::str::contains(
|
|
"bat --style=plain --paging=never .\\fixtures\\toon\\records.jsonl | toon",
|
|
))
|
|
.stdout(predicate::str::contains("toon --from json --input-format jsonl").not())
|
|
.stdout(predicate::str::contains("--expand-paths <MODE>"));
|
|
}
|
|
|
|
#[test]
|
|
fn version_prints_package_version() {
|
|
cargo_command()
|
|
.arg("--version")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains(env!("CARGO_PKG_VERSION")));
|
|
}
|
|
|
|
#[test]
|
|
fn jsonl_stdin_converts_to_toon_table() {
|
|
cargo_command()
|
|
.write_stdin("{\"name\":\"Ada\",\"score\":10}\n{\"name\":\"Bob\",\"score\":11}\n")
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("name,score"))
|
|
.stdout(predicate::str::contains("Ada,10"))
|
|
.stdout(predicate::str::contains("Bob,11"));
|
|
}
|
|
|
|
#[test]
|
|
fn auto_detects_jsonl_files_without_extra_flags() {
|
|
let temp = tempdir().expect("tempdir");
|
|
let path = temp.path().join("records.jsonl");
|
|
fs::write(
|
|
&path,
|
|
"{\"name\":\"Ada\",\"score\":10}\n{\"name\":\"Bob\",\"score\":11}\n",
|
|
)
|
|
.expect("fixture");
|
|
|
|
cargo_command()
|
|
.arg(&path)
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("name,score"))
|
|
.stdout(predicate::str::contains("Ada,10"))
|
|
.stdout(predicate::str::contains("Bob,11"));
|
|
}
|
|
|
|
#[test]
|
|
fn strict_flag_accepts_false_for_loose_indent_input() {
|
|
let temp = tempdir().expect("tempdir");
|
|
let path = temp.path().join("loose.toon");
|
|
fs::write(&path, "root:\n child: value\n").expect("fixture");
|
|
|
|
cargo_command()
|
|
.args(["--from", "toon", "--to", "json", "--strict", "false"])
|
|
.arg(&path)
|
|
.assert()
|
|
.success()
|
|
.stdout(predicate::str::contains("\"child\": \"value\""));
|
|
}
|