use television::tui::TESTING_ENV_VAR;
use super::super::common::*;
#[test]
fn test_layout_landscape() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&[
"files",
"--layout",
"landscape",
]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains(
"╭───────────────────────── files ──────────────────────────╮╭─",
);
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_layout_portrait() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&[
"files", "--layout", "portrait",
]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("╭─────────────────────────────────────────────────────── files ────────────────────────────────────────────────────────╮");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_toggle_layout() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&[
"files",
"--layout",
"portrait",
"--keybindings",
"ctrl-l='toggle_layout'",
]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("╭─────────────────────────────────────────────────────── files ────────────────────────────────────────────────────────╮");
tester.send(&ctrl('l'));
tester.assert_tui_frame_contains(
"╭───────────────────────── files ──────────────────────────╮╭─",
);
tester.send(&ctrl('l'));
tester.assert_tui_frame_contains("╭─────────────────────────────────────────────────────── files ────────────────────────────────────────────────────────╮");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_input_header_in_channel_mode() {
let mut tester = PtyTester::new();
let mut cmd = tv_local_config_and_cable_with_args(&["files"]);
cmd.args(["--input-header", "UNIQUE16CHARID"]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("UNIQUE16CHARID");
tester.assert_tui_frame_contains("CHANNEL files");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_input_header_in_adhoc_mode() {
let mut tester = PtyTester::new();
let mut cmd =
tv_local_config_and_cable_with_args(&["--source-command", "ls"]);
cmd.args(["--input-header", "UNIQUE16CHARID"]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("UNIQUE16CHARID");
tester.assert_tui_frame_contains("CHANNEL Custom");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_input_prompt_in_channel_mode() {
let mut tester = PtyTester::new();
let mut cmd = tv_local_config_and_cable_with_args(&["files"]);
cmd.args(["--input-prompt", "❯ "]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("❯ ");
tester.assert_tui_frame_contains("CHANNEL files");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_input_prompt_in_adhoc_mode() {
let mut tester = PtyTester::new();
let mut cmd =
tv_local_config_and_cable_with_args(&["--source-command", "ls"]);
cmd.args(["--input-prompt", "→ "]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("→ ");
tester.assert_tui_frame_contains("CHANNEL Custom");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_default_input_prompt() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&["files"]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("> ");
tester.assert_tui_frame_contains("CHANNEL files");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_ui_scale() {
let mut tester = PtyTester::new();
let cmd =
tv_local_config_and_cable_with_args(&["files", "--ui-scale", "80"]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains(
"╭─────────────────── files ────────────────────╮╭─",
);
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_no_remote_hides_remote_panel() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&["files", "--no-remote"]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_not_tui_frame_contains("── Channels ──");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_hide_status_bar_flag_hides_status_bar() {
let mut tester = PtyTester::new();
let cmd =
tv_local_config_and_cable_with_args(&["files", "--hide-status-bar"]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_not_tui_frame_contains("CHANNEL files");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_show_remote_flag_shows_remote_panel() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&["files", "--show-remote"]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("(1) (2) (3)");
tester.send(&ctrl('c'));
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_hide_remote_flag_hides_remote_panel() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&["files", "--hide-remote"]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_not_tui_frame_contains("(1) (2) (3)");
tester.assert_not_tui_frame_contains("── Channels ──");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_hide_remote_conflicts_with_no_remote() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&[
"files",
"--hide-remote",
"--no-remote",
]);
tester.spawn_command(cmd);
tester.assert_raw_output_contains("cannot be used with");
}
#[test]
fn test_hide_and_show_remote_conflict_errors() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&[
"files",
"--hide-remote",
"--show-remote",
]);
tester.spawn_command(cmd);
tester.assert_raw_output_contains("cannot be used with");
}
#[test]
fn test_no_help_panel_disables_help_panel() {
let mut tester = PtyTester::new();
let cmd =
tv_local_config_and_cable_with_args(&["files", "--no-help-panel"]);
let mut child = tester.spawn_command_tui(cmd);
tester.send(&ctrl('h'));
tester.assert_not_tui_frame_contains("───── Help ─────");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_hide_help_panel_starts_with_help_hidden() {
let mut tester = PtyTester::new();
let cmd =
tv_local_config_and_cable_with_args(&["files", "--hide-help-panel"]);
let mut child = tester.spawn_command_tui(cmd);
tester.send(&ctrl('h'));
tester.assert_tui_frame_contains("───── Help ─────");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_show_help_panel_starts_with_help_visible() {
let mut tester = PtyTester::new();
let cmd =
tv_local_config_and_cable_with_args(&["files", "--show-help-panel"]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("───── Help ─────");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_hide_help_panel_conflicts_with_no_help_panel() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&[
"files",
"--hide-help-panel",
"--no-help-panel",
]);
tester.spawn_command(cmd);
tester.assert_raw_output_contains("cannot be used with");
}
#[test]
fn test_hide_and_show_help_panel_conflict_errors() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&[
"files",
"--hide-help-panel",
"--show-help-panel",
]);
tester.spawn_command(cmd);
tester.assert_raw_output_contains("cannot be used with");
}
#[test]
fn test_no_help_panel_conflicts_with_show_help_panel() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&[
"files",
"--no-help-panel",
"--show-help-panel",
]);
tester.spawn_command(cmd);
tester.assert_raw_output_contains("cannot be used with");
}
#[test]
fn test_tui_with_height_and_width() {
let mut tester = PtyTester::new();
let mut cmd = tv_local_config_and_cable_with_args(&[
"files", "--height", "20", "--width", "80",
]);
cmd.env(TESTING_ENV_VAR, "1");
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("CHANNEL files");
let frame = tester.get_tui_frame();
let non_empty_lines: Vec<&str> =
frame.lines().filter(|l| !l.trim().is_empty()).collect();
assert_eq!(
non_empty_lines.len(),
20,
"Expected 20 rows, got {}",
non_empty_lines.len()
);
let max_width = non_empty_lines
.iter()
.map(|l| l.chars().count())
.max()
.unwrap_or(0);
assert_eq!(max_width, 80, "Expected 80 columns, got {}", max_width);
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_no_preview_disables_preview_panel() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&["files", "--no-preview"]);
let mut child = tester.spawn_command_tui(cmd);
tester.send("o");
tester.assert_tui_frame_contains_none(&["───╮╭───", "Show Preview"]);
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_show_preview_starts_with_preview_visible() {
let mut tester = PtyTester::new();
let cmd =
tv_local_config_and_cable_with_args(&["files", "--show-preview"]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("───╮╭───");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_no_status_bar_disables_status_bar() {
let mut tester = PtyTester::new();
let cmd =
tv_local_config_and_cable_with_args(&["files", "--no-status-bar"]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_not_tui_frame_contains("CHANNEL files");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_show_status_bar_starts_with_status_visible() {
let mut tester = PtyTester::new();
let cmd =
tv_local_config_and_cable_with_args(&["files", "--show-status-bar"]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("CHANNEL files");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_hide_preview_scrollbar_hides_scrollbar() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&[
"files",
"--hide-preview-scrollbar",
]);
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("───╮╭───");
tester.assert_not_tui_frame_contains("▲");
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}
#[test]
fn test_no_preview_conflicts_with_preview_flags() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&[
"files",
"--no-preview",
"--preview-command",
"cat {}",
]);
tester.spawn_command(cmd);
tester.assert_raw_output_contains("cannot be used with");
}
#[test]
fn test_no_status_bar_conflicts_with_status_bar_flags() {
let mut tester = PtyTester::new();
let cmd = tv_local_config_and_cable_with_args(&[
"files",
"--no-status-bar",
"--show-status-bar",
]);
tester.spawn_command(cmd);
tester.assert_raw_output_contains("cannot be used with");
}
#[test]
#[ignore = "needs https://github.com/crossterm-rs/crossterm/pull/957"]
fn test_tui_with_height_only() {
let mut tester = PtyTester::new();
let mut cmd =
tv_local_config_and_cable_with_args(&["files", "--height", "15"]);
cmd.env(TESTING_ENV_VAR, "1");
let mut child = tester.spawn_command_tui(cmd);
tester.assert_tui_frame_contains("CHANNEL files");
let frame = tester.get_tui_frame();
let non_empty_lines: Vec<&str> =
frame.lines().filter(|l| !l.trim().is_empty()).collect();
assert_eq!(
non_empty_lines.len(),
15,
"Expected 15 rows, got {}",
non_empty_lines.len()
);
tester.send(&ctrl('c'));
tester.assert_exit_ok(&mut child, DEFAULT_DELAY);
}