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()); }