11use gittype:: domain:: models:: Languages ;
2- use gittype:: presentation:: ui:: Colors ;
2+ use ratatui:: style:: Color ;
3+ use std:: hash:: { Hash , Hasher } ;
34
45#[ test]
5- fn language_registry_get_color_returns_specific_colors_for_known_languages ( ) {
6- assert_eq ! ( Languages :: get_color( Some ( "rust" ) ) , Colors :: lang_rust( ) ) ;
7- assert_eq ! ( Languages :: get_color( Some ( "python" ) ) , Colors :: lang_python( ) ) ;
8- assert_eq ! (
9- Languages :: get_color( Some ( "javascript" ) ) ,
10- Colors :: lang_javascript( )
11- ) ;
12- assert_eq ! (
13- Languages :: get_color( Some ( "typescript" ) ) ,
14- Colors :: lang_typescript( )
15- ) ;
16- }
17-
18- #[ test]
19- fn language_registry_get_color_returns_default_for_unknown_languages ( ) {
20- assert_eq ! (
21- Languages :: get_color( Some ( "unknown" ) ) ,
22- Colors :: lang_default( )
23- ) ;
24- assert_eq ! ( Languages :: get_color( Some ( "xyz" ) ) , Colors :: lang_default( ) ) ;
25- assert_eq ! ( Languages :: get_color( Some ( "" ) ) , Colors :: lang_default( ) ) ;
26- }
27-
28- #[ test]
29- fn language_registry_get_color_returns_default_for_none ( ) {
30- assert_eq ! ( Languages :: get_color( None ) , Colors :: lang_default( ) ) ;
6+ fn language_color_returns_specific_colors_for_known_languages ( ) {
7+ let rust = Languages :: get_by_name ( "rust" ) . unwrap ( ) ;
8+ assert_eq ! ( rust. color( ) , Color :: Red ) ;
9+ let python = Languages :: get_by_name ( "python" ) . unwrap ( ) ;
10+ assert_eq ! ( python. color( ) , Color :: Blue ) ;
11+ let js = Languages :: get_by_name ( "javascript" ) . unwrap ( ) ;
12+ assert_eq ! ( js. color( ) , Color :: Yellow ) ;
3113}
3214
3315#[ test]
@@ -80,17 +62,16 @@ fn language_registry_get_by_name_finds_known_languages() {
8062
8163#[ test]
8264fn language_trait_methods_work_correctly ( ) {
83- if let Some ( rust_lang) = Languages :: get_by_name ( "rust" ) {
84- assert_eq ! ( rust_lang. name( ) , "rust" ) ;
85- assert_eq ! ( rust_lang. display_name( ) , "Rust" ) ;
86- assert_eq ! ( rust_lang. color( ) , Colors :: lang_rust( ) ) ;
87- }
65+ let rust_lang = Languages :: get_by_name ( "rust" ) . unwrap ( ) ;
66+ assert_eq ! ( rust_lang. name( ) , "rust" ) ;
67+ assert_eq ! ( rust_lang. display_name( ) , "Rust" ) ;
68+ assert_eq ! ( rust_lang. color( ) , Color :: Red ) ;
8869}
8970
9071#[ test]
9172fn all_languages_returns_all_supported_languages ( ) {
9273 let langs = Languages :: all_languages ( ) ;
93- assert ! ( langs. len( ) >= 17 ) ; // At least 17 languages
74+ assert ! ( langs. len( ) >= 17 ) ;
9475}
9576
9677#[ test]
@@ -111,20 +92,20 @@ fn get_supported_languages_includes_main_names_and_aliases() {
11192
11293#[ test]
11394fn validate_languages_accepts_valid_languages ( ) {
114- let result = Languages :: validate_languages ( & vec ! [ "rust" . to_string( ) , "python" . to_string( ) ] ) ;
95+ let result = Languages :: validate_languages ( & [ "rust" . to_string ( ) , "python" . to_string ( ) ] ) ;
11596 assert ! ( result. is_ok( ) ) ;
11697}
11798
11899#[ test]
119100fn validate_languages_rejects_invalid_languages ( ) {
120- let result = Languages :: validate_languages ( & vec ! [ "rust" . to_string( ) , "invalid" . to_string( ) ] ) ;
101+ let result = Languages :: validate_languages ( & [ "rust" . to_string ( ) , "invalid" . to_string ( ) ] ) ;
121102 assert ! ( result. is_err( ) ) ;
122103 assert_eq ! ( result. unwrap_err( ) , vec![ "invalid" ] ) ;
123104}
124105
125106#[ test]
126107fn validate_languages_accepts_empty_list ( ) {
127- let result = Languages :: validate_languages ( & vec ! [ ] ) ;
108+ let result = Languages :: validate_languages ( & [ ] ) ;
128109 assert ! ( result. is_ok( ) ) ;
129110}
130111
@@ -169,22 +150,80 @@ fn get_by_name_is_case_insensitive() {
169150
170151#[ test]
171152fn get_by_name_supports_aliases ( ) {
172- // If language has aliases, test them
173153 assert ! ( Languages :: get_by_name( "typescript" ) . is_some( ) ) ;
174154 assert ! ( Languages :: get_by_name( "javascript" ) . is_some( ) ) ;
175155}
176156
177157#[ test]
178158fn language_file_patterns_format ( ) {
179- if let Some ( rust) = Languages :: get_by_name ( "rust" ) {
180- let patterns = rust. file_patterns ( ) ;
181- assert ! ( !patterns. is_empty( ) ) ;
182- assert ! ( patterns. iter( ) . any( |p| p. starts_with( "**/" ) ) ) ;
183- }
159+ let rust = Languages :: get_by_name ( "rust" ) . unwrap ( ) ;
160+ let patterns = rust. file_patterns ( ) ;
161+ assert ! ( !patterns. is_empty( ) ) ;
162+ assert ! ( patterns. iter( ) . any( |p| p. starts_with( "**/" ) ) ) ;
184163}
185164
186165#[ test]
187166fn get_language_by_name_wrapper_works ( ) {
188167 assert ! ( Languages :: get_language_by_name( "rust" ) . is_some( ) ) ;
189168 assert ! ( Languages :: get_language_by_name( "unknown" ) . is_none( ) ) ;
190169}
170+
171+ #[ test]
172+ fn language_as_hash_key_returns_name ( ) {
173+ let rust = Languages :: get_by_name ( "rust" ) . unwrap ( ) ;
174+ assert_eq ! ( rust. as_hash_key( ) , "rust" ) ;
175+ }
176+
177+ #[ test]
178+ fn dyn_language_hash_and_eq ( ) {
179+ let rust = Languages :: get_by_name ( "rust" ) . unwrap ( ) ;
180+ let python = Languages :: get_by_name ( "python" ) . unwrap ( ) ;
181+ let rust2 = Languages :: get_by_name ( "rust" ) . unwrap ( ) ;
182+
183+ // PartialEq
184+ assert_eq ! (
185+ rust. as_ref( ) as & dyn gittype:: domain:: models:: Language ,
186+ rust2. as_ref( ) as & dyn gittype:: domain:: models:: Language
187+ ) ;
188+ assert_ne ! (
189+ rust. as_ref( ) as & dyn gittype:: domain:: models:: Language ,
190+ python. as_ref( ) as & dyn gittype:: domain:: models:: Language
191+ ) ;
192+
193+ // Hash
194+ let mut h1 = std:: collections:: hash_map:: DefaultHasher :: new ( ) ;
195+ ( rust. as_ref ( ) as & dyn gittype:: domain:: models:: Language ) . hash ( & mut h1) ;
196+ let hash1 = h1. finish ( ) ;
197+
198+ let mut h2 = std:: collections:: hash_map:: DefaultHasher :: new ( ) ;
199+ ( rust2. as_ref ( ) as & dyn gittype:: domain:: models:: Language ) . hash ( & mut h2) ;
200+ let hash2 = h2. finish ( ) ;
201+
202+ assert_eq ! ( hash1, hash2) ;
203+ }
204+
205+ #[ test]
206+ fn all_languages_have_display_name ( ) {
207+ for lang in Languages :: all_languages ( ) {
208+ let dn = lang. display_name ( ) ;
209+ assert ! ( !dn. is_empty( ) , "{} has empty display_name" , lang. name( ) ) ;
210+ }
211+ }
212+
213+ #[ test]
214+ fn all_languages_have_color ( ) {
215+ for lang in Languages :: all_languages ( ) {
216+ let _ = lang. color ( ) ; // should not panic
217+ }
218+ }
219+
220+ #[ test]
221+ fn all_languages_have_extensions ( ) {
222+ for lang in Languages :: all_languages ( ) {
223+ assert ! (
224+ !lang. extensions( ) . is_empty( ) ,
225+ "{} has no extensions" ,
226+ lang. name( )
227+ ) ;
228+ }
229+ }
0 commit comments