mod harness;
use harness::{TestRepo, TuiSession};
#[test]
fn test_shows_modified_file() {
let repo = TestRepo::new();
repo.add_file("src/main.rs", "fn main() {}");
repo.commit("add main.rs");
repo.create_branch("feature");
repo.modify_file("src/main.rs", "fn main() {\n println!(\"hello\");\n}");
let mut session = TuiSession::launch(repo.path());
session.assert_contains("src/main.rs");
session.assert_contains("println");
session.assert_status_bar_contains("1 file");
}
#[test]
fn test_starts_in_context_mode() {
let repo = TestRepo::new();
repo.add_file("test.rs", "line1\nline2\nline3");
repo.commit("add test.rs");
repo.create_branch("feature");
repo.modify_file("test.rs", "line1\nMODIFIED\nline3");
let mut session = TuiSession::launch(repo.path());
session.assert_status_bar_contains("[context]");
}
#[test]
fn test_view_mode_cycling() {
let repo = TestRepo::new();
repo.add_file("test.rs", "content");
repo.commit("add test.rs");
repo.create_branch("feature");
repo.modify_file("test.rs", "modified");
let mut session = TuiSession::launch(repo.path());
session.assert_status_bar_contains("[context]");
session.press("c");
session.wait_for_text("[changed lines only]");
session.assert_status_bar_contains("[changed lines only]");
session.press("c");
session
.wait_for(
|contents| !contents.contains("[changed lines only]") && !contents.contains("[context]"),
std::time::Duration::from_secs(5),
)
.expect("timeout waiting for Full mode");
session.press("c");
session.wait_for_text("[context]");
session.assert_status_bar_contains("[context]");
}
#[test]
fn test_quit_with_q() {
let repo = TestRepo::new();
repo.add_file("test.rs", "x");
repo.commit("add test.rs");
repo.create_branch("feature");
repo.modify_file("test.rs", "y");
let mut session = TuiSession::launch(repo.path());
session.press("q");
}