Files
techdebt-tracker-cli/tests/parser_tests.rs
7000pctAUTO 465eb3a296
Some checks failed
CI / test (push) Has been cancelled
Initial upload with CI/CD workflow
2026-02-05 14:41:03 +00:00

114 lines
2.9 KiB
Rust

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