blob: ee90e3c3246abcb1eb71b9a777691a1151673c58 (
plain) (
blame)
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
|
#[path = "../../tests/helpers/mod.rs"]
mod helpers;
fn main() {
afl::fuzz!(|data: &[u8]| {
let mut vt_base = vt100::Parser::default();
let mut vt_diff = vt100::Parser::default();
let mut prev_screen = vt_base.screen().clone();
let empty_screen = vt100::Parser::default().screen().clone();
for byte in data {
vt_base.process(&[*byte]);
let mut vt_full = vt100::Parser::default();
vt_full.process(&vt_base.screen().state_formatted());
vt_full.process(&vt_base.screen().bells_diff(&empty_screen));
assert!(
helpers::compare_screens(vt_base.screen(), vt_full.screen()),
"full"
);
let mut vt_diff_empty = vt100::Parser::default();
vt_diff_empty
.process(&vt_base.screen().state_diff(&empty_screen));
vt_diff_empty
.process(&vt_base.screen().bells_diff(&empty_screen));
assert!(
helpers::compare_screens(
vt_base.screen(),
vt_diff_empty.screen()
),
"diff-empty"
);
vt_diff.process(&vt_base.screen().state_diff(&prev_screen));
vt_diff.process(&vt_base.screen().bells_diff(&empty_screen));
prev_screen = vt_base.screen().clone();
assert!(
helpers::compare_screens(vt_base.screen(), vt_diff.screen()),
"diff"
);
let mut vt_rows = vt100::Parser::default();
let mut wrapped = false;
for (idx, row) in
vt_base.screen().rows_formatted(0, 80).enumerate()
{
vt_rows.process(b"\x1b[m");
if !wrapped {
vt_rows.process(format!("\x1b[{}H", idx + 1).as_bytes());
}
vt_rows.process(&row);
wrapped =
vt_base.screen().row_wrapped(idx.try_into().unwrap());
}
vt_rows.process(&vt_base.screen().cursor_state_formatted());
vt_rows.process(&vt_base.screen().attributes_formatted());
vt_rows.process(&vt_base.screen().input_mode_formatted());
vt_rows.process(&vt_base.screen().title_formatted());
vt_rows.process(&vt_base.screen().bells_diff(&empty_screen));
assert!(
helpers::compare_screens(vt_base.screen(), vt_rows.screen()),
"rows"
);
}
});
}
|