From 022c33949179afdf5c245749d145be76788ca1fb Mon Sep 17 00:00:00 2001 From: figsoda Date: Tue, 3 Jan 2023 14:18:10 -0500 Subject: [PATCH] verify test outputs --- Cargo.lock | 85 ++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 2 ++ tests/integration.rs | 37 +++++++++++++++++++ 3 files changed, 124 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index bb6fdc0..42da058 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,20 @@ version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" +[[package]] +name = "assert_cmd" +version = "2.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa3d466004a8b4cb1bc34044240a2fd29d17607e2e3bd613eb44fd48e8100da3" +dependencies = [ + "bstr", + "doc-comment", + "predicates", + "predicates-core", + "predicates-tree", + "wait-timeout", +] + [[package]] name = "atty" version = "0.2.14" @@ -31,6 +45,18 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bstr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45ea9b00a7b3f2988e9a65ad3917e62123c38dba709b666506207be96d1790b" +dependencies = [ + "memchr", + "once_cell", + "regex-automata", + "serde", +] + [[package]] name = "cc" version = "1.0.78" @@ -171,6 +197,18 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "difflib" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + [[package]] name = "dunce" version = "1.0.3" @@ -412,6 +450,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" +[[package]] +name = "nu-glob" +version = "0.73.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "611efd57cc139f149eff12415368b819581c0b0e86944bc8011753e5680a674d" + [[package]] name = "num_cpus" version = "1.15.0" @@ -427,11 +471,13 @@ name = "nurl" version = "0.3.1" dependencies = [ "anyhow", + "assert_cmd", "clap", "clap_complete", "clap_mangen", "enum_dispatch", "itertools", + "nu-glob", "once_cell", "owo-colors", "rustc-hash", @@ -478,6 +524,33 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +[[package]] +name = "predicates" +version = "2.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" +dependencies = [ + "difflib", + "itertools", + "predicates-core", +] + +[[package]] +name = "predicates-core" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" + +[[package]] +name = "predicates-tree" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" +dependencies = [ + "predicates-core", + "termtree", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -551,6 +624,12 @@ dependencies = [ "bitflags", ] +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" + [[package]] name = "remove_dir_all" version = "0.5.3" @@ -738,6 +817,12 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "termtree" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" + [[package]] name = "tinyvec" version = "1.6.0" diff --git a/Cargo.toml b/Cargo.toml index 6926155..a849955 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,6 +33,8 @@ clap_mangen = "0.2.6" url = "2.3.1" [dev-dependencies] +assert_cmd = "2.0.7" +nu-glob = "0.73.0" trycmd = "0.14.6" [profile.release] diff --git a/tests/integration.rs b/tests/integration.rs index b3ce41d..c565e74 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -1,8 +1,45 @@ +use assert_cmd::Command; +use nu_glob::glob; use trycmd::TestCases; +use std::fs; + #[test] fn integration() { TestCases::new() .default_bin_name("nurl") .case("tests/cmd/**/*.toml"); } + +#[test] +fn verify_outputs() { + for path in glob("tests/cmd/**/*.stdout").unwrap() { + let path = path.unwrap(); + let name = path.file_name().unwrap(); + + if name == "json.stdout" { + eprintln!("skipping {}", path.display()); + continue; + } + + eprintln!("testing {}", path.display()); + + let mut expr = String::from_utf8(fs::read(&path).unwrap()).unwrap(); + expr.insert_str(0, "(import { })."); + + if name == "overwrite.stdout" { + expr.insert_str(0, r#"let pname = "nurl"; in "#); + } else if name == "overwrite_str.stdout" { + expr.insert_str(0, r#"let version = "0.3.0"; in "#); + } + + Command::new("nix") + .arg("build") + .arg("--experimental-features") + .arg("nix-command") + .arg("--impure") + .arg("--expr") + .arg(expr) + .unwrap(); + } +}