diff --git a/meta/Cargo.toml b/meta/Cargo.toml index 9474996d..76208ff3 100644 --- a/meta/Cargo.toml +++ b/meta/Cargo.toml @@ -21,3 +21,6 @@ once_cell = "1.8.0" [build-dependencies] sha-1 = { version = "0.10", default-features = false } + +[dev-dependencies] +insta = "1.16.0" diff --git a/meta/src/ast.rs b/meta/src/ast.rs index da6ee527..3e1cd05a 100644 --- a/meta/src/ast.rs +++ b/meta/src/ast.rs @@ -281,10 +281,10 @@ mod tests { Box::new(Expr::Str(String::from("b"))), ); let mut top_down = expr.iter_top_down(); - assert_eq!(top_down.next(), Some(expr)); - assert_eq!(top_down.next(), Some(Expr::Str(String::from("a")))); - assert_eq!(top_down.next(), Some(Expr::Str(String::from("b")))); - assert_eq!(top_down.next(), None); + insta::assert_debug_snapshot!(top_down.next()); + insta::assert_debug_snapshot!(top_down.next()); + insta::assert_debug_snapshot!(top_down.next()); + insta::assert_debug_snapshot!(top_down.next()); } #[test] diff --git a/meta/src/optimizer/mod.rs b/meta/src/optimizer/mod.rs index e0cbdb0d..c63eb779 100644 --- a/meta/src/optimizer/mod.rs +++ b/meta/src/optimizer/mod.rs @@ -294,22 +294,8 @@ mod tests { )), }] }; - let rotated = { - use crate::optimizer::OptimizedExpr::*; - vec![OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Normal, - expr: box_tree!(Choice( - Str(String::from("a")), - Choice( - Str(String::from("b")), - Choice(Str(String::from("c")), Str(String::from("d"))) - ) - )), - }] - }; - assert_eq!(optimize(rules), rotated); + insta::assert_debug_snapshot!(optimize(rules)); } #[test] @@ -325,13 +311,8 @@ mod tests { ))), }] }; - let skipped = vec![OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Atomic, - expr: OptimizedExpr::Skip(vec![String::from("a"), String::from("b")]), - }]; - assert_eq!(optimize(rules), skipped); + insta::assert_debug_snapshot!(optimize(rules)); } #[test] @@ -347,13 +328,8 @@ mod tests { )), }] }; - let concatenated = vec![OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Atomic, - expr: OptimizedExpr::Str(String::from("abcd")), - }]; - assert_eq!(optimize(rules), concatenated); + insta::assert_debug_snapshot!(optimize(rules)); } #[test] @@ -363,19 +339,8 @@ mod tests { ty: RuleType::Atomic, expr: Expr::RepExact(Box::new(Expr::Ident(String::from("a"))), 3), }]; - let unrolled = { - use crate::optimizer::OptimizedExpr::*; - vec![OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Atomic, - expr: box_tree!(Seq( - Ident(String::from("a")), - Seq(Ident(String::from("a")), Ident(String::from("a"))) - )), - }] - }; - assert_eq!(optimize(rules), unrolled); + insta::assert_debug_snapshot!(optimize(rules)); } #[test] @@ -385,19 +350,8 @@ mod tests { ty: RuleType::Atomic, expr: Expr::RepMax(Box::new(Expr::Str("a".to_owned())), 3), }]; - let unrolled = { - use crate::optimizer::OptimizedExpr::*; - vec![OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Atomic, - expr: box_tree!(Seq( - Opt(Str(String::from("a"))), - Seq(Opt(Str(String::from("a"))), Opt(Str(String::from("a")))) - )), - }] - }; - assert_eq!(optimize(rules), unrolled); + insta::assert_debug_snapshot!(optimize(rules)); } #[test] @@ -407,19 +361,8 @@ mod tests { ty: RuleType::Atomic, expr: Expr::RepMin(Box::new(Expr::Str("a".to_owned())), 2), }]; - let unrolled = { - use crate::optimizer::OptimizedExpr::*; - vec![OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Atomic, - expr: box_tree!(Seq( - Str(String::from("a")), - Seq(Str(String::from("a")), Rep(Str(String::from("a")))) - )), - }] - }; - assert_eq!(optimize(rules), unrolled); + insta::assert_debug_snapshot!(optimize(rules)); } #[test] @@ -429,26 +372,8 @@ mod tests { ty: RuleType::Atomic, expr: Expr::RepMinMax(Box::new(Expr::Str("a".to_owned())), 2, 3), }]; - let unrolled = { - use crate::optimizer::OptimizedExpr::*; - vec![OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Atomic, - /* TODO possible room for improvement here: - * if the sequences were rolled out in the opposite - * order, we could further optimize the strings - * in cases like this. - Str(String::from(("aa")), - Opt(Str(String::from("a"))) - */ - expr: box_tree!(Seq( - Str(String::from("a")), - Seq(Str(String::from("a")), Opt(Str(String::from("a")))) - )), - }] - }; - assert_eq!(optimize(rules), unrolled); + insta::assert_debug_snapshot!(optimize(rules)); } #[test] @@ -464,13 +389,8 @@ mod tests { )), }] }; - let concatenated = vec![OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Atomic, - expr: OptimizedExpr::Insens(String::from("abcd")), - }]; - assert_eq!(optimize(rules), concatenated); + insta::assert_debug_snapshot!(optimize(rules)); } #[test] @@ -492,22 +412,8 @@ mod tests { )), }] }; - let optimized = { - use crate::optimizer::OptimizedExpr::*; - vec![OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Silent, - expr: box_tree!(Seq( - Ident(String::from("a")), - Seq( - Ident(String::from("b")), - Choice(Ident(String::from("c")), Ident(String::from("d"))) - ) - )), - }] - }; - assert_eq!(optimize(rules), optimized); + insta::assert_debug_snapshot!(optimize(rules)); } #[test] @@ -523,16 +429,8 @@ mod tests { )), }] }; - let optimized = { - use crate::optimizer::OptimizedExpr::*; - vec![OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Silent, - expr: box_tree!(Seq(Ident(String::from("a")), Opt(Ident(String::from("b"))))), - }] - }; - assert_eq!(optimize(rules), optimized); + insta::assert_debug_snapshot!(optimize(rules)); } #[test] @@ -548,16 +446,8 @@ mod tests { )), }] }; - let optimized = { - use crate::optimizer::OptimizedExpr::*; - vec![OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Silent, - expr: box_tree!(Ident(String::from("a"))), - }] - }; - assert_eq!(optimize(rules), optimized); + insta::assert_debug_snapshot!(optimize(rules)); } #[test] @@ -573,18 +463,7 @@ mod tests { )), }] }; - let optimized = { - use crate::optimizer::OptimizedExpr::*; - vec![OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Silent, - expr: box_tree!(Seq( - Ident(String::from("a")), - Rep(Seq(Ident(String::from("b")), Ident(String::from("a")))) - )), - }] - }; - assert_eq!(optimize(rules), optimized); + insta::assert_debug_snapshot!(optimize(rules)); } } diff --git a/meta/src/optimizer/restorer.rs b/meta/src/optimizer/restorer.rs index e128e03f..90b8147a 100644 --- a/meta/src/optimizer/restorer.rs +++ b/meta/src/optimizer/restorer.rs @@ -91,6 +91,8 @@ fn child_modifies_state( #[cfg(test)] mod tests { + use insta::assert_debug_snapshot; + use super::*; use crate::optimizer::OptimizedExpr::*; @@ -116,16 +118,7 @@ mod tests { expr: box_tree!(Rep(Push(Str("a".to_string())))), }]; - let restored = OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Normal, - expr: box_tree!(Rep(RestoreOnErr(Push(Str("a".to_string()))))), - }; - - assert_eq!( - restore_on_err(rules[0].clone(), &to_hash_map(&rules)), - restored - ); + insta::assert_debug_snapshot!(restore_on_err(rules[0].clone(), &to_hash_map(&rules))); } #[test] @@ -136,18 +129,6 @@ mod tests { expr: box_tree!(Choice(Push(Str("a".to_string())), Str("a".to_string()))), }]; - let restored = OptimizedRule { - name: "rule".to_owned(), - ty: RuleType::Normal, - expr: box_tree!(Choice( - RestoreOnErr(Push(Str("a".to_string()))), - Str("a".to_string()) - )), - }; - - assert_eq!( - restore_on_err(rules[0].clone(), &to_hash_map(&rules)), - restored - ); + assert_debug_snapshot!(restore_on_err(rules[0].clone(), &to_hash_map(&rules))); } } diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__restorer__tests__restore_choice_branch_with_and_branch_without.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__restorer__tests__restore_choice_branch_with_and_branch_without.snap new file mode 100644 index 00000000..5ceb8e1b --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__restorer__tests__restore_choice_branch_with_and_branch_without.snap @@ -0,0 +1,20 @@ +--- +source: meta/src/optimizer/restorer.rs +expression: "restore_on_err(rules[0].clone(), &to_hash_map(&rules))" +--- +OptimizedRule { + name: "rule", + ty: Normal, + expr: Choice( + RestoreOnErr( + Push( + Str( + "a", + ), + ), + ), + Str( + "a", + ), + ), +} diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__restorer__tests__restore_with_child_stack_ops.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__restorer__tests__restore_with_child_stack_ops.snap new file mode 100644 index 00000000..905e8cfb --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__restorer__tests__restore_with_child_stack_ops.snap @@ -0,0 +1,17 @@ +--- +source: meta/src/optimizer/restorer.rs +expression: "restore_on_err(rules[0].clone(), &to_hash_map(&rules))" +--- +OptimizedRule { + name: "rule", + ty: Normal, + expr: Rep( + RestoreOnErr( + Push( + Str( + "a", + ), + ), + ), + ), +} diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__concat_insensitive_strings.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__concat_insensitive_strings.snap new file mode 100644 index 00000000..d01b1748 --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__concat_insensitive_strings.snap @@ -0,0 +1,13 @@ +--- +source: meta/src/optimizer/mod.rs +expression: optimize(rules) +--- +[ + OptimizedRule { + name: "rule", + ty: Atomic, + expr: Insens( + "abcd", + ), + }, +] diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__concat_strings.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__concat_strings.snap new file mode 100644 index 00000000..0657ca74 --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__concat_strings.snap @@ -0,0 +1,13 @@ +--- +source: meta/src/optimizer/mod.rs +expression: optimize(rules) +--- +[ + OptimizedRule { + name: "rule", + ty: Atomic, + expr: Str( + "abcd", + ), + }, +] diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__impossible_common_sequence.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__impossible_common_sequence.snap new file mode 100644 index 00000000..f7521c9a --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__impossible_common_sequence.snap @@ -0,0 +1,13 @@ +--- +source: meta/src/optimizer/mod.rs +expression: optimize(rules) +--- +[ + OptimizedRule { + name: "rule", + ty: Silent, + expr: Ident( + "a", + ), + }, +] diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__lister.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__lister.snap new file mode 100644 index 00000000..38a0a264 --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__lister.snap @@ -0,0 +1,25 @@ +--- +source: meta/src/optimizer/mod.rs +expression: optimize(rules) +--- +[ + OptimizedRule { + name: "rule", + ty: Silent, + expr: Seq( + Ident( + "a", + ), + Rep( + Seq( + Ident( + "b", + ), + Ident( + "a", + ), + ), + ), + ), + }, +] diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__long_common_sequence.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__long_common_sequence.snap new file mode 100644 index 00000000..e8fbff95 --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__long_common_sequence.snap @@ -0,0 +1,28 @@ +--- +source: meta/src/optimizer/mod.rs +expression: optimize(rules) +--- +[ + OptimizedRule { + name: "rule", + ty: Silent, + expr: Seq( + Ident( + "a", + ), + Seq( + Ident( + "b", + ), + Choice( + Ident( + "c", + ), + Ident( + "d", + ), + ), + ), + ), + }, +] diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__rotate.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__rotate.snap new file mode 100644 index 00000000..4220caf2 --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__rotate.snap @@ -0,0 +1,28 @@ +--- +source: meta/src/optimizer/mod.rs +expression: optimize(rules) +--- +[ + OptimizedRule { + name: "rule", + ty: Normal, + expr: Choice( + Str( + "a", + ), + Choice( + Str( + "b", + ), + Choice( + Str( + "c", + ), + Str( + "d", + ), + ), + ), + ), + }, +] diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__short_common_sequence.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__short_common_sequence.snap new file mode 100644 index 00000000..0358b40d --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__short_common_sequence.snap @@ -0,0 +1,20 @@ +--- +source: meta/src/optimizer/mod.rs +expression: optimize(rules) +--- +[ + OptimizedRule { + name: "rule", + ty: Silent, + expr: Seq( + Ident( + "a", + ), + Opt( + Ident( + "b", + ), + ), + ), + }, +] diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__skip.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__skip.snap new file mode 100644 index 00000000..79a41ce5 --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__skip.snap @@ -0,0 +1,16 @@ +--- +source: meta/src/optimizer/mod.rs +expression: optimize(rules) +--- +[ + OptimizedRule { + name: "rule", + ty: Atomic, + expr: Skip( + [ + "a", + "b", + ], + ), + }, +] diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__unroll_loop_exact.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__unroll_loop_exact.snap new file mode 100644 index 00000000..2cafcbd6 --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__unroll_loop_exact.snap @@ -0,0 +1,23 @@ +--- +source: meta/src/optimizer/mod.rs +expression: optimize(rules) +--- +[ + OptimizedRule { + name: "rule", + ty: Atomic, + expr: Seq( + Ident( + "a", + ), + Seq( + Ident( + "a", + ), + Ident( + "a", + ), + ), + ), + }, +] diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__unroll_loop_max.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__unroll_loop_max.snap new file mode 100644 index 00000000..a2e86bfb --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__unroll_loop_max.snap @@ -0,0 +1,29 @@ +--- +source: meta/src/optimizer/mod.rs +expression: optimize(rules) +--- +[ + OptimizedRule { + name: "rule", + ty: Atomic, + expr: Seq( + Opt( + Str( + "a", + ), + ), + Seq( + Opt( + Str( + "a", + ), + ), + Opt( + Str( + "a", + ), + ), + ), + ), + }, +] diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__unroll_loop_min.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__unroll_loop_min.snap new file mode 100644 index 00000000..3e4aef27 --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__unroll_loop_min.snap @@ -0,0 +1,25 @@ +--- +source: meta/src/optimizer/mod.rs +expression: optimize(rules) +--- +[ + OptimizedRule { + name: "rule", + ty: Atomic, + expr: Seq( + Str( + "a", + ), + Seq( + Str( + "a", + ), + Rep( + Str( + "a", + ), + ), + ), + ), + }, +] diff --git a/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__unroll_loop_min_max.snap b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__unroll_loop_min_max.snap new file mode 100644 index 00000000..7c8ad718 --- /dev/null +++ b/meta/src/optimizer/snapshots/pest_meta__optimizer__tests__unroll_loop_min_max.snap @@ -0,0 +1,25 @@ +--- +source: meta/src/optimizer/mod.rs +expression: optimize(rules) +--- +[ + OptimizedRule { + name: "rule", + ty: Atomic, + expr: Seq( + Str( + "a", + ), + Seq( + Str( + "a", + ), + Opt( + Str( + "a", + ), + ), + ), + ), + }, +] diff --git a/meta/src/snapshots/pest_meta__ast__tests__top_down_iterator-2.snap b/meta/src/snapshots/pest_meta__ast__tests__top_down_iterator-2.snap new file mode 100644 index 00000000..684e75e3 --- /dev/null +++ b/meta/src/snapshots/pest_meta__ast__tests__top_down_iterator-2.snap @@ -0,0 +1,9 @@ +--- +source: meta/src/ast.rs +expression: top_down.next() +--- +Some( + Str( + "a", + ), +) diff --git a/meta/src/snapshots/pest_meta__ast__tests__top_down_iterator-3.snap b/meta/src/snapshots/pest_meta__ast__tests__top_down_iterator-3.snap new file mode 100644 index 00000000..97e1e715 --- /dev/null +++ b/meta/src/snapshots/pest_meta__ast__tests__top_down_iterator-3.snap @@ -0,0 +1,9 @@ +--- +source: meta/src/ast.rs +expression: top_down.next() +--- +Some( + Str( + "b", + ), +) diff --git a/meta/src/snapshots/pest_meta__ast__tests__top_down_iterator-4.snap b/meta/src/snapshots/pest_meta__ast__tests__top_down_iterator-4.snap new file mode 100644 index 00000000..6057584a --- /dev/null +++ b/meta/src/snapshots/pest_meta__ast__tests__top_down_iterator-4.snap @@ -0,0 +1,5 @@ +--- +source: meta/src/ast.rs +expression: top_down.next() +--- +None diff --git a/meta/src/snapshots/pest_meta__ast__tests__top_down_iterator.snap b/meta/src/snapshots/pest_meta__ast__tests__top_down_iterator.snap new file mode 100644 index 00000000..f030ab57 --- /dev/null +++ b/meta/src/snapshots/pest_meta__ast__tests__top_down_iterator.snap @@ -0,0 +1,14 @@ +--- +source: meta/src/ast.rs +expression: top_down.next() +--- +Some( + Choice( + Str( + "a", + ), + Str( + "b", + ), + ), +) diff --git a/pest/Cargo.toml b/pest/Cargo.toml index abf1939f..12d90f8f 100644 --- a/pest/Cargo.toml +++ b/pest/Cargo.toml @@ -27,3 +27,6 @@ ucd-trie = { version = "0.1.1", default-features = false } serde = { version = "1.0.89", optional = true } serde_json = { version = "1.0.39", optional = true} thiserror = { version = "1.0.31", optional = true } + +[dev-dependencies] +insta = "1.16.0" diff --git a/pest/src/error.rs b/pest/src/error.rs index c2ab8066..dfb30e14 100644 --- a/pest/src/error.rs +++ b/pest/src/error.rs @@ -542,18 +542,7 @@ mod tests { pos, ); - assert_eq!( - format!("{}", error), - vec![ - " --> 2:2", - " |", - "2 | cd", - " | ^---", - " |", - " = unexpected 4, 5, or 6; expected 1, 2, or 3", - ] - .join("\n") - ); + insta::assert_display_snapshot!(error); } #[test] @@ -568,18 +557,7 @@ mod tests { pos, ); - assert_eq!( - format!("{}", error), - vec![ - " --> 2:2", - " |", - "2 | cd", - " | ^---", - " |", - " = expected 1 or 2", - ] - .join("\n") - ); + insta::assert_display_snapshot!(error); } #[test] @@ -594,18 +572,7 @@ mod tests { pos, ); - assert_eq!( - format!("{}", error), - vec![ - " --> 2:2", - " |", - "2 | cd", - " | ^---", - " |", - " = unexpected 4, 5, or 6", - ] - .join("\n") - ); + insta::assert_display_snapshot!(error); } #[test] @@ -620,18 +587,7 @@ mod tests { pos, ); - assert_eq!( - format!("{}", error), - vec![ - " --> 2:2", - " |", - "2 | cd", - " | ^---", - " |", - " = unknown parsing error", - ] - .join("\n") - ); + insta::assert_display_snapshot!(error); } #[test] @@ -645,18 +601,7 @@ mod tests { pos, ); - assert_eq!( - format!("{}", error), - vec![ - " --> 2:2", - " |", - "2 | cd", - " | ^---", - " |", - " = error: big one", - ] - .join("\n") - ); + insta::assert_display_snapshot!(error); } #[test] @@ -671,19 +616,7 @@ mod tests { start.span(&end), ); - assert_eq!( - format!("{}", error), - vec![ - " --> 2:2", - " |", - "2 | cd", - "3 | efgh", - " | ^^", - " |", - " = error: big one", - ] - .join("\n") - ); + insta::assert_display_snapshot!(error); } #[test] @@ -698,20 +631,7 @@ mod tests { start.span(&end), ); - assert_eq!( - format!("{}", error), - vec![ - " --> 1:2", - " |", - "1 | ab", - " | ...", - "3 | efgh", - " | ^^", - " |", - " = error: big one", - ] - .join("\n") - ); + insta::assert_display_snapshot!(error); } #[test] @@ -726,19 +646,7 @@ mod tests { start.span(&end), ); - assert_eq!( - format!("{}", error), - vec![ - " --> 1:6", - " |", - "1 | abcdef", - "2 | gh", - " | ^----^", - " |", - " = error: big one", - ] - .join("\n") - ); + insta::assert_display_snapshot!(error); } #[test] @@ -756,18 +664,7 @@ mod tests { start.span(&end), ); - assert_eq!( - format!("{}", error), - vec![ - " --> 1:1", - " |", - "1 | abcdef␊", - " | ^-----^", - " |", - " = error: big one", - ] - .join("\n") - ); + insta::assert_display_snapshot!(error); } #[test] @@ -785,18 +682,7 @@ mod tests { start.span(&end), ); - assert_eq!( - format!("{}", error), - vec![ - " --> 1:1", - " |", - "1 | ", - " | ^", - " |", - " = error: empty", - ] - .join("\n") - ); + insta::assert_display_snapshot!(error); } #[test] @@ -812,18 +698,7 @@ mod tests { ) .renamed_rules(|n| format!("{}", n + 1)); - assert_eq!( - format!("{}", error), - vec![ - " --> 2:2", - " |", - "2 | cd", - " | ^---", - " |", - " = unexpected 5, 6, or 7; expected 2, 3, or 4", - ] - .join("\n") - ); + insta::assert_display_snapshot!(error); } #[test] @@ -839,18 +714,7 @@ mod tests { ) .with_path("file.rs"); - assert_eq!( - format!("{}", error), - vec![ - " --> file.rs:2:2", - " |", - "2 | cd", - " | ^---", - " |", - " = unexpected 4, 5, or 6; expected 1, 2, or 3", - ] - .join("\n") - ); + insta::assert_display_snapshot!(error); } #[test] @@ -866,17 +730,6 @@ mod tests { ) .with_path("file.rs"); - assert_eq!( - format!("{}", error), - vec![ - " --> file.rs:1:3", - " |", - "1 | a xbc", - " | ^---", - " |", - " = unexpected 4, 5, or 6; expected 1, 2, or 3", - ] - .join("\n") - ); + insta::assert_display_snapshot!(error); } } diff --git a/pest/src/iterators/pairs.rs b/pest/src/iterators/pairs.rs index 654b7dad..af161ad9 100644 --- a/pest/src/iterators/pairs.rs +++ b/pest/src/iterators/pairs.rs @@ -315,47 +315,7 @@ mod tests { fn test_pretty_print() { let pairs = AbcParser::parse(Rule::a, "abcde").unwrap(); - let expected = r#"{ - "pos": [ - 0, - 5 - ], - "pairs": [ - { - "pos": [ - 0, - 3 - ], - "rule": "a", - "inner": { - "pos": [ - 1, - 2 - ], - "pairs": [ - { - "pos": [ - 1, - 2 - ], - "rule": "b", - "inner": "b" - } - ] - } - }, - { - "pos": [ - 4, - 5 - ], - "rule": "c", - "inner": "e" - } - ] -}"#; - - assert_eq!(expected, pairs.to_json()); + insta::assert_display_snapshot!(pairs.to_json()); } #[test] @@ -383,17 +343,7 @@ mod tests { fn pairs_debug() { let pairs = AbcParser::parse(Rule::a, "abcde").unwrap(); - #[rustfmt::skip] - assert_eq!( - format!("{:?}", pairs), - "[\ - Pair { rule: a, span: Span { str: \"abc\", start: 0, end: 3 }, inner: [\ - Pair { rule: b, span: Span { str: \"b\", start: 1, end: 2 }, inner: [] }\ - ] }, \ - Pair { rule: c, span: Span { str: \"e\", start: 4, end: 5 }, inner: [] }\ - ]" - .to_owned() - ); + insta::assert_debug_snapshot!(pairs); } #[test] diff --git a/pest/src/iterators/snapshots/pest__iterators__pairs__tests__pairs_debug.snap b/pest/src/iterators/snapshots/pest__iterators__pairs__tests__pairs_debug.snap new file mode 100644 index 00000000..260a6c06 --- /dev/null +++ b/pest/src/iterators/snapshots/pest__iterators__pairs__tests__pairs_debug.snap @@ -0,0 +1,34 @@ +--- +source: pest/src/iterators/pairs.rs +expression: pairs +--- +[ + Pair { + rule: a, + span: Span { + str: "abc", + start: 0, + end: 3, + }, + inner: [ + Pair { + rule: b, + span: Span { + str: "b", + start: 1, + end: 2, + }, + inner: [], + }, + ], + }, + Pair { + rule: c, + span: Span { + str: "e", + start: 4, + end: 5, + }, + inner: [], + }, +] diff --git a/pest/src/snapshots/pest__error__tests__display_custom_pos.snap b/pest/src/snapshots/pest__error__tests__display_custom_pos.snap new file mode 100644 index 00000000..35719724 --- /dev/null +++ b/pest/src/snapshots/pest__error__tests__display_custom_pos.snap @@ -0,0 +1,10 @@ +--- +source: pest/src/error.rs +expression: error +--- + --> 2:2 + | +2 | cd + | ^--- + | + = error: big one diff --git a/pest/src/snapshots/pest__error__tests__display_custom_span_empty.snap b/pest/src/snapshots/pest__error__tests__display_custom_span_empty.snap new file mode 100644 index 00000000..8f27867a --- /dev/null +++ b/pest/src/snapshots/pest__error__tests__display_custom_span_empty.snap @@ -0,0 +1,10 @@ +--- +source: pest/src/error.rs +expression: error +--- + --> 1:1 + | +1 | + | ^ + | + = error: empty diff --git a/pest/src/snapshots/pest__error__tests__display_custom_span_end_after_newline.snap b/pest/src/snapshots/pest__error__tests__display_custom_span_end_after_newline.snap new file mode 100644 index 00000000..ada63e32 --- /dev/null +++ b/pest/src/snapshots/pest__error__tests__display_custom_span_end_after_newline.snap @@ -0,0 +1,10 @@ +--- +source: pest/src/error.rs +expression: error +--- + --> 1:1 + | +1 | abcdef␊ + | ^-----^ + | + = error: big one diff --git a/pest/src/snapshots/pest__error__tests__display_custom_span_three_lines.snap b/pest/src/snapshots/pest__error__tests__display_custom_span_three_lines.snap new file mode 100644 index 00000000..a7c69786 --- /dev/null +++ b/pest/src/snapshots/pest__error__tests__display_custom_span_three_lines.snap @@ -0,0 +1,12 @@ +--- +source: pest/src/error.rs +expression: error +--- + --> 1:2 + | +1 | ab + | ... +3 | efgh + | ^^ + | + = error: big one diff --git a/pest/src/snapshots/pest__error__tests__display_custom_span_two_lines.snap b/pest/src/snapshots/pest__error__tests__display_custom_span_two_lines.snap new file mode 100644 index 00000000..0bddbeb1 --- /dev/null +++ b/pest/src/snapshots/pest__error__tests__display_custom_span_two_lines.snap @@ -0,0 +1,11 @@ +--- +source: pest/src/error.rs +expression: error +--- + --> 2:2 + | +2 | cd +3 | efgh + | ^^ + | + = error: big one diff --git a/pest/src/snapshots/pest__error__tests__display_custom_span_two_lines_inverted_cols.snap b/pest/src/snapshots/pest__error__tests__display_custom_span_two_lines_inverted_cols.snap new file mode 100644 index 00000000..5d731252 --- /dev/null +++ b/pest/src/snapshots/pest__error__tests__display_custom_span_two_lines_inverted_cols.snap @@ -0,0 +1,11 @@ +--- +source: pest/src/error.rs +expression: error +--- + --> 1:6 + | +1 | abcdef +2 | gh + | ^----^ + | + = error: big one diff --git a/pest/src/snapshots/pest__error__tests__display_parsing_error_mixed.snap b/pest/src/snapshots/pest__error__tests__display_parsing_error_mixed.snap new file mode 100644 index 00000000..5c6814d0 --- /dev/null +++ b/pest/src/snapshots/pest__error__tests__display_parsing_error_mixed.snap @@ -0,0 +1,10 @@ +--- +source: pest/src/error.rs +expression: error +--- + --> 2:2 + | +2 | cd + | ^--- + | + = unexpected 4, 5, or 6; expected 1, 2, or 3 diff --git a/pest/src/snapshots/pest__error__tests__display_parsing_error_negatives.snap b/pest/src/snapshots/pest__error__tests__display_parsing_error_negatives.snap new file mode 100644 index 00000000..3874df87 --- /dev/null +++ b/pest/src/snapshots/pest__error__tests__display_parsing_error_negatives.snap @@ -0,0 +1,10 @@ +--- +source: pest/src/error.rs +expression: error +--- + --> 2:2 + | +2 | cd + | ^--- + | + = unexpected 4, 5, or 6 diff --git a/pest/src/snapshots/pest__error__tests__display_parsing_error_positives.snap b/pest/src/snapshots/pest__error__tests__display_parsing_error_positives.snap new file mode 100644 index 00000000..31f5b374 --- /dev/null +++ b/pest/src/snapshots/pest__error__tests__display_parsing_error_positives.snap @@ -0,0 +1,10 @@ +--- +source: pest/src/error.rs +expression: error +--- + --> 2:2 + | +2 | cd + | ^--- + | + = expected 1 or 2 diff --git a/pest/src/snapshots/pest__error__tests__display_parsing_error_unknown.snap b/pest/src/snapshots/pest__error__tests__display_parsing_error_unknown.snap new file mode 100644 index 00000000..c8bdcb29 --- /dev/null +++ b/pest/src/snapshots/pest__error__tests__display_parsing_error_unknown.snap @@ -0,0 +1,10 @@ +--- +source: pest/src/error.rs +expression: error +--- + --> 2:2 + | +2 | cd + | ^--- + | + = unknown parsing error diff --git a/pest/src/snapshots/pest__error__tests__error_with_path.snap b/pest/src/snapshots/pest__error__tests__error_with_path.snap new file mode 100644 index 00000000..174b9756 --- /dev/null +++ b/pest/src/snapshots/pest__error__tests__error_with_path.snap @@ -0,0 +1,10 @@ +--- +source: pest/src/error.rs +expression: error +--- + --> file.rs:2:2 + | +2 | cd + | ^--- + | + = unexpected 4, 5, or 6; expected 1, 2, or 3 diff --git a/pest/src/snapshots/pest__error__tests__mapped_parsing_error.snap b/pest/src/snapshots/pest__error__tests__mapped_parsing_error.snap new file mode 100644 index 00000000..c1a9e746 --- /dev/null +++ b/pest/src/snapshots/pest__error__tests__mapped_parsing_error.snap @@ -0,0 +1,10 @@ +--- +source: pest/src/error.rs +expression: error +--- + --> 2:2 + | +2 | cd + | ^--- + | + = unexpected 5, 6, or 7; expected 2, 3, or 4 diff --git a/pest/src/snapshots/pest__error__tests__underline_with_tabs.snap b/pest/src/snapshots/pest__error__tests__underline_with_tabs.snap new file mode 100644 index 00000000..0cd06559 --- /dev/null +++ b/pest/src/snapshots/pest__error__tests__underline_with_tabs.snap @@ -0,0 +1,10 @@ +--- +source: pest/src/error.rs +expression: error +--- + --> file.rs:1:3 + | +1 | a xbc + | ^--- + | + = unexpected 4, 5, or 6; expected 1, 2, or 3 diff --git a/pest/tests/calculator.rs b/pest/tests/calculator.rs index 54a50cc6..c2bd0cc1 100644 --- a/pest/tests/calculator.rs +++ b/pest/tests/calculator.rs @@ -197,5 +197,5 @@ fn prec_climb() { ]); let pairs = CalculatorParser::parse(Rule::expression, "-12+3*(4-9)^3^2/9%7381"); - assert_eq!(-1_525, consume(pairs.unwrap().next().unwrap(), &climber)); + assert_eq!(consume(pairs.unwrap().next().unwrap(), &climber), -1525); } diff --git a/pest/tests/json.rs b/pest/tests/json.rs index b9338c34..1dade714 100644 --- a/pest/tests/json.rs +++ b/pest/tests/json.rs @@ -454,9 +454,6 @@ fn ast() { if let Json::Object(pairs) = ast { let vals: Vec<&Json> = pairs.values().collect(); - assert_eq!( - **vals.get(0).unwrap(), - Json::Array(vec![Json::Null, Json::Bool(true), Json::Number(3.4)]) - ); + insta::assert_debug_snapshot!(**vals.get(0).unwrap()); } } diff --git a/pest/tests/snapshots/json__ast.snap b/pest/tests/snapshots/json__ast.snap new file mode 100644 index 00000000..f706b937 --- /dev/null +++ b/pest/tests/snapshots/json__ast.snap @@ -0,0 +1,15 @@ +--- +source: pest/tests/json.rs +expression: "**vals.get(0).unwrap()" +--- +Array( + [ + Null, + Bool( + true, + ), + Number( + 3.4, + ), + ], +)