github_languages/
lib.rs

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