@@ -112,3 +112,108 @@ impl Language {
112112 }
113113 }
114114}
115+
116+ #[ cfg( test) ]
117+ mod tests {
118+ use super :: * ;
119+
120+ #[ test]
121+ fn test_language_from_filename_success ( ) {
122+ assert_eq ! (
123+ Language :: from_filename( "solution.py" ) . unwrap( ) ,
124+ Language :: Python
125+ ) ;
126+ assert_eq ! (
127+ Language :: from_filename( "test.PY" ) . unwrap( ) ,
128+ Language :: Python
129+ ) ;
130+
131+ assert_eq ! (
132+ Language :: from_filename( "Solution.java" ) . unwrap( ) ,
133+ Language :: Java
134+ ) ;
135+
136+ assert_eq ! ( Language :: from_filename( "code.cpp" ) . unwrap( ) , Language :: Cpp ) ;
137+
138+ assert_eq ! (
139+ Language :: from_filename( "input.in" ) . unwrap( ) ,
140+ Language :: Input
141+ ) ;
142+
143+ assert_eq ! (
144+ Language :: from_filename( "output.out" ) . unwrap( ) ,
145+ Language :: Output
146+ ) ;
147+ }
148+
149+ #[ test]
150+ fn test_language_from_filename_errors ( ) {
151+ assert_eq ! (
152+ Language :: from_filename( ".java" ) . unwrap_err( ) ,
153+ LanguageError :: InvalidFilename
154+ ) ;
155+
156+ assert_eq ! (
157+ Language :: from_filename( "py" ) . unwrap_err( ) ,
158+ LanguageError :: InvalidFilename
159+ ) ;
160+
161+ assert_eq ! (
162+ Language :: from_filename( "file." ) . unwrap_err( ) ,
163+ LanguageError :: InvalidFilename
164+ ) ;
165+
166+ assert_eq ! (
167+ Language :: from_filename( "run.exe" ) . unwrap_err( ) ,
168+ LanguageError :: UnsupportedExtension ( "exe" . to_string( ) )
169+ ) ;
170+
171+ assert_eq ! (
172+ Language :: from_filename( "" ) . unwrap_err( ) ,
173+ LanguageError :: InvalidFilename
174+ ) ;
175+ }
176+
177+ #[ test]
178+ fn test_language_from_extension_success ( ) {
179+ assert_eq ! ( Language :: from_extension( "py" ) . unwrap( ) , Language :: Python ) ;
180+ assert_eq ! ( Language :: from_extension( "rs" ) . unwrap( ) , Language :: Rust ) ;
181+ assert_eq ! ( Language :: from_extension( "java" ) . unwrap( ) , Language :: Java ) ;
182+ assert_eq ! ( Language :: from_extension( "cpp" ) . unwrap( ) , Language :: Cpp ) ;
183+ assert_eq ! (
184+ Language :: from_extension( "js" ) . unwrap( ) ,
185+ Language :: Javascript
186+ ) ;
187+ assert_eq ! (
188+ Language :: from_extension( "ts" ) . unwrap( ) ,
189+ Language :: Typescript
190+ ) ;
191+ assert_eq ! ( Language :: from_extension( "c" ) . unwrap( ) , Language :: C ) ;
192+ assert_eq ! ( Language :: from_extension( "cs" ) . unwrap( ) , Language :: Csharp ) ;
193+ assert_eq ! ( Language :: from_extension( "go" ) . unwrap( ) , Language :: Go ) ;
194+ assert_eq ! ( Language :: from_extension( "kt" ) . unwrap( ) , Language :: Kotlin ) ;
195+ assert_eq ! ( Language :: from_extension( "rb" ) . unwrap( ) , Language :: Ruby ) ;
196+ assert_eq ! ( Language :: from_extension( "php" ) . unwrap( ) , Language :: Php ) ;
197+ assert_eq ! ( Language :: from_extension( "pl" ) . unwrap( ) , Language :: Perl ) ;
198+ assert_eq ! ( Language :: from_extension( "pas" ) . unwrap( ) , Language :: Pascal ) ;
199+ assert_eq ! ( Language :: from_extension( "ml" ) . unwrap( ) , Language :: Ocaml ) ;
200+ assert_eq ! ( Language :: from_extension( "scala" ) . unwrap( ) , Language :: Scala ) ;
201+ assert_eq ! ( Language :: from_extension( "d" ) . unwrap( ) , Language :: D ) ;
202+ assert_eq ! ( Language :: from_extension( "txt" ) . unwrap( ) , Language :: Text ) ;
203+ assert_eq ! ( Language :: from_extension( "md" ) . unwrap( ) , Language :: Markdown ) ;
204+ assert_eq ! ( Language :: from_extension( "in" ) . unwrap( ) , Language :: Input ) ;
205+ assert_eq ! ( Language :: from_extension( "out" ) . unwrap( ) , Language :: Output ) ;
206+ }
207+
208+ #[ test]
209+ fn test_language_from_extension_errors ( ) {
210+ assert_eq ! (
211+ Language :: from_extension( "" ) . unwrap_err( ) ,
212+ LanguageError :: UnsupportedExtension ( "" . to_string( ) )
213+ ) ;
214+ assert_eq ! (
215+ Language :: from_extension( "no" ) . unwrap_err( ) ,
216+ LanguageError :: UnsupportedExtension ( "no" . to_string( ) )
217+ ) ;
218+ }
219+ }
0 commit comments