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
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}