From 5c167845315985653c584595be223fc1e0724ffc Mon Sep 17 00:00:00 2001 From: Tim Stack Date: Tue, 2 Sep 2025 13:36:26 -0700 Subject: [PATCH] [tests] switch to using insta for handling expected results --- Cargo.lock | 107 +++++++++++++++--- Cargo.toml | 2 + tests/snapshots/test_java__basic.snap | 19 ++++ .../snapshots/test_java__basic_with_log.snap | 19 ++++ .../test_java__basic_with_log_format.snap | 21 ++++ .../test_java__basic_with_upper.snap | 19 ++++ tests/snapshots/test_rust__basic.snap | 19 ++++ tests/snapshots/test_rust__stack.snap | 18 +++ tests/test_java.rs | 41 +------ tests/test_rust.rs | 20 +--- tests/utils.rs | 94 --------------- 11 files changed, 216 insertions(+), 163 deletions(-) create mode 100644 tests/snapshots/test_java__basic.snap create mode 100644 tests/snapshots/test_java__basic_with_log.snap create mode 100644 tests/snapshots/test_java__basic_with_log_format.snap create mode 100644 tests/snapshots/test_java__basic_with_upper.snap create mode 100644 tests/snapshots/test_rust__basic.snap create mode 100644 tests/snapshots/test_rust__stack.snap delete mode 100644 tests/utils.rs diff --git a/Cargo.lock b/Cargo.lock index ffbbb79..e43868b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,7 +46,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -56,7 +56,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -153,6 +153,18 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +[[package]] +name = "console" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "windows-sys 0.59.0", +] + [[package]] name = "crossbeam-deque" version = "0.8.5" @@ -196,6 +208,12 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + [[package]] name = "env_filter" version = "0.1.0" @@ -259,6 +277,29 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "insta" +version = "1.43.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "154934ea70c58054b556dd430b99a98c2a7ff5309ac9891597e339b5c28f4371" +dependencies = [ + "console", + "once_cell", + "serde", + "similar", +] + +[[package]] +name = "insta-cmd" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffeeefa927925cced49ccb01bf3e57c9d4cd132df21e576eb9415baeab2d3de6" +dependencies = [ + "insta", + "serde", + "serde_json", +] + [[package]] name = "itoa" version = "1.0.10" @@ -309,6 +350,8 @@ dependencies = [ "cc", "clap", "env_logger", + "insta", + "insta-cmd", "log", "rand", "rayon", @@ -326,6 +369,12 @@ version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + [[package]] name = "portable-atomic" version = "1.11.0" @@ -522,6 +571,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "similar" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" + [[package]] name = "streaming-iterator" version = "0.1.9" @@ -630,15 +685,25 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", + "windows_i686_gnullvm", "windows_i686_msvc", "windows_x86_64_gnu", "windows_x86_64_gnullvm", @@ -647,45 +712,51 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "wit-bindgen-rt" diff --git a/Cargo.toml b/Cargo.toml index 7e9fe66..d10c6b4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,5 +21,7 @@ cc="*" [dev-dependencies] assert_cmd = "2.0.16" env_logger = "0.11.8" +insta = { version = "1.43.1", features = ["yaml"] } +insta-cmd = "0.6.0" log = "0.4.27" rand = "0.9.0" diff --git a/tests/snapshots/test_java__basic.snap b/tests/snapshots/test_java__basic.snap new file mode 100644 index 0000000..7860db0 --- /dev/null +++ b/tests/snapshots/test_java__basic.snap @@ -0,0 +1,19 @@ +--- +source: tests/test_java.rs +info: + program: log2src + args: + - "-d" + - tests/java/Basic.java + - "-l" + - tests/resources/java/basic.log +--- +success: true +exit_code: 0 +----- stdout ----- +{"srcRef":{"sourcePath":"tests/java/Basic.java","lineNumber":18,"column":16,"name":"main","text":"\"Hello from main\"","vars":[]},"variables":{},"stack":[]} +{"srcRef":{"sourcePath":"tests/java/Basic.java","lineNumber":25,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"0"},"stack":[]} +{"srcRef":{"sourcePath":"tests/java/Basic.java","lineNumber":25,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"1"},"stack":[]} +{"srcRef":{"sourcePath":"tests/java/Basic.java","lineNumber":25,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"2"},"stack":[]} + +----- stderr ----- diff --git a/tests/snapshots/test_java__basic_with_log.snap b/tests/snapshots/test_java__basic_with_log.snap new file mode 100644 index 0000000..88ea5ee --- /dev/null +++ b/tests/snapshots/test_java__basic_with_log.snap @@ -0,0 +1,19 @@ +--- +source: tests/test_java.rs +info: + program: log2src + args: + - "-d" + - tests/java/BasicWithLog.java + - "-l" + - tests/resources/java/basic.log +--- +success: true +exit_code: 0 +----- stdout ----- +{"srcRef":{"sourcePath":"tests/java/BasicWithLog.java","lineNumber":18,"column":13,"name":"main","text":"\"Hello from main\"","vars":[]},"variables":{},"stack":[]} +{"srcRef":{"sourcePath":"tests/java/BasicWithLog.java","lineNumber":25,"column":17,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"0"},"stack":[]} +{"srcRef":{"sourcePath":"tests/java/BasicWithLog.java","lineNumber":25,"column":17,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"1"},"stack":[]} +{"srcRef":{"sourcePath":"tests/java/BasicWithLog.java","lineNumber":25,"column":17,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"2"},"stack":[]} + +----- stderr ----- diff --git a/tests/snapshots/test_java__basic_with_log_format.snap b/tests/snapshots/test_java__basic_with_log_format.snap new file mode 100644 index 0000000..6ea7a0a --- /dev/null +++ b/tests/snapshots/test_java__basic_with_log_format.snap @@ -0,0 +1,21 @@ +--- +source: tests/test_java.rs +info: + program: log2src + args: + - "-d" + - tests/java/BasicWithCustom.java + - "-l" + - tests/resources/java/basic-class-line.log + - "-f" + - "^(?\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}) (?\\w+) (?[\\w$.]+):(?\\d+) (?[\\w$]+): (?.*)$" +--- +success: true +exit_code: 0 +----- stdout ----- +{"srcRef":{"sourcePath":"tests/java/BasicWithCustom.java","lineNumber":15,"column":16,"name":"main","text":"\"Hello from main\"","vars":[]},"variables":{},"stack":[]} +{"srcRef":{"sourcePath":"tests/java/BasicWithCustom.java","lineNumber":22,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"0"},"stack":[]} +{"srcRef":{"sourcePath":"tests/java/BasicWithCustom.java","lineNumber":22,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"1"},"stack":[]} +{"srcRef":{"sourcePath":"tests/java/BasicWithCustom.java","lineNumber":22,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"2"},"stack":[]} + +----- stderr ----- diff --git a/tests/snapshots/test_java__basic_with_upper.snap b/tests/snapshots/test_java__basic_with_upper.snap new file mode 100644 index 0000000..6120b11 --- /dev/null +++ b/tests/snapshots/test_java__basic_with_upper.snap @@ -0,0 +1,19 @@ +--- +source: tests/test_java.rs +info: + program: log2src + args: + - "-d" + - tests/java/BasicWithUpper.java + - "-l" + - tests/resources/java/basic.log +--- +success: true +exit_code: 0 +----- stdout ----- +{"srcRef":{"sourcePath":"tests/java/BasicWithUpper.java","lineNumber":18,"column":16,"name":"main","text":"\"Hello from main\"","vars":[]},"variables":{},"stack":[]} +{"srcRef":{"sourcePath":"tests/java/BasicWithUpper.java","lineNumber":25,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"0"},"stack":[]} +{"srcRef":{"sourcePath":"tests/java/BasicWithUpper.java","lineNumber":25,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"1"},"stack":[]} +{"srcRef":{"sourcePath":"tests/java/BasicWithUpper.java","lineNumber":25,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"2"},"stack":[]} + +----- stderr ----- diff --git a/tests/snapshots/test_rust__basic.snap b/tests/snapshots/test_rust__basic.snap new file mode 100644 index 0000000..f567f1b --- /dev/null +++ b/tests/snapshots/test_rust__basic.snap @@ -0,0 +1,19 @@ +--- +source: tests/test_rust.rs +info: + program: log2src + args: + - "-d" + - examples/basic.rs + - "-l" + - tests/resources/rust/basic.log +--- +success: true +exit_code: 0 +----- stdout ----- +{"srcRef":{"sourcePath":"examples/basic.rs","lineNumber":6,"column":11,"name":"main","text":"\"Hello from main\"","vars":[]},"variables":{},"stack":[[{"sourcePath":"examples/basic.rs","lineNumber":8,"column":8,"name":"main","text":"foo","vars":[]}]]} +{"srcRef":{"sourcePath":"examples/basic.rs","lineNumber":13,"column":11,"name":"foo","text":"\"Hello from foo i={}\"","vars":["i"]},"variables":{"i":"0"},"stack":[[{"sourcePath":"examples/basic.rs","lineNumber":8,"column":8,"name":"main","text":"foo","vars":[]}]]} +{"srcRef":{"sourcePath":"examples/basic.rs","lineNumber":13,"column":11,"name":"foo","text":"\"Hello from foo i={}\"","vars":["i"]},"variables":{"i":"1"},"stack":[[{"sourcePath":"examples/basic.rs","lineNumber":8,"column":8,"name":"main","text":"foo","vars":[]}]]} +{"srcRef":{"sourcePath":"examples/basic.rs","lineNumber":13,"column":11,"name":"foo","text":"\"Hello from foo i={}\"","vars":["i"]},"variables":{"i":"2"},"stack":[[{"sourcePath":"examples/basic.rs","lineNumber":8,"column":8,"name":"main","text":"foo","vars":[]}]]} + +----- stderr ----- diff --git a/tests/snapshots/test_rust__stack.snap b/tests/snapshots/test_rust__stack.snap new file mode 100644 index 0000000..f24ed04 --- /dev/null +++ b/tests/snapshots/test_rust__stack.snap @@ -0,0 +1,18 @@ +--- +source: tests/test_rust.rs +info: + program: log2src + args: + - "-d" + - examples/stack.rs + - "-l" + - tests/resources/rust/stack.log + - "-s" + - "1" +--- +success: true +exit_code: 0 +----- stdout ----- +{"srcRef":{"sourcePath":"examples/stack.rs","lineNumber":15,"column":11,"name":"b","text":"\"Hello from b\"","vars":[]},"variables":{},"stack":[[{"sourcePath":"examples/stack.rs","lineNumber":11,"column":4,"name":"a","text":"b","vars":[]},{"sourcePath":"examples/stack.rs","lineNumber":7,"column":4,"name":"main","text":"a","vars":[]}]]} + +----- stderr ----- diff --git a/tests/test_java.rs b/tests/test_java.rs index e6a4216..9f8085c 100644 --- a/tests/test_java.rs +++ b/tests/test_java.rs @@ -1,8 +1,6 @@ use assert_cmd::prelude::*; use std::{path::Path, process::Command}; - -mod utils; -use utils::assert_source_ref_output; +use insta_cmd::assert_cmd_snapshot; #[test] fn basic() -> Result<(), Box> { @@ -17,14 +15,7 @@ fn basic() -> Result<(), Box> { .arg("-l") .arg(basic_log.to_str().expect("test case log exists")); - assert_source_ref_output( - &mut cmd, - r#"{"srcRef":{"sourcePath":"tests/java/Basic.java","lineNumber":18,"column":16,"name":"main","text":"\"Hello from main\"","vars":[]},"variables":{},"stack":[]} -{"srcRef":{"sourcePath":"tests/java/Basic.java","lineNumber":25,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"0"},"stack":[]} -{"srcRef":{"sourcePath":"tests/java/Basic.java","lineNumber":25,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"1"},"stack":[]} -{"srcRef":{"sourcePath":"tests/java/Basic.java","lineNumber":25,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"2"},"stack":[]} -"#, - )?; + assert_cmd_snapshot!(cmd); Ok(()) } @@ -40,14 +31,8 @@ fn basic_with_log() -> Result<(), Box> { .arg(basic_source.to_str().expect("test case source code exists")) .arg("-l") .arg(basic_log.to_str().expect("test case log exists")); - assert_source_ref_output( - &mut cmd, - r#"{"srcRef":{"sourcePath":"tests/java/BasicWithLog.java","lineNumber":18,"column":13,"name":"main","text":"\"Hello from main\"","vars":[]},"variables":{},"stack":[]} -{"srcRef":{"sourcePath":"tests/java/BasicWithLog.java","lineNumber":25,"column":17,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"0"},"stack":[]} -{"srcRef":{"sourcePath":"tests/java/BasicWithLog.java","lineNumber":25,"column":17,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"1"},"stack":[]} -{"srcRef":{"sourcePath":"tests/java/BasicWithLog.java","lineNumber":25,"column":17,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"2"},"stack":[]} -"#, - )?; + + assert_cmd_snapshot!(cmd); Ok(()) } @@ -64,14 +49,7 @@ fn basic_with_upper() -> Result<(), Box> { .arg("-l") .arg(basic_log.to_str().expect("test case log exists")); - assert_source_ref_output( - &mut cmd, - r#"{"srcRef":{"sourcePath":"tests/java/BasicWithUpper.java","lineNumber":18,"column":16,"name":"main","text":"\"Hello from main\"","vars":[]},"variables":{},"stack":[]} -{"srcRef":{"sourcePath":"tests/java/BasicWithUpper.java","lineNumber":25,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"0"},"stack":[]} -{"srcRef":{"sourcePath":"tests/java/BasicWithUpper.java","lineNumber":25,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"1"},"stack":[]} -{"srcRef":{"sourcePath":"tests/java/BasicWithUpper.java","lineNumber":25,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"2"},"stack":[]} -"#, - )?; + assert_cmd_snapshot!(cmd); Ok(()) } @@ -90,13 +68,6 @@ fn basic_with_log_format() -> Result<(), Box> { .arg("-f") .arg("^(?\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}) (?\\w+) (?[\\w$.]+):(?\\d+) (?[\\w$]+): (?.*)$"); - assert_source_ref_output( - &mut cmd, - r#"{"srcRef":{"sourcePath":"tests/java/BasicWithCustom.java","lineNumber":15,"column":16,"name":"main","text":"\"Hello from main\"","vars":[]},"variables":{},"stack":[]} -{"srcRef":{"sourcePath":"tests/java/BasicWithCustom.java","lineNumber":22,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"0"},"stack":[]} -{"srcRef":{"sourcePath":"tests/java/BasicWithCustom.java","lineNumber":22,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"1"},"stack":[]} -{"srcRef":{"sourcePath":"tests/java/BasicWithCustom.java","lineNumber":22,"column":20,"name":"foo","text":"\"Hello from foo i=\\{i}\"","vars":["i"]},"variables":{"i":"2"},"stack":[]} -"#, - )?; + assert_cmd_snapshot!(cmd); Ok(()) } diff --git a/tests/test_rust.rs b/tests/test_rust.rs index 2227cb8..2ccec2b 100644 --- a/tests/test_rust.rs +++ b/tests/test_rust.rs @@ -1,8 +1,6 @@ use assert_cmd::prelude::*; use std::{path::Path, process::Command}; - -mod utils; -use utils::assert_source_ref_output; +use insta_cmd::assert_cmd_snapshot; #[test] fn basic() -> Result<(), Box> { @@ -17,14 +15,8 @@ fn basic() -> Result<(), Box> { .arg("-l") .arg(log.to_str().expect("test case log path is valid")); - assert_source_ref_output( - &mut cmd, - r#"{"srcRef":{"sourcePath":"examples/basic.rs","lineNumber":6,"column":11,"name":"main","text":"\"Hello from main\"","vars":[]},"variables":{},"stack":[[{"sourcePath":"examples/basic.rs","lineNumber":8,"column":8,"name":"main","text":"foo","vars":[]}]]} -{"srcRef":{"sourcePath":"examples/basic.rs","lineNumber":13,"column":11,"name":"foo","text":"\"Hello from foo i={}\"","vars":["i"]},"variables":{"i":"0"},"stack":[[{"sourcePath":"examples/basic.rs","lineNumber":8,"column":8,"name":"main","text":"foo","vars":[]}]]} -{"srcRef":{"sourcePath":"examples/basic.rs","lineNumber":13,"column":11,"name":"foo","text":"\"Hello from foo i={}\"","vars":["i"]},"variables":{"i":"1"},"stack":[[{"sourcePath":"examples/basic.rs","lineNumber":8,"column":8,"name":"main","text":"foo","vars":[]}]]} -{"srcRef":{"sourcePath":"examples/basic.rs","lineNumber":13,"column":11,"name":"foo","text":"\"Hello from foo i={}\"","vars":["i"]},"variables":{"i":"2"},"stack":[[{"sourcePath":"examples/basic.rs","lineNumber":8,"column":8,"name":"main","text":"foo","vars":[]}]]} -"#, - )?; + assert_cmd_snapshot!(cmd); + Ok(()) } @@ -43,10 +35,6 @@ fn stack() -> Result<(), Box> { .arg("-s") .arg("1"); - assert_source_ref_output( - &mut cmd, - r#"{"srcRef":{"sourcePath":"examples/stack.rs","lineNumber":15,"column":11,"name":"b","text":"\"Hello from b\"","vars":[]},"variables":{},"stack":[[{"sourcePath":"examples/stack.rs","lineNumber":11,"column":4,"name":"a","text":"b","vars":[]},{"sourcePath":"examples/stack.rs","lineNumber":7,"column":4,"name":"main","text":"a","vars":[]}]]} -"#, - )?; + assert_cmd_snapshot!(cmd); Ok(()) } diff --git a/tests/utils.rs b/tests/utils.rs deleted file mode 100644 index 114f650..0000000 --- a/tests/utils.rs +++ /dev/null @@ -1,94 +0,0 @@ -use std::process::Command; - -use serde_json::{from_str, Value}; - -pub fn assert_source_ref_output( - cmd: &mut Command, - expected_str: &str, -) -> Result<(), Box> { - let output = cmd.output()?; - - if !output.status.success() { - let stderr = String::from_utf8_lossy(&output.stderr); - return Err(format!("Command failed with error: {}", stderr).into()); - } - - let output_str = String::from_utf8(output.stdout)?; - let output_json = to_json(output_str.clone()); - let expected_json = to_json(expected_str.to_owned()); - - if output_json.len() != expected_json.len() { - return Err(format!( - "Expected {} JSON objects, but got {}.\nExpected: {}\nActual: {}", - expected_json.len(), - output_json.len(), - expected_str, - output_str - ) - .into()); - } - - for (i, (actual, expected)) in output_json.iter().zip(expected_json.iter()).enumerate() { - let mut actual = actual.clone(); - let mut expected = expected.clone(); - - normalize_src_ref(&mut actual); - normalize_src_ref(&mut expected); - - if actual != expected { - return Err(format!( - "JSON object #{} doesn't match.\nExpected: {}\nActual: {}", - i, expected, actual - ) - .into()); - } - } - - Ok(()) -} - -fn to_json(text: String) -> Vec { - text.lines() - .filter_map(|line| from_str(line).ok()) - .collect() -} - -fn normalize_src_ref(value: &mut Value) { - if let Some(src_ref) = value.get_mut("srcRef") { - if let Some(obj) = src_ref.as_object_mut() { - if let Some(path) = obj.get_mut("sourcePath") { - norm_src_path(path); - } - } - } - - if let Some(possible_stacks) = value.get_mut("stack") { - if let Some(call_stacks) = possible_stacks.as_array_mut() { - for call_stack in call_stacks { - if let Some(stack) = call_stack.as_array_mut() { - for stack_item in stack { - if let Some(obj) = stack_item.as_object_mut() { - if let Some(path) = obj.get_mut("sourcePath") { - norm_src_path(path); - } - } - } - } - } - } - } -} - -fn norm_src_path(src_path: &mut Value) { - if let Some(path_str) = src_path.as_str() { - // Convert the path to the platform's format - let path_sep = '\\'; - let normalized = if path_sep == '/' { - path_str.to_string() - } else { - // On Windows, swap the forward slash for backslashes - path_str.replace('/', &path_sep.to_string()) - }; - *src_path = Value::String(normalized); - } -}