aboutsummaryrefslogtreecommitdiffstats
path: root/tests/window_contents.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-05 15:38:37 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-05 15:38:37 -0500
commit9f9c519cbaa5384e666ffa2b5e1cf4f99780ba28 (patch)
tree6f4e0b348edcfd31d795d863722be358f4b2e99a /tests/window_contents.rs
parent2471941ad0ee28a0c27df3f007faa16ff7028fa8 (diff)
downloadvt100-rust-9f9c519cbaa5384e666ffa2b5e1cf4f99780ba28.tar.gz
vt100-rust-9f9c519cbaa5384e666ffa2b5e1cf4f99780ba28.zip
fix erasing cells in diff
also add more comprehensive tests
Diffstat (limited to 'tests/window_contents.rs')
-rw-r--r--tests/window_contents.rs46
1 files changed, 45 insertions, 1 deletions
diff --git a/tests/window_contents.rs b/tests/window_contents.rs
index 723e0d8..32921b8 100644
--- a/tests/window_contents.rs
+++ b/tests/window_contents.rs
@@ -1,3 +1,5 @@
+use std::io::Read as _;
+
#[test]
fn formatted() {
let mut parser = vt100::Parser::new(24, 80);
@@ -339,7 +341,7 @@ fn diff() {
parser.process(b"\x1b[1;8H\x1b[X");
let screen5 = parser.screen().clone();
- assert_eq!(screen5.contents_diff(&screen4), b"\x1b[1;8H\x1b[X");
+ assert_eq!(screen5.contents_diff(&screen4), b"\x1b[1;8H\x1b[X\x1b[C");
compare_diff(
&screen4,
&screen5,
@@ -347,6 +349,34 @@ fn diff() {
);
}
+#[test]
+fn diff_crawl() {
+ let mut parser = vt100::Parser::new(24, 80);
+ let screens: Vec<_> = (1..=30)
+ .map(|i| {
+ let mut file =
+ std::fs::File::open(format!("tests/data/crawl/crawl{}", i))
+ .unwrap();
+ let mut frame = vec![];
+ file.read_to_end(&mut frame).unwrap();
+ parser.process(&frame);
+ (frame.clone(), parser.screen().clone())
+ })
+ .collect();
+
+ let mut all_frames: Vec<u8> = vec![];
+ for two_screens in screens.windows(2) {
+ eprintln!("loop");
+ match two_screens {
+ [(prev_frame, prev_screen), (_, screen)] => {
+ all_frames.extend(prev_frame);
+ compare_diff(prev_screen, screen, &all_frames);
+ }
+ _ => unreachable!(),
+ }
+ }
+}
+
fn compare_formatted(screen: &vt100::Screen) {
let (rows, cols) = screen.size();
let mut parser = vt100::Parser::new(rows, cols);
@@ -370,6 +400,20 @@ fn compare_diff(
compare_cells(parser.screen(), &prev_screen);
parser.process(&screen.contents_diff(prev_screen));
+ if parser.screen().contents_formatted() != screen.contents_formatted() {
+ use std::io::Write as _;
+ let mut prev_screen_file =
+ std::fs::File::create("prev_screen").unwrap();
+ prev_screen_file
+ .write_all(&prev_screen.contents_formatted())
+ .unwrap();
+ let mut screen_file = std::fs::File::create("screen").unwrap();
+ screen_file.write_all(&screen.contents_formatted()).unwrap();
+ let mut diff_file = std::fs::File::create("diff").unwrap();
+ diff_file
+ .write_all(&screen.contents_diff(prev_screen))
+ .unwrap();
+ }
assert_eq!(
parser.screen().contents_formatted(),
screen.contents_formatted()