This commit is contained in:
113
tests/parser_tests.rs
Normal file
113
tests/parser_tests.rs
Normal file
@@ -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());
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user