diff --git a/crates/mother-core/src/scanner/tests/tests_language.rs b/crates/mother-core/src/scanner/tests/tests_language.rs index 2894832..d0c9326 100644 --- a/crates/mother-core/src/scanner/tests/tests_language.rs +++ b/crates/mother-core/src/scanner/tests/tests_language.rs @@ -56,3 +56,82 @@ fn test_language_display() { assert_eq!(format!("{}", Language::SysML), "sysml"); assert_eq!(format!("{}", Language::KerML), "kerml"); } + +#[test] +fn test_language_extensions() { + // Test that each language returns the correct extensions + assert_eq!(Language::Rust.extensions(), &["rs"]); + assert_eq!(Language::Python.extensions(), &["py"]); + assert_eq!(Language::TypeScript.extensions(), &["ts", "tsx"]); + assert_eq!( + Language::JavaScript.extensions(), + &["js", "jsx", "mjs", "cjs"] + ); + assert_eq!(Language::Go.extensions(), &["go"]); + assert_eq!(Language::SysML.extensions(), &["sysml"]); + assert_eq!(Language::KerML.extensions(), &["kerml"]); +} + +#[test] +fn test_extensions_consistency_with_from_extension() { + // Verify that all extensions returned by extensions() can be parsed by from_extension() + for language in [ + Language::Rust, + Language::Python, + Language::TypeScript, + Language::JavaScript, + Language::Go, + Language::SysML, + Language::KerML, + ] { + for ext in language.extensions() { + assert_eq!( + Language::from_extension(ext), + Some(language), + "Extension '{}' should map to {:?}", + ext, + language + ); + } + } +} + +#[test] +fn test_extensions_are_not_empty() { + // Ensure every language has at least one extension + for language in [ + Language::Rust, + Language::Python, + Language::TypeScript, + Language::JavaScript, + Language::Go, + Language::SysML, + Language::KerML, + ] { + assert!( + !language.extensions().is_empty(), + "{:?} should have at least one extension", + language + ); + } +} + +#[test] +fn test_extensions_multiple_for_typescript() { + // TypeScript should support both .ts and .tsx files + let extensions = Language::TypeScript.extensions(); + assert_eq!(extensions.len(), 2); + assert!(extensions.contains(&"ts")); + assert!(extensions.contains(&"tsx")); +} + +#[test] +fn test_extensions_multiple_for_javascript() { + // JavaScript should support .js, .jsx, .mjs, and .cjs files + let extensions = Language::JavaScript.extensions(); + assert_eq!(extensions.len(), 4); + assert!(extensions.contains(&"js")); + assert!(extensions.contains(&"jsx")); + assert!(extensions.contains(&"mjs")); + assert!(extensions.contains(&"cjs")); +}