Lines
100 %
Functions
Branches
//! Tests for the focus resolver and overlay key policies.
use super::*;
use crate::app::App;
use crate::form::Form;
use crate::modal::{KeyPolicy, Modal};
use crate::view::Tab;
use crate::widgets::EditMode;
use sqlx::types::Uuid;
fn app() -> App {
App::new(Uuid::new_v4(), EditMode::Emacs)
}
// ── current_focus precedence ────────────────────────────────────────────────
#[test]
fn default_focus_is_view_pane() {
assert_eq!(current_focus(&app()), FocusTarget::ViewPane);
fn cmdline_active_yields_cmdline_focus() {
let mut a = app();
a.open_command_line();
assert_eq!(current_focus(&a), FocusTarget::CmdLine);
fn console_focused_yields_console_input_focus() {
a.console_focused = true;
assert_eq!(current_focus(&a), FocusTarget::ConsoleInput);
fn overlay_non_empty_yields_overlay_focus() {
a.overlays.push(Modal::Help);
assert_eq!(current_focus(&a), FocusTarget::Overlay);
fn overlay_takes_precedence_over_cmdline() {
fn overlay_takes_precedence_over_console_focused() {
fn cmdline_takes_precedence_over_console_focused() {
// ── overlay key policy ──────────────────────────────────────────────────────
fn help_overlay_has_display_policy() {
assert_eq!(Modal::Help.key_policy(), KeyPolicy::Display);
fn config_set_overlay_has_input_policy() {
let m = Modal::Form(Form::config_set(
crate::widgets::Editor::new(EditMode::Emacs),
));
assert_eq!(m.key_policy(), KeyPolicy::Input);
// ── console emacs-pinned ────────────────────────────────────────────────────
fn console_input_is_emacs_pinned_even_in_vim_mode() {
a.set_edit_mode(EditMode::Vim);
// The console input editor is always Emacs.
assert_eq!(a.console.input.mode(), EditMode::Emacs);
// current_focus is ConsoleInput, not overridden by vim edit_mode.
// ── ConsoleFocus only effective on Console tab ──────────────────────────────
fn console_focus_only_set_on_console_tab() {
use crate::event::{Intent, apply};
a.active_tab = Tab::Accounts;
// ConsoleFocus on non-Console tab is absorbed by handle_tab but has no effect.
apply(&mut a, Intent::ConsoleFocus);
assert!(
!a.console_focused,
"ConsoleFocus on Accounts tab must not set console_focused"
);
let mut b = app();
b.active_tab = Tab::Console;
apply(&mut b, Intent::ConsoleFocus);
b.console_focused,
"ConsoleFocus on Console tab must set console_focused"