summaryrefslogtreecommitdiffstats
path: root/tests/ref.rs
blob: 349b565ec61b1b851b13d3aa419f2a11afbe1aa7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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,
        vim_simple_edit,
        tmux_htop,
        tmux_git_log
    }
}