From fc7e45cd3fbef94c0e74944f362ed670df2b8945 Mon Sep 17 00:00:00 2001 From: Andrei Stoica Date: Tue, 2 Apr 2024 00:07:09 -0400 Subject: [PATCH] test coverage --- src/file/mod.rs | 98 +++++++++++++++++++++++++++++++++++++++++++++++ src/todo/mod.rs | 3 +- src/todo/tasks.rs | 4 +- 3 files changed, 101 insertions(+), 4 deletions(-) diff --git a/src/file/mod.rs b/src/file/mod.rs index 3fa4c76..0636f97 100644 --- a/src/file/mod.rs +++ b/src/file/mod.rs @@ -111,3 +111,101 @@ pub fn extract_secitons<'a>( } groups } + +#[cfg(test)] +mod test { + use super::*; + use crate::todo::Task; + + #[test] + fn test_extract_sections() { + let test_md = "\ +# Test +## Content + - [ ] something + - [x] done + - [!] other +## Unused +### Sub section + - [ ] task +## Unrealated Stuff + - [ ] something else + + [ ] subtask"; + + let arena = Arena::new(); + let root = parse_todo_file(&test_md.to_string(), &arena); + + let result = extract_secitons(root, &vec![]); + assert_eq!(result.keys().count(), 0); + + let result = extract_secitons(root, &vec!["Not There".to_string()]); + assert_eq!(result.keys().count(), 0); + + let sections = vec!["Unused".to_string()]; + let result = extract_secitons(root, §ions); + assert_eq!(result.keys().count(), 0); + + let sections = vec!["Sub section".to_string()]; + let result = extract_secitons(root, §ions); + println!("{:#?}", root); + assert_eq!(result.keys().count(), 1); + assert!(result.get(sections.first().unwrap()).is_some()); + assert_eq!(result.get(sections.first().unwrap()).unwrap().level, 3); + + let sections = vec!["Content".to_string()]; + let result = extract_secitons(root, §ions); + println!("{:#?}", root); + assert_eq!(result.keys().count(), 1); + assert!(result.get(sections.first().unwrap()).is_some()); + assert_eq!( + result + .get(sections.first().unwrap()) + .expect("No Value for \"Content\""), + &TaskGroup { + name: sections.first().unwrap().clone(), + tasks: vec![ + Task { + status: TaskStatus::Empty, + text: "something".to_string(), + subtasks: None + }, + Task { + status: TaskStatus::Todo('!'), + text: "other".to_string(), + subtasks: None + }, + ], + level: 2 + } + ); + + let sections = vec!["Unrealated Stuff".to_string()]; + let result = extract_secitons(root, §ions); + assert_eq!(result.keys().count(), 1); + assert!(result.get(sections.first().unwrap()).is_some()); + assert_eq!( + result + .get(sections.first().unwrap()) + .expect("No Value for \"Content\""), + &TaskGroup { + name: sections.first().unwrap().clone(), + tasks: vec![Task { + status: TaskStatus::Empty, + text: "something else".to_string(), + subtasks: Some(vec![Task { + status: TaskStatus::Empty, + text: "subtask".to_string(), + subtasks: None + }]), + }], + level: 2 + } + ); + + let result = extract_secitons( + root, + &vec!["Content".to_string(), "Sub section".to_string()], + ); + assert_eq!(result.keys().count(), 2); + } +} diff --git a/src/todo/mod.rs b/src/todo/mod.rs index 61ed8f8..fcd1155 100644 --- a/src/todo/mod.rs +++ b/src/todo/mod.rs @@ -2,5 +2,4 @@ mod file; mod tasks; pub use file::File; -pub use tasks::{Status, TaskGroup}; - +pub use tasks::{Status, Task, TaskGroup}; diff --git a/src/todo/tasks.rs b/src/todo/tasks.rs index bc67fde..1cc30aa 100644 --- a/src/todo/tasks.rs +++ b/src/todo/tasks.rs @@ -3,7 +3,7 @@ use std::borrow::Borrow; use comrak::nodes::AstNode; use comrak::nodes::NodeValue; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq)] pub struct TaskGroup { pub name: String, pub tasks: Vec, @@ -11,7 +11,7 @@ pub struct TaskGroup { } // This does not support subtasks, need to figure out best path forward -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq)] pub struct Task { pub status: Status, pub text: String,