diff options
Diffstat (limited to 'tests/ref.rs')
-rw-r--r-- | tests/ref.rs | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/ref.rs b/tests/ref.rs new file mode 100644 index 00000000..029bf91e --- /dev/null +++ b/tests/ref.rs @@ -0,0 +1,78 @@ +extern crate alacritty; +extern crate serde_json; + +/// ref tests +mod reference { + use std::fs::File; + use std::io::Read; + use std::path::Path; + + use serde_json as json; + + use alacritty::Grid; + use alacritty::Term; + use alacritty::term::Cell; + use alacritty::term::SizeInfo; + use alacritty::ansi; + + macro_rules! ref_file { + ($ref_name:ident, $file:expr) => { + concat!( + env!("CARGO_MANIFEST_DIR"), + "/tests/ref/", stringify!($ref_name), "/", $file + ) + } + } + + fn read_u8<P>(path: P) -> Vec<u8> + where P: AsRef<Path> + { + let mut res = Vec::new(); + File::open(path.as_ref()).unwrap() + .read_to_end(&mut res).unwrap(); + + res + } + + fn read_string<P>(path: P) -> String + where P: AsRef<Path> + { + let mut res = String::new(); + File::open(path.as_ref()).unwrap() + .read_to_string(&mut res).unwrap(); + + res + } + + macro_rules! ref_test { + ($name:ident) => { + #[test] + fn $name() { + let recording = read_u8(ref_file!($name, "alacritty.recording")); + let serialized_size = read_string(ref_file!($name, "size.json")); + let serialized_grid = read_string(ref_file!($name, "grid.json")); + + let size: SizeInfo = json::from_str(&serialized_size[..]).unwrap(); + let grid: Grid<Cell> = json::from_str(&serialized_grid[..]).unwrap(); + + let mut terminal = Term::new(size); + let mut parser = ansi::Processor::new(); + + for byte in recording { + parser.advance(&mut terminal, byte); + } + + assert_eq!(grid, *terminal.grid()); + } + }; + + ($( $name:ident ),*) => { + $( + ref_test! { $name } + ),* + } + } + + // Ref tests! + ref_test! { ll } +} |