aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-10 04:51:22 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-10 08:07:38 -0500
commitb04c0e6e97765aeb888479c5e0bc27d54de60659 (patch)
treef8ebeae6cfaecd309152dd6cde5dd14cfdba3083 /tests
parent7cd6962a9ef544049bb637c17506f794f0a37f4d (diff)
downloadvt100-rust-b04c0e6e97765aeb888479c5e0bc27d54de60659.tar.gz
vt100-rust-b04c0e6e97765aeb888479c5e0bc27d54de60659.zip
optimize cursor movement a bit
Diffstat (limited to 'tests')
-rw-r--r--tests/csi.rs36
-rw-r--r--tests/escape.rs6
-rw-r--r--tests/scroll.rs18
-rw-r--r--tests/text.rs10
-rw-r--r--tests/window_contents.rs39
5 files changed, 54 insertions, 55 deletions
diff --git a/tests/csi.rs b/tests/csi.rs
index 1c1ed46..4f06cd3 100644
--- a/tests/csi.rs
+++ b/tests/csi.rs
@@ -207,12 +207,10 @@ fn ed() {
assert_eq!(
parser.screen().contents_formatted(),
format!(
- "\x1b[?25h\x1b[m\x1b[H\x1b[J{}{}\x1b[41m{}\r\n{}{}\x1b[5;5H",
- "\r\n".repeat(4),
- "\x1b[C".repeat(4),
- "\x1b[X\x1b[C".repeat(76),
- format!("{}\r\n", "\x1b[X\x1b[C".repeat(80)).repeat(18),
- "\x1b[X\x1b[C".repeat(80),
+ "\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[5;5H\x1b[41m{}\x1b[X\r\n{}{}\x1b[X\x1b[5;5H",
+ "\x1b[X\x1b[C".repeat(75),
+ format!("{}\x1b[X\r\n", "\x1b[X\x1b[C".repeat(79)).repeat(18),
+ "\x1b[X\x1b[C".repeat(79),
)
.as_bytes()
);
@@ -259,9 +257,9 @@ fn ed() {
assert_eq!(
parser.screen().contents_formatted(),
format!(
- "\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[41m{}{}\x1b[5;5H",
- format!("{}\r\n", "\x1b[X\x1b[C".repeat(80)).repeat(4),
- "\x1b[X\x1b[C".repeat(5),
+ "\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[41m{}{}\x1b[X",
+ format!("{}\x1b[X\r\n", "\x1b[X\x1b[C".repeat(79)).repeat(4),
+ "\x1b[X\x1b[C".repeat(4),
)
.as_bytes()
);
@@ -309,8 +307,8 @@ fn ed() {
parser.screen().contents_formatted(),
format!(
"\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[41m{}{}\x1b[5;5H",
- format!("{}\r\n", "\x1b[X\x1b[C".repeat(80)).repeat(23),
- "\x1b[X\x1b[C".repeat(80),
+ format!("{}\x1b[X\r\n", "\x1b[X\x1b[C".repeat(79)).repeat(23),
+ format!("{}\x1b[X", "\x1b[X\x1b[C".repeat(79)),
)
.as_bytes()
);
@@ -422,10 +420,8 @@ fn el() {
assert_eq!(
parser.screen().contents_formatted(),
format!(
- "\x1b[?25h\x1b[m\x1b[H\x1b[J{}{}\x1b[41m{}\x1b[5;5H",
- "\r\n".repeat(4),
- "\x1b[C".repeat(4),
- "\x1b[X\x1b[C".repeat(76)
+ "\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[5;5H\x1b[41m{}\x1b[X\x1b[5;5H",
+ "\x1b[X\x1b[C".repeat(75)
)
.as_bytes()
);
@@ -464,9 +460,8 @@ fn el() {
assert_eq!(
parser.screen().contents_formatted(),
format!(
- "\x1b[?25h\x1b[m\x1b[H\x1b[J{}\x1b[41m{}\x1b[5;5H",
- "\r\n".repeat(4),
- "\x1b[X\x1b[C".repeat(5),
+ "\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[5;1H\x1b[41m{}\x1b[X",
+ "\x1b[X\x1b[C".repeat(4),
)
.as_bytes()
);
@@ -505,9 +500,8 @@ fn el() {
assert_eq!(
parser.screen().contents_formatted(),
format!(
- "\x1b[?25h\x1b[m\x1b[H\x1b[J{}\x1b[41m{}\x1b[5;5H",
- "\r\n".repeat(4),
- "\x1b[X\x1b[C".repeat(80),
+ "\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[5;1H\x1b[41m{}\x1b[X\x1b[5;5H",
+ "\x1b[X\x1b[C".repeat(79),
)
.as_bytes()
);
diff --git a/tests/escape.rs b/tests/escape.rs
index 7a05491..1800ce8 100644
--- a/tests/escape.rs
+++ b/tests/escape.rs
@@ -153,20 +153,20 @@ fn decsc() {
assert_eq!(parser.screen().cursor_position(), (4, 3));
assert_eq!(
parser.screen().contents_formatted(),
- b"\x1b[?25h\x1b[m\x1b[H\x1b[J\r\n\r\n\r\n\r\n\x1b[31mfoo"
+ b"\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[5;1H\x1b[31mfoo"
);
parser.process(b"\x1b[32m\x1b[?6lbar");
assert_eq!(parser.screen().cursor_position(), (0, 3));
assert_eq!(
parser.screen().contents_formatted(),
- &b"\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[32mbar\r\n\r\n\r\n\r\n\x1b[31mfoo\x1b[1;4H"[..]
+ &b"\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[32mbar\x1b[5;1H\x1b[31mfoo\x1b[1;4H"[..]
);
parser.process(b"\x1b8\x1b[Hz");
assert_eq!(parser.screen().cursor_position(), (4, 1));
assert_eq!(
parser.screen().contents_formatted(),
- &b"\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[32mbar\r\n\r\n\r\n\r\n\x1b[31mzoo\x1b[5;2H"[..]
+ &b"\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[32mbar\x1b[5;1H\x1b[31mzoo\x1b[5;2H"[..]
);
}
diff --git a/tests/scroll.rs b/tests/scroll.rs
index 4bbe1e9..7c75c92 100644
--- a/tests/scroll.rs
+++ b/tests/scroll.rs
@@ -153,3 +153,21 @@ fn scrollback() {
assert_eq!(parser.scroll_pos(), 7);
assert_eq!(parser.screen().contents(), "10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33");
}
+
+#[test]
+fn edge_of_screen() {
+ let mut parser = vt100::Parser::new(24, 80, 0);
+ let screen = parser.screen().clone();
+
+ parser.process(b"\x1b[31m\x1b[24;75Hfooba\x08r\x08\x1b[1@a");
+ assert_eq!(parser.screen().cursor_position(), (23, 79));
+ assert_eq!(parser.screen().contents(), "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n foobar");
+ assert_eq!(
+ parser.screen().contents_formatted(),
+ &b"\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[24;75H\x1b[31mfoobar\x1b[24;80H"[..]
+ );
+ assert_eq!(
+ parser.screen().contents_diff(&screen),
+ b"\x1b[24;75H\x1b[31mfoobar\x1b[24;80H"
+ );
+}
diff --git a/tests/text.rs b/tests/text.rs
index 3cd5a78..8578567 100644
--- a/tests/text.rs
+++ b/tests/text.rs
@@ -64,7 +64,7 @@ fn wide() {
);
assert_eq!(
parser.screen().contents_diff(&screen),
- "\x1b[m\x1b[Haデbネ".as_bytes()
+ "\x1b[maデbネ".as_bytes()
);
let screen = parser.screen().clone();
@@ -77,7 +77,7 @@ fn wide() {
);
assert_eq!(
parser.screen().contents_diff(&screen),
- "\x1b[m\x1b[H\x1b[3Cc".as_bytes()
+ "\x1b[m\x1b[1;4Hc".as_bytes()
);
let screen = parser.screen().clone();
@@ -90,7 +90,7 @@ fn wide() {
);
assert_eq!(
parser.screen().contents_diff(&screen),
- "\x1b[m\x1b[H\x1b[6Cfoobar".as_bytes()
+ "\x1b[m\x1b[2Cfoobar".as_bytes()
);
let screen = parser.screen().clone();
@@ -103,7 +103,7 @@ fn wide() {
);
assert_eq!(
parser.screen().contents_diff(&screen),
- "\x1b[m\x1b[Hデcネfo\x1b[Cbar\x1b[X\x1b[C\x1b[1;12H".as_bytes()
+ "\x1b[m\x1b[Hデcネfo\x1b[Cbar\x1b[X".as_bytes()
);
let screen = parser.screen().clone();
@@ -129,7 +129,7 @@ fn wide() {
);
assert_eq!(
parser.screen().contents_diff(&screen),
- "\x1b[m\x1b[Hデcネfo\x1b[Cbar\x1b[X\x1b[C\x1b[1;12H".as_bytes()
+ "\x1b[m\x1b[Hデcネfo\x1b[Cbar\x1b[X".as_bytes()
);
}
diff --git a/tests/window_contents.rs b/tests/window_contents.rs
index d7a3b13..0df62ef 100644
--- a/tests/window_contents.rs
+++ b/tests/window_contents.rs
@@ -71,7 +71,7 @@ fn empty_cells() {
assert_eq!(parser.screen().contents(), "foo bar");
assert_eq!(
parser.screen().contents_formatted(),
- &b"\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[31mfoo\x1b[m\x1b[C\x1b[C\x1b[32m bar\x1b[1;4H"[..]
+ &b"\x1b[?25h\x1b[m\x1b[H\x1b[J\x1b[31mfoo\x1b[2C\x1b[32m bar\x1b[1;4H"[..]
);
}
@@ -87,7 +87,7 @@ fn cursor_positioning() {
parser.screen().contents_formatted(),
b"\x1b[?25h\x1b[m\x1b[H\x1b[J:"
);
- assert_eq!(parser.screen().contents_diff(&screen1), b"\x1b[m\x1b[H:");
+ assert_eq!(parser.screen().contents_diff(&screen1), b"\x1b[m:");
parser.process(b"a");
let screen3 = parser.screen().clone();
@@ -96,10 +96,7 @@ fn cursor_positioning() {
parser.screen().contents_formatted(),
b"\x1b[?25h\x1b[m\x1b[H\x1b[J:a"
);
- assert_eq!(
- parser.screen().contents_diff(&screen2),
- b"\x1b[m\x1b[H\x1b[Ca"
- );
+ assert_eq!(parser.screen().contents_diff(&screen2), b"\x1b[ma");
parser.process(b"\x1b[1;2H\x1b[K");
assert_eq!(parser.screen().cursor_position(), (0, 1));
@@ -109,7 +106,7 @@ fn cursor_positioning() {
);
assert_eq!(
parser.screen().contents_diff(&screen3),
- b"\x1b[m\x1b[H\x1b[C\x1b[X\x1b[C\x1b[1;2H"
+ b"\x1b[m\x1b[1;2H\x1b[X"
);
}
@@ -267,9 +264,7 @@ fn rows() {
]
);
assert_eq!(
- screen2
- .rows_formatted(0, 80)
- .collect::<Vec<Vec<u8>>>(),
+ screen2.rows_formatted(0, 80).collect::<Vec<Vec<u8>>>(),
vec![
b"\x1b[31mfoo".to_vec(),
vec![],
@@ -280,7 +275,7 @@ fn rows() {
vec![],
vec![],
vec![],
- b"\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[32mbar".to_vec(),
+ b"\x1b[9C\x1b[32mbar".to_vec(),
vec![],
vec![],
vec![],
@@ -290,7 +285,7 @@ fn rows() {
vec![],
vec![],
vec![],
- b"\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[33mbaz".to_vec(),
+ b"\x1b[19C\x1b[33mbaz".to_vec(),
vec![],
vec![],
vec![],
@@ -327,9 +322,7 @@ fn rows() {
]
);
assert_eq!(
- screen2
- .rows_formatted(5, 15)
- .collect::<Vec<Vec<u8>>>(),
+ screen2.rows_formatted(5, 15).collect::<Vec<Vec<u8>>>(),
vec![
vec![],
vec![],
@@ -340,7 +333,7 @@ fn rows() {
vec![],
vec![],
vec![],
- b"\x1b[C\x1b[C\x1b[C\x1b[C\x1b[32mbar".to_vec(),
+ b"\x1b[4C\x1b[32mbar".to_vec(),
vec![],
vec![],
vec![],
@@ -350,7 +343,7 @@ fn rows() {
vec![],
vec![],
vec![],
- b"\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[C\x1b[33mb".to_vec(),
+ b"\x1b[14C\x1b[33mb".to_vec(),
vec![],
vec![],
vec![],
@@ -429,7 +422,7 @@ fn diff() {
let screen2 = parser.screen().clone();
assert_eq!(
screen2.contents_diff(&screen1),
- b"\x1b[m\x1b[H\x1b[5C\x1b[32m bar"
+ b"\x1b[m\x1b[5C\x1b[32m bar"
);
compare_diff(&screen1, &screen2, b"");
@@ -440,18 +433,12 @@ fn diff() {
parser.process(b"\x1b[1;7H\x1b[32mbaz");
let screen4 = parser.screen().clone();
- assert_eq!(
- screen4.contents_diff(&screen3),
- b"\x1b[m\x1b[H\x1b[8C\x1b[32mz"
- );
+ assert_eq!(screen4.contents_diff(&screen3), b"\x1b[m\x1b[5C\x1b[32mz");
compare_diff(&screen3, &screen4, b"\x1b[5C\x1b[32m bar\x1b[H\x1b[31mfoo");
parser.process(b"\x1b[1;8H\x1b[X");
let screen5 = parser.screen().clone();
- assert_eq!(
- screen5.contents_diff(&screen4),
- b"\x1b[m\x1b[H\x1b[7C\x1b[X\x1b[C\x1b[1;8H"
- );
+ assert_eq!(screen5.contents_diff(&screen4), b"\x1b[m\x1b[1;8H\x1b[X");
compare_diff(
&screen4,
&screen5,