aboutsummaryrefslogtreecommitdiff
path: root/tests/ref.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ref.rs')
-rw-r--r--tests/ref.rs78
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 }
+}