From 2e7f1686d719497d9b2d2d2c8ffba20e6c8214bd Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 5 Nov 2019 12:53:25 -0500 Subject: adjust the way window contents are reported contents and contents_formatted now only allow getting the entire terminal contents, and for any other uses we now provide rows and rows_formatted. the reasoning here is that it wasn't particularly useful to return newline (or crlf) separated lines when not drawing the full terminal, since it's not like you can send those to the terminal in any meaningful way anyway (like, if you wanted to draw a subset of the terminal state, you'll almost certainly need to be doing explicit positioning on your own, since crlf is only actually correct if you're drawing the screen subset in the upper left hand corner of the screen). with this, you can draw each (subset of a) line individually, and reposition the cursor in whatever way makes sense in between drawing the lines. --- tests/csi.rs | 128 +++++++++++++++++++++++++++-------------------------------- 1 file changed, 58 insertions(+), 70 deletions(-) (limited to 'tests/csi.rs') diff --git a/tests/csi.rs b/tests/csi.rs index 85bbcab..1310dac 100644 --- a/tests/csi.rs +++ b/tests/csi.rs @@ -91,68 +91,68 @@ fn relative_movement() { #[test] fn ed() { let mut parser = vt100::Parser::new(24, 80); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); parser.process(b"foo\x1b[5;5Hbar\x1b[10;10Hbaz\x1b[20;20Hquux"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "foo\n\n\n\n bar\n\n\n\n\n baz\n\n\n\n\n\n\n\n\n\n quux"); + assert_eq!(parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n baz\n\n\n\n\n\n\n\n\n\n quux"); parser.process(b"\x1b[10;12H\x1b[0J"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n ba" ); parser.process(b"\x1b[5;6H\x1b[1J"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n r\n\n\n\n\n ba" ); parser.process(b"\x1b[7;7H\x1b[2J"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); parser.process(b"\x1b[2J\x1b[H"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); parser.process(b"foo\x1b[5;5Hbar\x1b[10;10Hbaz\x1b[20;20Hquux"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "foo\n\n\n\n bar\n\n\n\n\n baz\n\n\n\n\n\n\n\n\n\n quux"); + assert_eq!(parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n baz\n\n\n\n\n\n\n\n\n\n quux"); parser.process(b"\x1b[10;12H\x1b[J"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n ba" ); parser.process(b"\x1b[2J\x1b[H"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); parser.process(b"foo\x1b[5;5Hbar\x1b[10;10Hbaz\x1b[20;20Hquux"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "foo\n\n\n\n bar\n\n\n\n\n baz\n\n\n\n\n\n\n\n\n\n quux"); + assert_eq!(parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n baz\n\n\n\n\n\n\n\n\n\n quux"); parser.process(b"\x1b[10;12H\x1b[?0J"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n ba" ); parser.process(b"\x1b[5;6H\x1b[?1J"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n r\n\n\n\n\n ba" ); parser.process(b"\x1b[7;7H\x1b[?2J"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); parser.process(b"\x1b[2J\x1b[H"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); parser.process(b"foo\x1b[5;5Hbar\x1b[10;10Hbaz\x1b[20;20Hquux"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "foo\n\n\n\n bar\n\n\n\n\n baz\n\n\n\n\n\n\n\n\n\n quux"); + assert_eq!(parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n baz\n\n\n\n\n\n\n\n\n\n quux"); parser.process(b"\x1b[10;12H\x1b[?J"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n ba" ); } @@ -160,71 +160,71 @@ fn ed() { #[test] fn el() { let mut parser = vt100::Parser::new(24, 80); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); parser.process(b"foo\x1b[5;5Hbarbar\x1b[10;10Hbazbaz\x1b[20;20Hquux"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "foo\n\n\n\n barbar\n\n\n\n\n bazbaz\n\n\n\n\n\n\n\n\n\n quux"); + assert_eq!(parser.screen().contents(), "foo\n\n\n\n barbar\n\n\n\n\n bazbaz\n\n\n\n\n\n\n\n\n\n quux"); parser.process(b"\x1b[5;8H\x1b[0K"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "foo\n\n\n\n bar\n\n\n\n\n bazbaz\n\n\n\n\n\n\n\n\n\n quux"); + assert_eq!(parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n bazbaz\n\n\n\n\n\n\n\n\n\n quux"); parser.process(b"\x1b[10;12H\x1b[1K"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "foo\n\n\n\n bar\n\n\n\n\n baz\n\n\n\n\n\n\n\n\n\n quux"); + assert_eq!(parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n baz\n\n\n\n\n\n\n\n\n\n quux"); parser.process(b"\x1b[20;22H\x1b[2K"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n baz" ); parser.process(b"\x1b[1;2H\x1b[K"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "f\n\n\n\n bar\n\n\n\n\n baz" ); parser.process(b"\x1b[2J\x1b[H"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); parser.process(b"foo\x1b[5;5Hbarbar\x1b[10;10Hbazbaz\x1b[20;20Hquux"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "foo\n\n\n\n barbar\n\n\n\n\n bazbaz\n\n\n\n\n\n\n\n\n\n quux"); + assert_eq!(parser.screen().contents(), "foo\n\n\n\n barbar\n\n\n\n\n bazbaz\n\n\n\n\n\n\n\n\n\n quux"); parser.process(b"\x1b[5;8H\x1b[?0K"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "foo\n\n\n\n bar\n\n\n\n\n bazbaz\n\n\n\n\n\n\n\n\n\n quux"); + assert_eq!(parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n bazbaz\n\n\n\n\n\n\n\n\n\n quux"); parser.process(b"\x1b[10;12H\x1b[?1K"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "foo\n\n\n\n bar\n\n\n\n\n baz\n\n\n\n\n\n\n\n\n\n quux"); + assert_eq!(parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n baz\n\n\n\n\n\n\n\n\n\n quux"); parser.process(b"\x1b[20;22H\x1b[?2K"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "foo\n\n\n\n bar\n\n\n\n\n baz" ); parser.process(b"\x1b[1;2H\x1b[?K"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "f\n\n\n\n bar\n\n\n\n\n baz" ); parser.process(b"\x1b[2J\x1b[H"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); parser.process(b"1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" ); parser.process(b"\x1b[1;21H\x1b[K"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "12345678901234567890\n12345678901234567890" ); parser.process(b"\x1b[1;10H\x1b[1K"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), " 1234567890\n12345678901234567890" ); } @@ -232,158 +232,146 @@ fn el() { #[test] fn ich_dch_ech() { let mut parser = vt100::Parser::new(24, 80); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); parser.process(b"\x1b[10;10Hfoobar"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n\n\n\n\n\n foobar" ); parser.process(b"\x1b[10;12H\x1b[3@"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n\n\n\n\n\n fo obar" ); assert_eq!(parser.screen().cursor_position(), (9, 11)); parser.process(b"\x1b[4P"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n\n\n\n\n\n fobar" ); assert_eq!(parser.screen().cursor_position(), (9, 11)); parser.process(b"\x1b[100@"); - assert_eq!( - parser.screen().contents(0, 0, 23, 79), - "\n\n\n\n\n\n\n\n\n fo" - ); + assert_eq!(parser.screen().contents(), "\n\n\n\n\n\n\n\n\n fo"); assert_eq!(parser.screen().cursor_position(), (9, 11)); parser.process(b"obar"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n\n\n\n\n\n foobar" ); assert_eq!(parser.screen().cursor_position(), (9, 15)); parser.process(b"\x1b[10;12H\x1b[100P"); - assert_eq!( - parser.screen().contents(0, 0, 23, 79), - "\n\n\n\n\n\n\n\n\n fo" - ); + assert_eq!(parser.screen().contents(), "\n\n\n\n\n\n\n\n\n fo"); assert_eq!(parser.screen().cursor_position(), (9, 11)); parser.process(b"obar"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n\n\n\n\n\n foobar" ); assert_eq!(parser.screen().cursor_position(), (9, 15)); parser.process(b"\x1b[10;13H\x1b[X"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n\n\n\n\n\n foo ar" ); assert_eq!(parser.screen().cursor_position(), (9, 12)); parser.process(b"\x1b[10;11H\x1b[4X"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n\n\n\n\n\n f r" ); assert_eq!(parser.screen().cursor_position(), (9, 10)); parser.process(b"\x1b[10;11H\x1b[400X"); - assert_eq!( - parser.screen().contents(0, 0, 23, 79), - "\n\n\n\n\n\n\n\n\n f" - ); + assert_eq!(parser.screen().contents(), "\n\n\n\n\n\n\n\n\n f"); assert_eq!(parser.screen().cursor_position(), (9, 10)); } #[test] fn il_dl() { let mut parser = vt100::Parser::new(24, 80); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); parser.process(b"\x1b[10;10Hfoobar\x1b[3D"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n\n\n\n\n\n foobar" ); assert_eq!(parser.screen().cursor_position(), (9, 12)); parser.process(b"\x1b[L"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n\n\n\n\n\n\n foobar" ); assert_eq!(parser.screen().cursor_position(), (9, 12)); parser.process(b"\x1b[3L"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n\n\n\n\n\n\n\n\n\n foobar" ); assert_eq!(parser.screen().cursor_position(), (9, 12)); parser.process(b"\x1b[500L"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); assert_eq!(parser.screen().cursor_position(), (9, 12)); parser.process(b"\x1b[10;10Hfoobar\x1b[3D\x1b[6A"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n\n\n\n\n\n foobar" ); assert_eq!(parser.screen().cursor_position(), (3, 12)); parser.process(b"\x1b[M"); assert_eq!( - parser.screen().contents(0, 0, 23, 79), + parser.screen().contents(), "\n\n\n\n\n\n\n\n foobar" ); assert_eq!(parser.screen().cursor_position(), (3, 12)); parser.process(b"\x1b[3M"); - assert_eq!( - parser.screen().contents(0, 0, 23, 79), - "\n\n\n\n\n foobar" - ); + assert_eq!(parser.screen().contents(), "\n\n\n\n\n foobar"); assert_eq!(parser.screen().cursor_position(), (3, 12)); parser.process(b"\x1b[500M"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); assert_eq!(parser.screen().cursor_position(), (3, 12)); } #[test] fn scroll() { let mut parser = vt100::Parser::new(24, 80); - assert_eq!(parser.screen().contents(0, 0, 23, 79), ""); + assert_eq!(parser.screen().contents(), ""); parser.process(b"1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24"); + assert_eq!(parser.screen().contents(), "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24"); parser.process(b"\x1b[15;15H"); assert_eq!(parser.screen().cursor_position(), (14, 14)); parser.process(b"\x1b[S"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24"); + assert_eq!(parser.screen().contents(), "2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24"); assert_eq!(parser.screen().cursor_position(), (14, 14)); parser.process(b"\x1b[3S"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24"); + assert_eq!(parser.screen().contents(), "5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24"); assert_eq!(parser.screen().cursor_position(), (14, 14)); parser.process(b"\x1b[T"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24"); + assert_eq!(parser.screen().contents(), "\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24"); assert_eq!(parser.screen().cursor_position(), (14, 14)); parser.process(b"\x1b[5T"); - assert_eq!(parser.screen().contents(0, 0, 23, 79), "\n\n\n\n\n\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22"); + assert_eq!(parser.screen().contents(), "\n\n\n\n\n\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22"); assert_eq!(parser.screen().cursor_position(), (14, 14)); } -- cgit v1.2.3-54-g00ecf