test for resume unfinished todos

This commit is contained in:
Dhanji R. Prasanna
2025-12-02 11:07:13 +11:00
parent f8f989d4c6
commit df3f25f2f0

View File

@@ -0,0 +1,78 @@
//! Tests for TODO completion detection and file deletion behavior
/// Helper to check if all TODOs are complete (same logic as in lib.rs)
fn all_todos_complete(content: &str) -> bool {
let has_incomplete = content.lines().any(|line| {
let trimmed = line.trim();
trimmed.starts_with("- [ ]")
});
!has_incomplete && (content.contains("- [x]") || content.contains("- [X]"))
}
#[test]
fn test_all_complete_lowercase() {
let content = "# Test\n\n- [x] Done 1\n- [x] Done 2";
assert!(all_todos_complete(content));
}
#[test]
fn test_all_complete_uppercase() {
let content = "# Test\n\n- [X] Done 1\n- [X] Done 2";
assert!(all_todos_complete(content));
}
#[test]
fn test_all_complete_mixed_case() {
let content = "# Test\n\n- [x] Done 1\n- [X] Done 2";
assert!(all_todos_complete(content));
}
#[test]
fn test_has_incomplete() {
let content = "# Test\n\n- [x] Done 1\n- [ ] Not done";
assert!(!all_todos_complete(content));
}
#[test]
fn test_all_incomplete() {
let content = "# Test\n\n- [ ] Not done 1\n- [ ] Not done 2";
assert!(!all_todos_complete(content));
}
#[test]
fn test_no_checkboxes() {
let content = "# Just a header\n\nSome text without checkboxes";
assert!(!all_todos_complete(content));
}
#[test]
fn test_nested_complete() {
let content = "# Test\n\n- [x] Parent\n - [x] Child 1\n - [x] Child 2";
assert!(all_todos_complete(content));
}
#[test]
fn test_nested_incomplete() {
let content = "# Test\n\n- [x] Parent\n - [x] Child 1\n - [ ] Child 2";
assert!(!all_todos_complete(content));
}
#[test]
fn test_indented_incomplete() {
// Indented incomplete items should still be detected
let content = "# Test\n\n- [x] Done\n - [ ] Indented incomplete";
assert!(!all_todos_complete(content));
}
#[test]
fn test_empty_content() {
let content = "";
assert!(!all_todos_complete(content));
}
#[test]
fn test_whitespace_only() {
let content = " \n\n ";
assert!(!all_todos_complete(content));
}