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
84
85
86
87
88
89
90
91
92
93
94
95
#[macro_use]
pub mod terminfo;

#[cfg(windows)]
pub mod console;

#[cfg(test)]
mod tests {
    use super::terminfo::{Vars, tparm};

    #[test]
    fn test_basic_setabf() {
        let mut output = Vec::new();
        let _ = tparm(
            &mut output,
            b"\\E[48;5;%p1%dm",
            &mut params!(1),
            &mut Vars::new(),
        );
        assert_eq!(output, b"\\E[48;5;1m");
    }

    #[test]
    fn test_multiple_int_constants() {
        let mut output = Vec::new();
        let _ = tparm(
            &mut output,
            b"%{1}%{2}%d%d",
            &mut params!(),
            &mut Vars::new(),
        );
        assert_eq!(output, b"21");
    }

    #[test]
    fn test_op_i() {
        let mut output = Vec::new();
        let _ = tparm(
            &mut output,
            b"%p1%d%p2%d%p3%d%i%p1%d%p2%d%p3%d",
            &mut params!(1, 2, 3),
            &mut Vars::new(),
        );
        assert_eq!(output, b"123233");
    }

    #[test]
    fn test_conditionals() {
        let mut output = Vec::new();
        let cap =
            b"\\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m";
        let _ = tparm(&mut output, cap, &mut params!(1), &mut Vars::new());
        assert_eq!(output, b"\\E[31m");
        let _ = tparm(&mut output, cap, &mut params!(8), &mut Vars::new());
        assert_eq!(output, b"\\E[90m");
        let _ = tparm(&mut output, cap, &mut params!(42), &mut Vars::new());
        assert_eq!(output, b"\\E[38;5;42m");
    }

    #[test]
    fn test_format() {
        let mut output = Vec::new();
        let _ = tparm(
            &mut output,
            b"%p1%s%p2%2s%p3%2s%p4%.2s",
            &mut params!(b"foo"[..], b"foo"[..], b"f"[..], b"foo"[..]),
            &mut Vars::new(),
        );
        assert_eq!(output, b"foofoo ffo");

        let _ = tparm(
            &mut output,
            b"%p1%:-4.2s",
            &mut params!(b"foo"[..]),
            &mut Vars::new(),
        );
        assert_eq!(output, b"fo  ");

        let _ = tparm(
            &mut output,
            b"%p1%d%p1%.3d%p1%5d%p1%:d",
            &mut params!(1),
            &mut Vars::new(),
        );
        assert_eq!(output, b"1001    11");

        let _ = tparm(
            &mut output,
            b"%p1%o%p1%#o%p2%6.4x%p2%#6.4X",
            &mut params!(15, 27),
            &mut Vars::new(),
        );
        assert_eq!(output, b"17017  001b0X001B");
    }
}