use crate::common::harness::{layout, EditorTestHarness};
use crossterm::event::{KeyCode, KeyModifiers};
use fresh::config::Config;
#[test]
fn test_tab_bar_visible_by_default() {
let mut harness = EditorTestHarness::new(80, 24).unwrap();
harness.render().unwrap();
let tab_bar_row = harness.get_tab_bar();
assert!(
tab_bar_row.contains("[No Name]") || tab_bar_row.contains("untitled"),
"Tab bar should show buffer name at row {}. Got: {}",
layout::TAB_BAR_ROW,
tab_bar_row
);
}
#[test]
fn test_menu_bar_visible_by_default() {
let mut harness = EditorTestHarness::new(80, 24).unwrap();
harness.render().unwrap();
let menu_bar_row = harness.get_menu_bar();
assert!(
menu_bar_row.contains("File") && menu_bar_row.contains("Edit"),
"Menu bar should show File and Edit menus at row {}. Got: {}",
layout::MENU_BAR_ROW,
menu_bar_row
);
}
#[test]
fn test_toggle_tab_bar_via_command_palette() {
let mut harness = EditorTestHarness::new(80, 24).unwrap();
harness.render().unwrap();
harness.assert_screen_contains("[No Name]");
harness
.send_key(KeyCode::Char('p'), KeyModifiers::CONTROL)
.unwrap();
harness.render().unwrap();
harness.assert_screen_contains(">command");
harness.type_text("Toggle Tab Bar").unwrap();
harness.render().unwrap();
harness
.send_key(KeyCode::Enter, KeyModifiers::NONE)
.unwrap();
harness.render().unwrap();
harness.assert_screen_contains("Tab bar hidden");
harness
.send_key(KeyCode::Char('p'), KeyModifiers::CONTROL)
.unwrap();
harness.render().unwrap();
harness.type_text("Toggle Tab Bar").unwrap();
harness.render().unwrap();
harness
.send_key(KeyCode::Enter, KeyModifiers::NONE)
.unwrap();
harness.render().unwrap();
harness.assert_screen_contains("Tab bar shown");
}
#[test]
fn test_toggle_menu_bar_via_command_palette() {
let mut harness = EditorTestHarness::new(80, 24).unwrap();
harness.render().unwrap();
let menu_bar = harness.get_menu_bar();
assert!(
menu_bar.contains("File"),
"Menu bar should be visible initially"
);
harness
.send_key(KeyCode::Char('p'), KeyModifiers::CONTROL)
.unwrap();
harness.render().unwrap();
harness.type_text("Toggle Menu Bar").unwrap();
harness.render().unwrap();
harness
.send_key(KeyCode::Enter, KeyModifiers::NONE)
.unwrap();
harness.render().unwrap();
harness.assert_screen_contains("Menu bar hidden");
let menu_bar = harness.get_screen_row(layout::MENU_BAR_ROW);
assert!(
!menu_bar.contains("File"),
"Menu bar should be hidden after toggle"
);
harness
.send_key(KeyCode::Char('p'), KeyModifiers::CONTROL)
.unwrap();
harness.render().unwrap();
harness.type_text("Toggle Menu Bar").unwrap();
harness.render().unwrap();
harness
.send_key(KeyCode::Enter, KeyModifiers::NONE)
.unwrap();
harness.render().unwrap();
harness.assert_screen_contains("Menu bar shown");
}
#[test]
fn test_config_show_tab_bar_false() {
let mut config = Config::default();
config.editor.show_tab_bar = false;
let mut harness = EditorTestHarness::with_config(80, 24, config).unwrap();
harness.render().unwrap();
let menu_bar = harness.get_menu_bar();
assert!(
menu_bar.contains("File"),
"Menu bar should still be visible"
);
assert!(!harness.editor().tab_bar_visible());
}
#[test]
fn test_config_show_menu_bar_false() {
let mut config = Config::default();
config.editor.show_menu_bar = false;
let mut harness = EditorTestHarness::with_config(80, 24, config).unwrap();
harness.render().unwrap();
let row0 = harness.get_screen_row(0);
assert!(
!row0.contains("File"),
"Menu bar should be hidden when show_menu_bar is false. Got: {}",
row0
);
}
#[test]
fn test_both_bars_hidden() {
let mut config = Config::default();
config.editor.show_menu_bar = false;
config.editor.show_tab_bar = false;
let mut harness = EditorTestHarness::with_config(80, 24, config).unwrap();
harness.render().unwrap();
let row0 = harness.get_screen_row(0);
assert!(!row0.contains("File"), "Menu bar should be hidden");
assert!(!harness.editor().tab_bar_visible());
}
#[test]
fn test_tab_bar_toggle_with_multiple_buffers() {
let mut harness = EditorTestHarness::with_temp_project(80, 24).unwrap();
let project_dir = harness.project_dir().unwrap().to_path_buf();
std::fs::write(project_dir.join("file1.txt"), "content 1").unwrap();
std::fs::write(project_dir.join("file2.txt"), "content 2").unwrap();
harness
.send_key(KeyCode::Char('o'), KeyModifiers::CONTROL)
.unwrap();
harness.render().unwrap();
harness.type_text("file1.txt").unwrap();
harness
.send_key(KeyCode::Enter, KeyModifiers::NONE)
.unwrap();
harness.render().unwrap();
harness
.send_key(KeyCode::Char('o'), KeyModifiers::CONTROL)
.unwrap();
harness.render().unwrap();
harness.type_text("file2.txt").unwrap();
harness
.send_key(KeyCode::Enter, KeyModifiers::NONE)
.unwrap();
harness.render().unwrap();
harness.assert_screen_contains("file1.txt");
harness.assert_screen_contains("file2.txt");
harness
.send_key(KeyCode::Char('p'), KeyModifiers::CONTROL)
.unwrap();
harness.render().unwrap();
harness.type_text("Toggle Tab Bar").unwrap();
harness.render().unwrap();
harness
.send_key(KeyCode::Enter, KeyModifiers::NONE)
.unwrap();
harness.render().unwrap();
harness.assert_screen_contains("Tab bar hidden");
assert!(!harness.editor().tab_bar_visible());
harness
.send_key(KeyCode::Char('p'), KeyModifiers::CONTROL)
.unwrap();
harness.render().unwrap();
harness.type_text("Toggle Tab Bar").unwrap();
harness.render().unwrap();
harness
.send_key(KeyCode::Enter, KeyModifiers::NONE)
.unwrap();
harness.render().unwrap();
harness.assert_screen_contains("Tab bar shown");
assert!(harness.editor().tab_bar_visible());
}