on master help sign in
Test that OrdinaryFile consistent with CustomReader
commit1fb669ae1abfff0712dc370133ae92af56aa439c authorEthan P <eth-p+git@hidden.email> dateMon 11 May 2020, 20:10 (6 years ago) parent7d07aa3
1 file changed+50
src/assets.rs+50
src/assets.rs+50
@@ -280,6 +280,8 @@ mod tests {
280280
281281 use std::ffi::OsStr;
282282
283+ use std::fs::File;
284+ use std::io::Write;
283285 use tempdir::TempDir;
284286
285287 use crate::input::Input;
@@ -300,6 +302,27 @@ mod tests {
300302 }
301303 }
302304
305+ fn syntax_for_real_file_with_content_os(
306+ &self,
307+ file_name: &OsStr,
308+ first_line: &str,
309+ ) -> String {
310+ let file_path = self.temp_dir.path().join(file_name);
311+ {
312+ let mut temp_file = File::create(&file_path).unwrap();
313+ writeln!(temp_file, "{}", first_line).unwrap();
314+ }
315+
316+ let input = Input::ordinary_file(file_path.as_os_str());
317+ let dummy_stdin: &[u8] = &[];
318+ let mut opened_input = input.open(dummy_stdin).unwrap();
319+ let syntax = self
320+ .assets
321+ .get_syntax(None, &mut opened_input, &self.syntax_mapping);
322+
323+ syntax.name.clone()
324+ }
325+
303326 fn syntax_for_file_with_content_os(&self, file_name: &OsStr, first_line: &str) -> String {
304327 let file_path = self.temp_dir.path().join(file_name);
305328 let input = Input::from_reader(Box::new(BufReader::new(first_line.as_bytes())))
@@ -334,6 +357,12 @@ mod tests {
334357 .get_syntax(None, &mut opened_input, &self.syntax_mapping);
335358 syntax.name.clone()
336359 }
360+
361+ fn syntax_is_same_for_file_and_reader(&self, file_name: &str, content: &str) -> bool {
362+ let real = self.syntax_for_real_file_with_content_os(file_name.as_ref(), content);
363+ let fake = self.syntax_for_file_with_content_os(file_name.as_ref(), content);
364+ return real == fake;
365+ }
337366 }
338367
339368 #[test]
@@ -364,6 +393,27 @@ mod tests {
364393 );
365394 }
366395
396+ #[test]
397+ fn syntax_detection_same_for_file_and_string() {
398+ let mut test = SyntaxDetectionTest::new();
399+
400+ test.syntax_mapping
401+ .insert("*.myext", MappingTarget::MapTo("C"))
402+ .ok();
403+ test.syntax_mapping
404+ .insert("MY_FILE", MappingTarget::MapTo("Markdown"))
405+ .ok();
406+
407+ assert!(test.syntax_is_same_for_file_and_reader("Test.md", ""));
408+ assert!(test.syntax_is_same_for_file_and_reader("Test.txt", "#!/bin/bash"));
409+ assert!(test.syntax_is_same_for_file_and_reader(".bashrc", ""));
410+ assert!(test.syntax_is_same_for_file_and_reader("test.h", ""));
411+ assert!(test.syntax_is_same_for_file_and_reader("test.js", "#!/bin/bash"));
412+ assert!(test.syntax_is_same_for_file_and_reader("test.myext", ""));
413+ assert!(test.syntax_is_same_for_file_and_reader("MY_FILE", ""));
414+ assert!(test.syntax_is_same_for_file_and_reader("MY_FILE", "<?php"));
415+ }
416+
367417 #[test]
368418 fn syntax_detection_well_defined_mapping_for_duplicate_extensions() {
369419 let test = SyntaxDetectionTest::new();