mirror of
https://github.com/ktims/rs-aggregate.git
synced 2024-11-15 23:27:18 -08:00
Improve tests to normalize (sort) test case output / expected
This commit is contained in:
parent
8d38d6f81f
commit
2da9c33f7c
47
tests/cli.rs
47
tests/cli.rs
@ -1,8 +1,47 @@
|
|||||||
use assert_cmd::Command;
|
use assert_cmd::Command;
|
||||||
use glob::glob;
|
use glob::glob;
|
||||||
use predicates::prelude::*; // Used for writing assertions
|
use predicates::prelude::*;
|
||||||
|
use predicates::reflection::PredicateReflection;
|
||||||
|
// Used for writing assertions
|
||||||
use rstest::*;
|
use rstest::*;
|
||||||
use std::{error::Error, fs::File, io::Read, path::Path};
|
use std::fmt::Display;
|
||||||
|
use std::{error::Error, fs::File, io::Read, path::Path, str};
|
||||||
|
|
||||||
|
struct SortedEquals {
|
||||||
|
expect: Vec<u8>,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn sort_buf(input: &[u8]) -> Vec<u8> {
|
||||||
|
let mut lines = input
|
||||||
|
.split(|x| *x == b'\n')
|
||||||
|
.map(|x| Vec::<u8>::from(x))
|
||||||
|
.collect::<Vec<Vec<u8>>>();
|
||||||
|
lines.sort();
|
||||||
|
lines.join(&b'\n')
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SortedEquals {
|
||||||
|
fn new(expect: &[u8]) -> SortedEquals {
|
||||||
|
let sorted = sort_buf(expect);
|
||||||
|
SortedEquals { expect: sorted }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for SortedEquals {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
f.write_str(str::from_utf8(self.expect.as_slice()).unwrap())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Predicate<[u8]> for SortedEquals {
|
||||||
|
fn eval(&self, variable: &[u8]) -> bool {
|
||||||
|
// sort self into temporary, then compare with variable
|
||||||
|
let sorted = sort_buf(variable);
|
||||||
|
sorted == self.expect
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PredicateReflection for SortedEquals {}
|
||||||
|
|
||||||
// Really should normalize the data (lex sort) before comparison
|
// Really should normalize the data (lex sort) before comparison
|
||||||
#[rstest]
|
#[rstest]
|
||||||
@ -28,7 +67,7 @@ fn dfz_test(#[case] path: &str, #[case] args: &str) -> Result<(), Box<dyn Error>
|
|||||||
|
|
||||||
assert
|
assert
|
||||||
.success()
|
.success()
|
||||||
.stdout(predicate::eq(expect_data))
|
.stdout(SortedEquals::new(&expect_data))
|
||||||
.stderr(predicate::str::is_empty());
|
.stderr(predicate::str::is_empty());
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -79,7 +118,7 @@ fn multi_input_test(#[case] path: &str, #[case] args: &str) -> Result<(), Box<dy
|
|||||||
|
|
||||||
assert
|
assert
|
||||||
.success()
|
.success()
|
||||||
.stdout(predicate::eq(expect_data))
|
.stdout(SortedEquals::new(&expect_data))
|
||||||
.stderr(predicate::str::is_empty());
|
.stderr(predicate::str::is_empty());
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
Loading…
Reference in New Issue
Block a user