summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Otto <th1000s@posteo.net>2024-07-06 16:35:06 +0200
committerGitHub <noreply@github.com>2024-07-06 10:35:06 -0400
commit096941f77f28e21cbaad74eff3bbe7608ba4cbd8 (patch)
tree40f4dd85867b0ba75b0f23cb448100c2e371d305
parentf5b37173fe88a62e37208a9587a0ab4fec0ef107 (diff)
tests: add insta for snapshot testing (#1739)
Insta makes writing new tests or performing changes which update the expected value(s) easier. The new reference data can be reviewed and inserted/updated automatically by `cargo insta review` (after `cargo install cargo-insta`, but that tool is optional). The snapshots are stored inline using the `@""` syntax and not in separate files because the delta test output is small and designed to be human readable. See https://insta.rs/#hello-snapshot-testing and https://docs.rs/insta/1.39.0/insta/
-rw-r--r--Cargo.lock19
-rw-r--r--Cargo.toml9
-rw-r--r--src/features/side_by_side.rs17
-rw-r--r--src/tests/integration_test_utils.rs6
4 files changed, 43 insertions, 8 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 260c6a79..beb49b57 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -515,6 +515,7 @@ dependencies = [
"dirs",
"git2",
"grep-cli",
+ "insta",
"itertools",
"lazy_static",
"palette",
@@ -643,6 +644,18 @@ dependencies = [
]
[[package]]
+name = "insta"
+version = "1.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "810ae6042d48e2c9e9215043563a58a80b877bc863228a74cf10c49d4620a6f5"
+dependencies = [
+ "console",
+ "lazy_static",
+ "linked-hash-map",
+ "similar",
+]
+
+[[package]]
name = "itertools"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1156,6 +1169,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
[[package]]
+name = "similar"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640"
+
+[[package]]
name = "siphasher"
version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index d55c68e9..d5be556e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -67,5 +67,14 @@ version = "0.29.0"
default-features = false
features = []
+[dev-dependencies]
+insta = { version = "1.*", features = ["colors"] }
+
[profile.test]
opt-level = 2
+
+[profile.dev.package.insta]
+opt-level = 3
+
+[profile.dev.package.similar]
+opt-level = 3
diff --git a/src/features/side_by_side.rs b/src/features/side_by_side.rs
index a8182359..8db8d115 100644
--- a/src/features/side_by_side.rs
+++ b/src/features/side_by_side.rs
@@ -594,16 +594,19 @@ pub mod tests {
use crate::features::line_numbers::tests::*;
use crate::options::theme;
use crate::tests::integration_test_utils::{make_config_from_args, run_delta, DeltaTest};
+ use insta::assert_snapshot;
#[test]
- fn test_two_minus_lines() {
- DeltaTest::with_args(&["--side-by-side", "--width", "40"])
+ fn test_two_fitting_minus_lines() {
+ // rustfmt ignores the assert macro arguments, so do the setup outside
+ let result = DeltaTest::with_args(&["--side-by-side", "--width", "40"])
.with_input(TWO_MINUS_LINES_DIFF)
- .expect_after_header(
- r#"
- │ 1 │a = 1 │ │
- │ 2 │b = 23456 │ │"#,
- );
+ .skip_header();
+ assert_snapshot!(result, @r###"
+ │ 1 │a = 1 │ │
+ │ 2 │b = 23456 │ │
+ "###
+ );
}
#[test]
diff --git a/src/tests/integration_test_utils.rs b/src/tests/integration_test_utils.rs
index 09e445e9..1b2f1dfc 100644
--- a/src/tests/integration_test_utils.rs
+++ b/src/tests/integration_test_utils.rs
@@ -6,7 +6,7 @@ use std::io::{BufReader, Write};
use std::path::Path;
use bytelines::ByteLines;
-use itertools;
+use itertools::Itertools;
use crate::ansi;
use crate::cli;
@@ -264,6 +264,10 @@ impl DeltaTestOutput {
self.expect_after_skip(crate::config::HEADER_LEN, expected)
}
+ pub fn skip_header(self) -> String {
+ self.output.lines().skip(config::HEADER_LEN).join("\n")
+ }
+
pub fn expect_contains(self, expected: &str) -> Self {
assert!(
self.output.contains(expected),