diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-11-08 09:48:45 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-11-08 09:51:25 -0500 |
commit | dbeb15e1104d682c118ff3916af797279d080405 (patch) | |
tree | 6b0d2f9ac76097b4ee3b4312ac84c1a0022753c7 /tests | |
parent | 47da8f77f27174740c20c1cef99daac15f0bf9e8 (diff) | |
download | vt100-rust-dbeb15e1104d682c118ff3916af797279d080405.tar.gz vt100-rust-dbeb15e1104d682c118ff3916af797279d080405.zip |
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
Diffstat (limited to 'tests')
-rw-r--r-- | tests/text.rs | 60 |
1 files changed, 56 insertions, 4 deletions
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] |