aboutsummaryrefslogtreecommitdiffstats
path: root/tests/text.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-08 09:48:45 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-08 09:51:25 -0500
commitdbeb15e1104d682c118ff3916af797279d080405 (patch)
tree6b0d2f9ac76097b4ee3b4312ac84c1a0022753c7 /tests/text.rs
parent47da8f77f27174740c20c1cef99daac15f0bf9e8 (diff)
downloadvt100-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/text.rs')
-rw-r--r--tests/text.rs60
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]