From 465eb3a29620813a658a346416ccd48c48cec192 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Thu, 5 Feb 2026 14:41:03 +0000 Subject: [PATCH] Initial upload with CI/CD workflow --- tests/parser_tests.rs | 113 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 tests/parser_tests.rs diff --git a/tests/parser_tests.rs b/tests/parser_tests.rs new file mode 100644 index 0000000..30e79b0 --- /dev/null +++ b/tests/parser_tests.rs @@ -0,0 +1,113 @@ +use std::path::PathBuf; + +use techdebt_tracker_cli::core::language::{Language, LanguageParser}; +use techdebt_tracker_cli::models::{Config, PatternConfig, Priority}; + +#[test] +fn test_language_from_path_js() { + let path = PathBuf::from("test.js"); + assert_eq!(Language::from_path(&path), Some(Language::JavaScript)); +} + +#[test] +fn test_language_from_path_ts() { + let path = PathBuf::from("test.ts"); + assert_eq!(Language::from_path(&path), Some(Language::TypeScript)); +} + +#[test] +fn test_language_from_path_py() { + let path = PathBuf::from("test.py"); + assert_eq!(Language::from_path(&path), Some(Language::Python)); +} + +#[test] +fn test_language_from_path_rs() { + let path = PathBuf::from("test.rs"); + assert_eq!(Language::from_path(&path), Some(Language::Rust)); +} + +#[test] +fn test_language_from_path_unknown() { + let path = PathBuf::from("test.xyz"); + assert_eq!(Language::from_path(&path), None); +} + +#[test] +fn test_language_single_line_comment() { + assert_eq!(Language::JavaScript.single_line_comment(), Some("//")); + assert_eq!(Language::Python.single_line_comment(), Some("#")); + assert_eq!(Language::Rust.single_line_comment(), Some("//")); + assert_eq!(Language::Unknown.single_line_comment(), None); +} + +#[test] +fn test_language_as_str() { + assert_eq!(Language::JavaScript.as_str(), "JavaScript"); + assert_eq!(Language::Python.as_str(), "Python"); + assert_eq!(Language::Rust.as_str(), "Rust"); +} + +#[test] +fn test_javascript_comment_parsing() { + let content = r#" + function test() { + // TODO: Implement this + return true; + } + "#; + + let parser = LanguageParser::new(Language::JavaScript); + let patterns = vec![PatternConfig { + keyword: "TODO".to_string(), + priority: Priority::Medium, + regex: false, + }]; + + let items = parser.parse(content, &PathBuf::from("test.js"), &patterns).unwrap(); + + assert!(!items.is_empty()); + assert!(items.iter().any(|i| i.keyword == "TODO")); +} + +#[test] +fn test_python_comment_parsing() { + let content = r#" + def test(): + # FIXME: This is broken + return True + "#; + + let parser = LanguageParser::new(Language::Python); + let patterns = vec![PatternConfig { + keyword: "FIXME".to_string(), + priority: Priority::Critical, + regex: false, + }]; + + let items = parser.parse(content, &PathBuf::from("test.py"), &patterns).unwrap(); + + assert!(!items.is_empty()); + assert!(items.iter().any(|i| i.keyword == "FIXME")); +} + +#[test] +fn test_multiline_comment_parsing() { + let content = r#" + /* + * TODO: Multi-line comment + * Need to fix this later + */ + "#; + + let parser = LanguageParser::new(Language::JavaScript); + let patterns = vec![PatternConfig { + keyword: "TODO".to_string(), + priority: Priority::Medium, + regex: false, + }]; + + let items = parser.parse(content, &PathBuf::from("test.js"), &patterns).unwrap(); + + assert!(!items.is_empty()); +}