ndslice/selection/
test_utils.rs1use nom::Parser as _;
10
11use crate::selection::Selection;
12
13pub fn parse(input: &str) -> Selection {
15 use nom::combinator::all_consuming;
16
17 use crate::selection::parse::expression;
18
19 let (_, selection) = all_consuming(expression).parse(input).unwrap();
20 selection
21}
22
23#[macro_export]
24macro_rules! assert_structurally_eq {
25 ($expected:expr, $actual:expr) => {{
26 let expected = &$expected;
27 let actual = &$actual;
28 assert!(
29 $crate::selection::structurally_equal(expected, actual),
30 "Selections do not match.\nExpected: {:#?}\nActual: {:#?}",
31 expected,
32 actual,
33 );
34 }};
35}
36
37#[macro_export]
38macro_rules! assert_round_trip {
39 ($selection:expr) => {{
40 let selection: Selection = $selection; let compact = $crate::selection::pretty::compact(&selection).to_string();
44 let parsed = $crate::selection::test_utils::parse(&compact);
47 assert!(
50 $crate::selection::structurally_equal(&selection, &parsed),
51 "input: {} \n compact: {}\n parsed: {}",
52 selection,
53 compact,
54 parsed
55 );
56 }};
57}