use super::*;
use ratatui_kit_keymap::crokey::key;
#[test]
fn reader_defaults_build_and_match_legacy_keys() {
let km = reader_defaults();
assert_eq!(km.action_for(key!(k)), Some(ReaderAction::ScrollUp));
assert_eq!(km.action_for(key!(down)), Some(ReaderAction::ScrollDown));
assert_eq!(km.action_for(key!(pagedown)), Some(ReaderAction::PageDown));
assert_eq!(km.action_for(key!(home)), Some(ReaderAction::GoTop));
assert_eq!(km.action_for(key!('+')), Some(ReaderAction::VolumeUp));
assert_eq!(km.action_for(key!('-')), Some(ReaderAction::VolumeDown));
assert_eq!(km.action_for(key!(tab)), Some(ReaderAction::ToggleReadMode));
assert_eq!(km.action_for(key!(i)), Some(ReaderAction::ToggleInfo));
assert_eq!(
km.action_for(key!(shift - i)),
Some(ReaderAction::ToggleInfo)
);
assert_eq!(
km.action_for(key!(shift - t)),
Some(ReaderAction::ToggleTts)
);
assert_eq!(
km.action_for(key!(o)),
Some(ReaderAction::ToggleReaderSettings)
);
assert_eq!(km.action_for(key!(ctrl - f)), Some(ReaderAction::PageDown));
assert_eq!(km.action_for(key!(ctrl - b)), Some(ReaderAction::PageUp));
}
#[test]
fn reader_override_merges() {
let mut km = reader_defaults();
let table: ratatui_kit_keymap::toml::Table =
ratatui_kit_keymap::toml::from_str("page_down = [\"ctrl-d\"]").unwrap();
let warnings = km.merge_toml_table(table);
assert!(warnings.is_empty());
assert_eq!(km.action_for(key!(ctrl - d)), Some(ReaderAction::PageDown));
assert_eq!(km.action_for(key!(pagedown)), None);
assert_eq!(km.action_for(key!(ctrl - f)), None);
assert_eq!(km.action_for(key!(k)), Some(ReaderAction::ScrollUp));
}
#[test]
fn display_keys_follow_project_style() {
let mut km = reader_defaults();
assert_eq!(display_keys(&km, ReaderAction::ScrollUp), "↑ / K");
assert_eq!(display_keys(&km, ReaderAction::VolumeDown), "-");
assert_eq!(display_keys(&km, ReaderAction::ToggleTts), "T");
let table: ratatui_kit_keymap::toml::Table =
ratatui_kit_keymap::toml::from_str("page_down = [\"ctrl-d\"]").unwrap();
km.merge_toml_table(table);
assert_eq!(display_keys(&km, ReaderAction::PageDown), "Ctrl-d");
}
#[test]
fn warnings_render_in_chinese() {
let mut km = reader_defaults();
let table: ratatui_kit_keymap::toml::Table =
ratatui_kit_keymap::toml::from_str("page_down = \"ctrl-\"\ntypo = \"x\"\ntoggle_play = 3")
.unwrap();
let messages: Vec<String> = km
.merge_toml_table(table)
.iter()
.map(render_warning)
.collect();
assert_eq!(messages.len(), 3);
assert!(messages.iter().any(|m| m.contains("无法解析")));
assert!(messages.iter().any(|m| m.contains("未知操作")));
assert!(messages.iter().any(|m| m.contains("值类型不对")));
assert_eq!(km.action_for(key!(pagedown)), Some(ReaderAction::PageDown));
}