use crate::common::harness::EditorTestHarness;
use crossterm::event::{KeyCode, KeyModifiers};
use fresh::config::Config;
use tempfile::TempDir;
fn run_command(harness: &mut EditorTestHarness, name: &str) {
harness
.send_key(KeyCode::Char('p'), KeyModifiers::CONTROL)
.unwrap();
harness.render().unwrap();
harness.type_text(name).unwrap();
harness.render().unwrap();
harness
.send_key(KeyCode::Enter, KeyModifiers::NONE)
.unwrap();
harness.render().unwrap();
}
#[test]
fn test_line_numbers_current_buffer_scopes_to_buffer() {
let mut harness = EditorTestHarness::with_temp_project(120, 24).unwrap();
let dir = harness.project_dir().unwrap().to_path_buf();
std::fs::write(dir.join("a.txt"), "alpha\nbeta\n").unwrap();
std::fs::write(dir.join("b.txt"), "delta\nepsilon\n").unwrap();
harness.open_file(&dir.join("a.txt")).unwrap();
harness.open_file(&dir.join("b.txt")).unwrap();
harness.render().unwrap();
harness.assert_screen_contains("│ delta");
run_command(&mut harness, "Toggle Line Numbers (Current Buffer)");
harness.assert_screen_not_contains("│ delta");
harness.assert_screen_contains("delta");
harness.open_file(&dir.join("a.txt")).unwrap();
harness.render().unwrap();
harness.assert_screen_contains("│ alpha");
harness.open_file(&dir.join("b.txt")).unwrap();
harness.render().unwrap();
harness.assert_screen_not_contains("│ delta");
harness.assert_screen_contains("delta");
}
#[test]
fn test_line_numbers_current_buffer_persists_across_restart() {
let temp_dir = TempDir::new().unwrap();
let project_dir = temp_dir.path().join("project");
std::fs::create_dir(&project_dir).unwrap();
let file = project_dir.join("a.txt");
std::fs::write(&file, "alpha\nbeta\n").unwrap();
{
let mut harness = EditorTestHarness::with_config_and_working_dir(
120,
24,
Config::default(),
project_dir.clone(),
)
.unwrap();
harness.open_file(&file).unwrap();
harness.render().unwrap();
harness.assert_screen_contains("│ alpha");
harness.editor_mut().toggle_line_numbers_current_buffer();
harness.render().unwrap();
harness.assert_screen_not_contains("│ alpha");
harness.editor_mut().save_workspace().unwrap();
}
{
let mut harness = EditorTestHarness::with_config_and_working_dir(
120,
24,
Config::default(),
project_dir.clone(),
)
.unwrap();
let restored = harness.editor_mut().try_restore_workspace().unwrap();
assert!(restored, "workspace should have been restored");
harness.render().unwrap();
harness.assert_screen_contains("alpha");
harness.assert_screen_not_contains("│ alpha");
}
}
#[test]
fn test_line_wrap_current_buffer_scopes_to_buffer() {
let mut config = Config::default();
config.editor.line_wrap = true;
let mut harness = EditorTestHarness::with_temp_project_and_config(60, 24, config).unwrap();
let dir = harness.project_dir().unwrap().to_path_buf();
std::fs::write(dir.join("a.txt"), format!("{}TAILAAA\n", "A".repeat(80))).unwrap();
std::fs::write(dir.join("b.txt"), format!("{}TAILBBB\n", "B".repeat(80))).unwrap();
harness.open_file(&dir.join("a.txt")).unwrap();
harness.open_file(&dir.join("b.txt")).unwrap();
harness.render().unwrap();
harness.assert_screen_contains("TAILBBB");
run_command(&mut harness, "Toggle Line Wrap (Current Buffer)");
harness.assert_screen_not_contains("TAILBBB");
harness.open_file(&dir.join("a.txt")).unwrap();
harness.render().unwrap();
harness.assert_screen_contains("TAILAAA");
harness.open_file(&dir.join("b.txt")).unwrap();
harness.render().unwrap();
harness.assert_screen_not_contains("TAILBBB");
}
#[test]
fn test_line_wrap_current_buffer_persists_across_restart() {
let temp_dir = TempDir::new().unwrap();
let project_dir = temp_dir.path().join("project");
std::fs::create_dir(&project_dir).unwrap();
let file = project_dir.join("a.txt");
std::fs::write(&file, format!("{}TAILAAA\n", "A".repeat(80))).unwrap();
let mk_config = || {
let mut c = Config::default();
c.editor.line_wrap = true;
c
};
{
let mut harness = EditorTestHarness::with_config_and_working_dir(
60,
24,
mk_config(),
project_dir.clone(),
)
.unwrap();
harness.open_file(&file).unwrap();
harness.render().unwrap();
harness.assert_screen_contains("TAILAAA");
harness.editor_mut().toggle_line_wrap_current_buffer();
harness.render().unwrap();
harness.assert_screen_not_contains("TAILAAA");
harness.editor_mut().save_workspace().unwrap();
}
{
let mut harness = EditorTestHarness::with_config_and_working_dir(
60,
24,
mk_config(),
project_dir.clone(),
)
.unwrap();
let restored = harness.editor_mut().try_restore_workspace().unwrap();
assert!(restored, "workspace should have been restored");
harness.render().unwrap();
harness.assert_screen_not_contains("TAILAAA");
}
}