use super::super::Grid; use crate::panes::grid::SixelImageStore; use crate::panes::link_handler::LinkHandler; use ::insta::assert_snapshot; use std::cell::RefCell; use std::collections::HashMap; use std::rc::Rc; use zellij_utils::{ data::{Palette, Style}, pane_size::SizeInPixels, position::Position, vte, }; use std::fmt::Write; fn read_fixture(fixture_name: &str) -> Vec { let mut path_to_file = std::path::PathBuf::new(); path_to_file.push("../src"); path_to_file.push("tests"); path_to_file.push("fixtures"); path_to_file.push(fixture_name); std::fs::read(path_to_file) .unwrap_or_else(|_| panic!("could not read fixture {:?}", &fixture_name)) } #[test] fn vttest1_0() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest1-0"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest1_1() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest1-1"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest1_2() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest1-2"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest1_3() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest1-3"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest1_4() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest1-4"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest1_5() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest1-5"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_0() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-0"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_1() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-1"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_2() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-2"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_3() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-3"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_4() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-4"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_5() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-5"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_6() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-6"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_7() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-7"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_8() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-8"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_9() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-9"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_10() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-10"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_11() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-11"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_12() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-12"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_13() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-13"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest2_14() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest2-14"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest3_0() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest3-0"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest8_0() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest8-0"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest8_1() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest8-1"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest8_2() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest8-2"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest8_3() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest8-3"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest8_4() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest8-4"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn vttest8_5() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vttest8-5"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn csi_b() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "csi-b"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn csi_capital_i() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "csi-capital-i"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn csi_capital_z() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "csi-capital-z"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn terminal_reports() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "terminal_reports"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid.pending_messages_to_pty)); } #[test] fn wide_characters() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 104, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "wide_characters"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn wide_characters_line_wrap() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 104, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "wide_characters_line_wrap"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn insert_character_in_line_with_wide_character() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 104, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "wide_characters_middle_line_insert"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn delete_char_in_middle_of_line_with_widechar() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 104, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "wide-chars-delete-middle"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn delete_char_in_middle_of_line_with_multiple_widechars() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 104, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "wide-chars-delete-middle-after-multi"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn fish_wide_characters_override_clock() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 104, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "fish_wide_characters_override_clock"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn bash_delete_wide_characters() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 104, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "bash_delete_wide_characters"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn delete_wide_characters_before_cursor() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 104, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "delete_wide_characters_before_cursor"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn delete_wide_characters_before_cursor_when_cursor_is_on_wide_character() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 104, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "delete_wide_characters_before_cursor_when_cursor_is_on_wide_character"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn delete_wide_character_under_cursor() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 104, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "delete_wide_character_under_cursor"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn replace_wide_character_under_cursor() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 104, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "replace_wide_character_under_cursor"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn wrap_wide_characters() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 90, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "wide_characters_full"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn wrap_wide_characters_on_size_change() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 93, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "wide_characters_full"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } grid.change_size(21, 90); assert_snapshot!(format!("{:?}", grid)); } #[test] fn unwrap_wide_characters_on_size_change() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 93, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "wide_characters_full"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } grid.change_size(21, 90); grid.change_size(21, 93); assert_snapshot!(format!("{:?}", grid)); } #[test] fn wrap_wide_characters_in_the_middle_of_the_line() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 91, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "wide_characters_line_middle"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn wrap_wide_characters_at_the_end_of_the_line() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 90, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "wide_characters_line_end"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn copy_selected_text_from_viewport() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 27, 125, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "grid_copy"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } grid.start_selection(&Position::new(23, 6)); // check for widechar, 📦 occupies columns 34, 35, and gets selected even if only the first column is selected grid.end_selection(&Position::new(25, 35)); let text = grid.get_selected_text(); assert_eq!( text.unwrap(), "mauris in aliquam sem fringilla.\n\nzellij on  mouse-support [?] is 📦" ); } #[test] fn copy_wrapped_selected_text_from_viewport() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 22, 73, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "grid_copy_wrapped"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } grid.start_selection(&Position::new(5, 0)); grid.end_selection(&Position::new(8, 42)); let text = grid.get_selected_text(); assert_eq!( text.unwrap(), "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." ); } #[test] fn copy_selected_text_from_lines_above() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 27, 125, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "grid_copy"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } grid.start_selection(&Position::new(-2, 10)); // check for widechar, 📦 occupies columns 34, 35, and gets selected even if only the first column is selected grid.end_selection(&Position::new(2, 8)); let text = grid.get_selected_text(); assert_eq!( text.unwrap(), "eu scelerisque felis imperdiet proin fermentum leo.\nCursus risus at ultrices mi tempus.\nLaoreet id donec ultrices tincidunt arcu non sodales.\nAmet dictum sit amet justo donec enim.\nHac habi" ); } #[test] fn copy_selected_text_from_lines_below() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 27, 125, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "grid_copy"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } grid.move_viewport_up(40); grid.start_selection(&Position::new(63, 6)); // check for widechar, 📦 occupies columns 34, 35, and gets selected even if only the first column is selected grid.end_selection(&Position::new(65, 35)); let text = grid.get_selected_text(); assert_eq!( text.unwrap(), "mauris in aliquam sem fringilla.\n\nzellij on  mouse-support [?] is 📦" ); } /* * These tests below are general compatibility tests for non-trivial scenarios running in the terminal. * They use fake TTY input replicated from these scenarios. * */ #[test] fn run_bandwhich_from_fish_shell() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "fish_and_bandwhich"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn fish_tab_completion_options() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "fish_tab_completion_options"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn fish_select_tab_completion_options() { // the difference between this and the previous test is that here we press // twice, meaning the selection moves between the options and the command line // changes. // this is not clearly seen in the snapshot because it does not include styles, // but we can see the command line change and the cursor staying in place // terminal_emulator_color_codes, let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "fish_select_tab_completion_options"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn vim_scroll_region_down() { // here we test a case where vim defines the scroll region as lesser than the screen row count // and then scrolls down // the region is defined here by vim as 1-26 (there are 28 rows) // then the cursor is moved to line 26 and a new line is added // what should happen is that the first line in the scroll region (1) is deleted // terminal_emulator_color_codes, // and an empty line is inserted in the last scroll region line (26) // this tests also has other steps afterwards that fills the line with the next line in the // sixel_image_store, // file let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vim_scroll_region_down"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn vim_ctrl_d() { // in vim ctrl-d moves down half a page // in this case, it sends the terminal the csi 'M' directive, which tells it to delete X (13 in // this case) lines inside the scroll region and push the other lines up // what happens here is that 13 lines are deleted and instead 13 empty lines are added at the // end of the scroll region // terminal_emulator_color_codes, // vim makes sure to fill these empty lines with the rest of the file let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vim_ctrl_d"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn vim_ctrl_u() { // in vim ctrl-u moves up half a page // in this case, it sends the terminal the csi 'L' directive, which tells it to insert X (13 in // this case) lines at the cursor, pushing away (deleting) the last line in the scroll region // this causes the effect of scrolling up X lines (vim replaces the lines with the ones in the // file above the current content) // terminal_emulator_color_codes, let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vim_ctrl_u"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn htop() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "htop"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn htop_scrolling() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "htop_scrolling"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn htop_right_scrolling() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "htop_right_scrolling"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn vim_overwrite() { // this tests the vim overwrite message // to recreate: // * open a file in vim // * open the same file in another window // * change the file in the other window and save // terminal_emulator_color_codes, // * change the file in the original vim window and save // * confirm you would like to change the file by pressing 'y' and then ENTER // sixel_image_store, // * if everything looks fine, this test passed :) let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "vim_overwrite"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn clear_scroll_region() { // this is actually a test of 1049h/l (alternative buffer) // @imsnif - the name is a monument to the time I didn't fully understand this mechanism :) let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "clear_scroll_region"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn display_tab_characters_properly() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "tab_characters"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn neovim_insert_mode() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "nvim_insert"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn bash_cursor_linewrap() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 116, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "bash_cursor_linewrap"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn fish_paste_multiline() { // here we paste a multiline command in fish shell, making sure we support it // going up and changing the colors of our line-wrapped pasted text let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 149, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "fish_paste_multiline"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn git_log() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 149, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "git_log"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn git_diff_scrollup() { // this tests makes sure that when we have a git diff that exceeds the screen size // we are able to scroll up let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 28, 149, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "git_diff_scrollup"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn emacs_longbuf() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 60, 284, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "emacs_longbuf_tutorial"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn top_and_quit() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 56, 235, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "top_and_quit"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn exa_plus_omf_theme() { // this tests that we handle a tab delimited table properly // without overriding the previous content // this is a potential bug because the \t character is a goto // if we forwarded it as is to the terminal, we would be skipping // over existing on-screen content without deleting it, so we must // terminal_emulator_color_codes, // convert it to spaces let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 56, 235, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "exa_plus_omf_theme"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn scroll_up() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 10, 50, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "scrolling"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } grid.scroll_up_one_line(); assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn scroll_down() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 10, 50, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "scrolling"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } grid.scroll_up_one_line(); grid.scroll_down_one_line(); assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn scroll_up_with_line_wraps() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 10, 25, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "scrolling"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } grid.scroll_up_one_line(); assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn scroll_down_with_line_wraps() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 10, 25, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "scrolling"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } grid.scroll_up_one_line(); grid.scroll_down_one_line(); assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn scroll_up_decrease_width_and_scroll_down() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 10, 50, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "scrolling"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } for _ in 0..10 { grid.scroll_up_one_line(); } grid.change_size(10, 25); for _ in 0..10 { grid.scroll_down_one_line(); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn scroll_up_increase_width_and_scroll_down() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 10, 25, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "scrolling"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } for _ in 0..10 { grid.scroll_up_one_line(); } grid.change_size(10, 50); for _ in 0..10 { grid.scroll_down_one_line(); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn saved_cursor_across_resize() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 4, 20, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let mut parse = |s, grid: &mut Grid| { for b in Vec::from(s) { vte_parser.advance(&mut *grid, b) } }; let content = " \rLine 1 >fill to 20_< \rLine 2 >fill to 20_< \rLine 3 >fill to 20_< \rL\u{1b}[sine 4 >fill to 20_<"; parse(content, &mut grid); // Move real cursor position up three lines let content = "\u{1b}[3A"; parse(content, &mut grid); // Truncate top of terminal, resetting cursor (but not saved cursor) grid.change_size(3, 20); // Wrap, resetting cursor again (but not saved cursor) grid.change_size(3, 10); // Restore saved cursor position and write ZZZ let content = "\u{1b}[uZZZ"; parse(content, &mut grid); assert_snapshot!(format!("{:?}", grid)); } #[test] fn saved_cursor_across_resize_longline() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 4, 20, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let mut parse = |s, grid: &mut Grid| { for b in Vec::from(s) { vte_parser.advance(&mut *grid, b) } }; let content = " \rLine 1 >fill \u{1b}[sto 20_<"; parse(content, &mut grid); // Wrap each line precisely halfway grid.change_size(4, 10); // Write 'YY' at the end (ends up on a new wrapped line), restore to the saved cursor // and overwrite 'to' with 'ZZ' let content = "YY\u{1b}[uZZ"; parse(content, &mut grid); assert_snapshot!(format!("{:?}", grid)); } #[test] fn saved_cursor_across_resize_rewrap() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 4, 4 * 8, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let mut parse = |s, grid: &mut Grid| { for b in Vec::from(s) { vte_parser.advance(&mut *grid, b) } }; let content = " \r12345678123456781234567\u{1b}[s812345678"; // 4*8 chars parse(content, &mut grid); // Wrap each line precisely halfway, then rewrap to halve them again grid.change_size(4, 16); grid.change_size(4, 8); // Write 'Z' at the end of line 3 let content = "\u{1b}[uZ"; parse(content, &mut grid); assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn move_cursor_below_scroll_region() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 34, 114, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "move_cursor_below_scroll_region"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn insert_wide_characters_in_existing_line() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 21, 86, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "chinese_characters_line_middle"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn full_screen_scroll_region_and_scroll_up() { // this test is a regression test for a bug // where the scroll region would be set to the // full viewport and then scrolling up would cause // lines to get deleted from the viewport rather // than moving to "lines_above" // terminal_emulator_color_codes, let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 54, 80, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "scroll_region_full_screen"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } grid.scroll_up_one_line(); grid.scroll_up_one_line(); grid.scroll_up_one_line(); assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn ring_bell() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 134, 64, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "ring_bell"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert!(grid.ring_bell); } #[test] pub fn alternate_screen_change_size() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 20, 20, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "alternate_screen_change_size"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } // no scrollback in alternate screen assert_eq!(grid.scrollback_position_and_length(), (0, 0)); grid.change_size(10, 10); assert_snapshot!(format!("{:?}", grid)); assert_eq!(grid.scrollback_position_and_length(), (0, 0)) } #[test] pub fn fzf_fullscreen() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 112, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "fzf_fullscreen"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn replace_multiple_wide_characters_under_cursor() { // this test makes sure that if we replace a wide character with a non-wide character, it // properly pads the excess width in the proper place (either before the replaced non-wide // character if the cursor was "in the middle" of the wide character, or after the character if // it was "in the beginning" of the wide character) let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 112, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "replace_multiple_wide_characters"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn replace_non_wide_characters_with_wide_characters() { // this test makes sure that if we replace a wide character with a non-wide character, it // properly pads the excess width in the proper place (either before the replaced non-wide // character if the cursor was "in the middle" of the wide character, or after the character if // it was "in the beginning" of the wide character) let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 112, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "replace_non_wide_characters_with_wide_characters"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn scroll_down_ansi() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 112, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "scroll_down"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn ansi_capital_t() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 112, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let content = "foo\u{1b}[14Tbar".as_bytes(); for byte in content { vte_parser.advance(&mut grid, *byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn ansi_capital_s() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 112, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let content = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfoo\u{1b}[14Sbar".as_bytes(); for byte in content { vte_parser.advance(&mut grid, *byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn terminal_pixel_size_reports() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(Some(SizeInPixels { height: 21, width: 8, }))), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "terminal_pixel_size_reports"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_eq!( grid.pending_messages_to_pty .iter() .map(|bytes| String::from_utf8(bytes.clone()).unwrap()) .collect::>(), vec!["\x1b[4;1071;776t", "\x1b[6;21;8t"] ); } #[test] fn terminal_pixel_size_reports_in_unsupported_terminals() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), // in an unsupported terminal, we don't have this info sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "terminal_pixel_size_reports"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } let expected: Vec = vec![]; assert_eq!( grid.pending_messages_to_pty .iter() .map(|bytes| String::from_utf8(bytes.clone()).unwrap()) .collect::>(), expected, ); } #[test] pub fn ansi_csi_at_sign() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 112, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let content = "foo\u{1b}[2D\u{1b}[2@".as_bytes(); for byte in content { vte_parser.advance(&mut grid, *byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn sixel_images_are_reaped_when_scrolled_off() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let character_cell_size = Rc::new(RefCell::new(Some(SizeInPixels { width: 8, height: 21, }))); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 112, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), character_cell_size, sixel_image_store.clone(), Style::default(), debug, arrow_fonts, styled_underlines, ); let pane_content = read_fixture("sixel-image-500px.six"); for byte in pane_content { vte_parser.advance(&mut grid, byte); } for _ in 0..10_051 { // scrollbuffer limit + viewport height grid.add_canonical_line(); } let _ = grid.read_changes(0, 0); // we do this because this is where the images are reaped assert_eq!( sixel_image_store.borrow().image_count(), 0, "all images were deleted from the store" ); } #[test] pub fn sixel_images_are_reaped_when_resetting() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let character_cell_size = Rc::new(RefCell::new(Some(SizeInPixels { width: 8, height: 21, }))); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 112, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), character_cell_size, sixel_image_store.clone(), Style::default(), debug, arrow_fonts, styled_underlines, ); let pane_content = read_fixture("sixel-image-500px.six"); for byte in pane_content { vte_parser.advance(&mut grid, byte); } grid.reset_terminal_state(); let _ = grid.read_changes(0, 0); // we do this because this is where the images are reaped assert_eq!( sixel_image_store.borrow().image_count(), 0, "all images were deleted from the store" ); } #[test] pub fn sixel_image_in_alternate_buffer() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let character_cell_size = Rc::new(RefCell::new(Some(SizeInPixels { width: 8, height: 21, }))); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 30, 112, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), character_cell_size, sixel_image_store.clone(), Style::default(), debug, arrow_fonts, styled_underlines, ); let move_to_alternate_screen = "\u{1b}[?1049h"; for byte in move_to_alternate_screen.as_bytes() { vte_parser.advance(&mut grid, *byte); } let pane_content = read_fixture("sixel-image-500px.six"); for byte in pane_content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); // should include the image // let move_away_from_alternate_screen = "\u{1b}[?1049l"; for byte in move_away_from_alternate_screen.as_bytes() { vte_parser.advance(&mut grid, *byte); } assert_snapshot!(format!("{:?}", grid)); // should note include the image assert_eq!( sixel_image_store.borrow().image_count(), 0, "all images were deleted from the store when we moved back from alternate screen" ); } #[test] pub fn sixel_with_image_scrolling_decsdm() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let character_cell_size = Rc::new(RefCell::new(Some(SizeInPixels { width: 8, height: 21, }))); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 30, 112, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), character_cell_size, sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); // enter DECSDM let move_to_decsdm = "\u{1b}[?80h"; for byte in move_to_decsdm.as_bytes() { vte_parser.advance(&mut grid, *byte); } // write some text let mut text_to_fill_pane = String::new(); for i in 0..10 { writeln!(&mut text_to_fill_pane, "\rline {}", i + 1).unwrap(); } for byte in text_to_fill_pane.as_bytes() { vte_parser.advance(&mut grid, *byte); } // render a sixel image (will appear on the top left and partially cover the text) let pane_content = read_fixture("sixel-image-100px.six"); for byte in pane_content { vte_parser.advance(&mut grid, byte); } // image should be on the top left corner of the grid assert_snapshot!(format!("{:?}", grid)); // leave DECSDM let move_away_from_decsdm = "\u{1b}[?80l"; for byte in move_away_from_decsdm.as_bytes() { vte_parser.advance(&mut grid, *byte); } // Go down to the beginning of the next line let mut go_down_once = String::new(); writeln!(&mut go_down_once, "\n\r").unwrap(); for byte in go_down_once.as_bytes() { vte_parser.advance(&mut grid, *byte); } // render another sixel image, should appear under the cursor let pane_content = read_fixture("sixel-image-100px.six"); for byte in pane_content { vte_parser.advance(&mut grid, byte); } // image should appear in cursor position assert_snapshot!(format!("{:?}", grid)); } #[test] pub fn osc_4_background_query() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let content = "\u{1b}]10;?\u{1b}\\"; for byte in content.as_bytes() { vte_parser.advance(&mut grid, *byte); } let message_string = grid .pending_messages_to_pty .iter() .map(|m| String::from_utf8_lossy(m)) .fold(String::new(), |mut acc, s| { acc.push_str(&s); acc }); assert_eq!(message_string, "\u{1b}]10;rgb:0000/0000/0000\u{1b}\\"); } #[test] pub fn osc_4_foreground_query() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let content = "\u{1b}]11;?\u{1b}\\"; for byte in content.as_bytes() { vte_parser.advance(&mut grid, *byte); } let message_string = grid .pending_messages_to_pty .iter() .map(|m| String::from_utf8_lossy(m)) .fold(String::new(), |mut acc, s| { acc.push_str(&s); acc }); assert_eq!(message_string, "\u{1b}]11;rgb:0000/0000/0000\u{1b}\\"); } #[test] pub fn osc_4_color_query() { let mut color_codes = HashMap::new(); color_codes.insert(222, String::from("rgb:ffff/d7d7/8787")); let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(color_codes)); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let content = "\u{1b}]4;222;?\u{1b}\\"; for byte in content.as_bytes() { vte_parser.advance(&mut grid, *byte); } let message_string = grid .pending_messages_to_pty .iter() .map(|m| String::from_utf8_lossy(m)) .fold(String::new(), |mut acc, s| { acc.push_str(&s); acc }); assert_eq!(message_string, "\u{1b}]4;222;rgb:ffff/d7d7/8787\u{1b}\\"); } #[test] pub fn xtsmgraphics_color_register_count() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let content = "\u{1b}[?1;1;S\u{1b}\\"; for byte in content.as_bytes() { vte_parser.advance(&mut grid, *byte); } let message_string = grid .pending_messages_to_pty .iter() .map(|m| String::from_utf8_lossy(m)) .fold(String::new(), |mut acc, s| { acc.push_str(&s); acc }); assert_eq!(message_string, "\u{1b}[?1;0;65536S"); } #[test] pub fn xtsmgraphics_pixel_graphics_geometry() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let character_cell_size = Rc::new(RefCell::new(Some(SizeInPixels { width: 8, height: 21, }))); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 51, 97, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), character_cell_size, sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let content = "\u{1b}[?2;1;S\u{1b}\\"; for byte in content.as_bytes() { vte_parser.advance(&mut grid, *byte); } let message_string = grid .pending_messages_to_pty .iter() .map(|m| String::from_utf8_lossy(m)) .fold(String::new(), |mut acc, s| { acc.push_str(&s); acc }); assert_eq!(message_string, "\u{1b}[?2;0;776;1071S"); } #[test] pub fn cursor_hide_persists_through_alternate_screen() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let character_cell_size = Rc::new(RefCell::new(Some(SizeInPixels { width: 8, height: 21, }))); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 30, 112, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), character_cell_size, sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let hide_cursor = "\u{1b}[?25l"; for byte in hide_cursor.as_bytes() { vte_parser.advance(&mut grid, *byte); } assert_eq!(grid.cursor_coordinates(), None, "Cursor hidden properly"); let move_to_alternate_screen = "\u{1b}[?1049h"; for byte in move_to_alternate_screen.as_bytes() { vte_parser.advance(&mut grid, *byte); } assert_eq!( grid.cursor_coordinates(), None, "Cursor still hidden in alternate screen" ); let show_cursor = "\u{1b}[?25h"; for byte in show_cursor.as_bytes() { vte_parser.advance(&mut grid, *byte); } assert!(grid.cursor_coordinates().is_some(), "Cursor shown"); let move_away_from_alternate_screen = "\u{1b}[?1049l"; for byte in move_away_from_alternate_screen.as_bytes() { vte_parser.advance(&mut grid, *byte); } assert!( grid.cursor_coordinates().is_some(), "Cursor still shown away from alternate screen" ); } #[test] fn table_ui_component() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "table-ui-component"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn table_ui_component_with_coordinates() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "table-ui-component-with-coordinates"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn ribbon_ui_component() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "ribbon-ui-component"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn ribbon_ui_component_with_coordinates() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 110, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "ribbon-ui-component-with-coordinates"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn nested_list_ui_component() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 120, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "nested-list-ui-component"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn nested_list_ui_component_with_coordinates() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 120, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "nested-list-ui-component-with-coordinates"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn text_ui_component() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 120, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "text-ui-component"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); } #[test] fn text_ui_component_with_coordinates() { let mut vte_parser = vte::Parser::new(); let sixel_image_store = Rc::new(RefCell::new(SixelImageStore::default())); let terminal_emulator_color_codes = Rc::new(RefCell::new(HashMap::new())); let debug = false; let arrow_fonts = true; let styled_underlines = true; let mut grid = Grid::new( 41, 120, Rc::new(RefCell::new(Palette::default())), terminal_emulator_color_codes, Rc::new(RefCell::new(LinkHandler::new())), Rc::new(RefCell::new(None)), sixel_image_store, Style::default(), debug, arrow_fonts, styled_underlines, ); let fixture_name = "text-ui-component-with-coordinates"; let content = read_fixture(fixture_name); for byte in content { vte_parser.advance(&mut grid, byte); } assert_snapshot!(format!("{:?}", grid)); }