From f26501e6786f8ec1ee99c70c2b2d5e0d7687730b Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 4 Jun 2016 02:26:07 -0400 Subject: bump libvt100 for a bug fix, and add tests for it --- tests/split-escapes.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 tests/split-escapes.rs (limited to 'tests/split-escapes.rs') diff --git a/tests/split-escapes.rs b/tests/split-escapes.rs new file mode 100644 index 0000000..bd7d20a --- /dev/null +++ b/tests/split-escapes.rs @@ -0,0 +1,45 @@ +extern crate vt100; + +use std::io::prelude::*; + +fn get_file_contents(name: &str) -> Vec { + let mut file = std::fs::File::open(name).unwrap(); + let mut buf = vec![]; + file.read_to_end(&mut buf).unwrap(); + buf +} + +fn write_to_screen(chunks: &mut Vec>) -> String { + let mut screen = vt100::Screen::new(37, 193); + let mut full_chunk = vec![]; + for chunk in chunks.iter_mut() { + full_chunk.append(chunk); + let bytes = screen.process(&mut full_chunk); + full_chunk = full_chunk.split_off(bytes as usize); + } + assert_eq!(full_chunk.len(), 0); + screen.window_contents(0, 0, 36, 192) +} + +fn test_splits(filename: &str) { + let bytes = get_file_contents(filename); + let len = bytes.len(); + let expected = write_to_screen(&mut vec![bytes.clone()]); + for i in 0..(len - 1) { + let bytes_copy = bytes.clone(); + let (start, end) = bytes_copy.split_at(i); + let mut chunks = vec![start.to_vec(), end.to_vec()]; + let got = write_to_screen(&mut chunks); + assert!( + got == expected, + "failed to render {} when split at byte {}", + filename, + i + ); + } +} + +#[test] +fn split_escapes_weechat() { + test_splits("tests/data/weechat.typescript"); +} -- cgit v1.2.3-54-g00ecf