From dbeb15e1104d682c118ff3916af797279d080405 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 8 Nov 2019 09:48:45 -0500 Subject: don't leave old character data in the second cell of a wide character otherwise it might confuse the diffing algorithm if a non-wide character is written there and then it goes back to being the second cell of a wide character --- tests/text.rs | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/text.rs b/tests/text.rs index 24c700e..b23d892 100644 --- a/tests/text.rs +++ b/tests/text.rs @@ -46,9 +46,8 @@ fn newlines() { #[test] fn wide() { let mut parser = vt100::Parser::new(24, 80); - let screen1 = parser.screen().clone(); + let screen = parser.screen().clone(); parser.process("aデbネ".as_bytes()); - let screen2 = parser.screen().clone(); assert_eq!(parser.screen().cell(0, 0).unwrap().contents(), "a"); assert_eq!(parser.screen().cell(0, 1).unwrap().contents(), "デ"); assert_eq!(parser.screen().cell(0, 2).unwrap().contents(), ""); @@ -64,10 +63,11 @@ fn wide() { "\x1b[?25h\x1b[H\x1b[Jaデbネ".as_bytes() ); assert_eq!( - parser.screen().contents_diff(&screen1), + parser.screen().contents_diff(&screen), "\x1b[m\x1b[1;1Haデbネ".as_bytes() ); + let screen = parser.screen().clone(); parser.process(b"\x1b[1;1H\x1b[3Cc"); assert_eq!(parser.screen().contents(), "aデcネ"); assert_eq!(parser.screen().cursor_position(), (0, 4)); @@ -76,9 +76,61 @@ fn wide() { "\x1b[?25h\x1b[H\x1b[Jaデcネ\x1b[1;5H".as_bytes() ); assert_eq!( - parser.screen().contents_diff(&screen2), + parser.screen().contents_diff(&screen), "\x1b[m\x1b[1;1H\x1b[3Cc".as_bytes() ); + + let screen = parser.screen().clone(); + parser.process("\x1b[1;7Hfoobar".as_bytes()); + assert_eq!(parser.screen().contents(), "aデcネfoobar"); + assert_eq!(parser.screen().cursor_position(), (0, 12)); + assert_eq!( + parser.screen().contents_formatted(), + "\x1b[?25h\x1b[H\x1b[Jaデcネfoobar".as_bytes() + ); + assert_eq!( + parser.screen().contents_diff(&screen), + "\x1b[m\x1b[1;1H\x1b[6Cfoobar".as_bytes() + ); + + let screen = parser.screen().clone(); + parser.process("\x1b[1;1Hデcネfoobar\x1b[K".as_bytes()); + assert_eq!(parser.screen().contents(), "デcネfoobar"); + assert_eq!(parser.screen().cursor_position(), (0, 11)); + assert_eq!( + parser.screen().contents_formatted(), + "\x1b[?25h\x1b[H\x1b[Jデcネfoobar".as_bytes() + ); + assert_eq!( + parser.screen().contents_diff(&screen), + "\x1b[m\x1b[1;1Hデcネfo\x1b[1Cbar\x1b[X\x1b[C\x1b[1;12H".as_bytes() + ); + + let screen = parser.screen().clone(); + parser.process("\x1b[1;1Haデcネfoobar\x1b[K".as_bytes()); + assert_eq!(parser.screen().contents(), "aデcネfoobar"); + assert_eq!(parser.screen().cursor_position(), (0, 12)); + assert_eq!( + parser.screen().contents_formatted(), + "\x1b[?25h\x1b[H\x1b[Jaデcネfoobar".as_bytes() + ); + assert_eq!( + parser.screen().contents_diff(&screen), + "\x1b[m\x1b[1;1Haデcネf\x1b[1Cobar".as_bytes() + ); + + let screen = parser.screen().clone(); + parser.process("\x1b[1;1Hデcネfoobar\x1b[K".as_bytes()); + assert_eq!(parser.screen().contents(), "デcネfoobar"); + assert_eq!(parser.screen().cursor_position(), (0, 11)); + assert_eq!( + parser.screen().contents_formatted(), + "\x1b[?25h\x1b[H\x1b[Jデcネfoobar".as_bytes() + ); + assert_eq!( + parser.screen().contents_diff(&screen), + "\x1b[m\x1b[1;1Hデcネfo\x1b[1Cbar\x1b[X\x1b[C\x1b[1;12H".as_bytes() + ); } #[test] -- cgit v1.2.3-54-g00ecf