1#[rustfmt::skip]
17mod generated;
18
19mod macros;
20
21pub use generated::{get_languages, Languages, LANGUAGES};
22
23#[cfg(test)]
24pub mod tests {
25 use super::*;
26
27 #[test]
28 fn get_all_languages() {
29 let languages = get_languages();
30 assert!(!languages.all_languages().is_empty());
31 }
32
33 #[test]
34 fn get_language_by_name() {
35 let languages = get_languages();
36 let language = languages.get_by_name("Rust").unwrap();
37 assert_eq!(language.name, "Rust");
38 }
39
40 #[test]
41 fn no_language_with_name() {
42 let languages = get_languages();
43 let language = languages.get_by_name("Rusttt");
44 assert!(language.is_none());
45 }
46
47 #[test]
48 fn get_languages_by_extension() {
49 let languages = get_languages();
50 let extension_languages = languages.get_by_extension(".rs");
51 assert!(!extension_languages.is_empty());
52 assert!(extension_languages.iter().any(|l| l.name == "Rust"));
53 }
54
55 #[test]
56 fn no_languages_with_extension() {
57 let languages = get_languages();
58 let extension_languages = languages.get_by_extension(".helloworld");
59 assert!(extension_languages.is_empty());
60 }
61
62 #[test]
63 fn get_languages_by_type() {
64 let languages = get_languages();
65 let programming_languages = languages.get_by_type("programming");
66 assert!(!programming_languages.is_empty());
67 assert!(programming_languages.iter().any(|l| l.name == "Rust"));
68 }
69
70 #[test]
71 fn no_languages_with_type() {
72 let languages = get_languages();
73 let invalid_languages = languages.get_by_type("helloworld");
74 assert!(invalid_languages.is_empty());
75 }
76
77 #[test]
78 fn get_languages_by_alias() {
79 let languages = get_languages();
80 let alias_languages = languages.get_by_alias("rs");
81 assert!(!alias_languages.is_empty());
82 assert!(alias_languages.iter().any(|l| l.name == "Rust"));
83 }
84
85 #[test]
86 fn no_languages_with_alias() {
87 let languages = get_languages();
88 let invalid_languages = languages.get_by_alias("helloworld");
89 assert!(invalid_languages.is_empty());
90 }
91
92 #[test]
93 fn get_languages_by_interpreter() {
94 let languages = get_languages();
95 let interpreter_languages = languages.get_by_interpreter("rust-script");
96 assert!(!interpreter_languages.is_empty());
97 assert!(interpreter_languages.iter().any(|l| l.name == "Rust"));
98 }
99
100 #[test]
101 fn no_languages_with_interpreter() {
102 let languages = get_languages();
103 let invalid_languages = languages.get_by_interpreter("helloworld");
104 assert!(invalid_languages.is_empty());
105 }
106
107 #[test]
108 fn get_languages_by_filename() {
109 let languages = get_languages();
110 let languages_with_filenames = languages.get_by_filename("Cargo.lock");
111 assert!(!languages_with_filenames.is_empty());
112 assert!(languages_with_filenames.iter().any(|l| l.name == "TOML"));
113 }
114
115 #[test]
116 fn no_languages_with_filename() {
117 let languages = get_languages();
118 let invalid_languages = languages.get_by_filename("helloworld");
119 assert!(invalid_languages.is_empty());
120 }
121
122 #[test]
123 fn should_get_language_by_id() {
124 let languages = get_languages();
125 let language = languages.get_by_id(100);
126 assert!(language.is_some());
127 assert_eq!(language.unwrap().name, "Elixir");
128 }
129
130 #[test]
131 fn no_language_with_id() {
132 let languages = get_languages();
133 let language = languages.get_by_id(9999999);
134 assert!(language.is_none());
135 }
136
137 #[test]
138 fn language_info_structs() {
139 use generated::*;
140
141 let javascript = JavaScript::info();
142 assert_eq!(javascript.name, "JavaScript");
143 assert_eq!(javascript.r#type, "programming");
144
145 let typescript = TypeScript::info();
146 assert_eq!(typescript.name, "TypeScript");
147 assert_eq!(typescript.r#type, "programming");
148
149 let rust = Rust::info();
150 assert_eq!(rust.name, "Rust");
151 assert_eq!(rust.r#type, "programming");
152
153 let java = Java::info();
154 assert_eq!(java.name, "Java");
155 assert_eq!(java.r#type, "programming");
156
157 let python = Python::info();
158 assert_eq!(python.name, "Python");
159 assert_eq!(python.r#type, "programming");
160 }
161}