From 8c500a7e405964b9c60c04f7176bf91faacfd824 Mon Sep 17 00:00:00 2001 From: sharkdp Date: Sat, 21 Mar 2020 20:42:10 +0100 Subject: [PATCH] Hide get_syntax, move tests to module --- src/assets.rs | 96 ++++++++++++++++++++++++++++++++++++++- tests/syntax_detection.rs | 89 ------------------------------------ 2 files changed, 94 insertions(+), 91 deletions(-) delete mode 100644 tests/syntax_detection.rs diff --git a/src/assets.rs b/src/assets.rs index d1a89735..ee4d1da9 100644 --- a/src/assets.rs +++ b/src/assets.rs @@ -171,8 +171,7 @@ impl HighlightingAssets { } } - #[doc(hidden)] - pub fn get_syntax( + pub(crate) fn get_syntax( &self, language: Option<&str>, filename: InputFile, @@ -212,3 +211,96 @@ impl HighlightingAssets { syntax.unwrap_or_else(|| self.syntax_set.find_syntax_plain_text()) } } + +#[cfg(test)] +mod tests { + use std::ffi::OsStr; + use std::fs::File; + use std::io; + use std::io::Write; + + use tempdir::TempDir; + + use crate::assets::HighlightingAssets; + use crate::inputfile::InputFile; + use crate::syntax_mapping::SyntaxMapping; + + struct SyntaxDetectionTest { + assets: HighlightingAssets, + pub syntax_mapping: SyntaxMapping, + temp_dir: TempDir, + } + + impl SyntaxDetectionTest { + fn new() -> Self { + SyntaxDetectionTest { + assets: HighlightingAssets::from_binary(), + syntax_mapping: SyntaxMapping::new(), + temp_dir: TempDir::new("bat_syntax_detection_tests") + .expect("creation of temporary directory"), + } + } + + fn syntax_name_with_content(&self, file_name: &str, first_line: &str) -> String { + let file_path = self.temp_dir.path().join(file_name); + { + let mut temp_file = File::create(&file_path).unwrap(); + writeln!(temp_file, "{}", first_line).unwrap(); + } + + let input_file = InputFile::Ordinary(OsStr::new(&file_path)); + let syntax = self.assets.get_syntax( + None, + input_file, + &mut input_file.get_reader(&io::stdin()).unwrap(), + &self.syntax_mapping, + ); + + syntax.name.clone() + } + + fn syntax_name(&self, file_name: &str) -> String { + self.syntax_name_with_content(file_name, "") + } + } + + #[test] + fn syntax_detection_basic() { + let test = SyntaxDetectionTest::new(); + + assert_eq!(test.syntax_name("test.rs"), "Rust"); + assert_eq!(test.syntax_name("test.cpp"), "C++"); + assert_eq!(test.syntax_name("PKGBUILD"), "Bourne Again Shell (bash)"); + } + + #[test] + fn syntax_detection_well_defined_mapping_for_duplicate_extensions() { + let test = SyntaxDetectionTest::new(); + + assert_eq!(test.syntax_name("test.sass"), "Sass"); + // TODO: make these tests pass: + // assert_eq!(test.syntax_name("test.h"), "C"); + // assert_eq!(test.syntax_name("test.hs"), "Haskell (Improved)"); + // assert_eq!(test.syntax_name("test.js"), "JavaScript (Babel)"); + } + + #[test] + fn syntax_detection_first_line() { + let test = SyntaxDetectionTest::new(); + + assert_eq!( + test.syntax_name_with_content("my_script", "#!/bin/bash"), + "Bourne Again Shell (bash)" + ); + assert_eq!(test.syntax_name_with_content("my_script", " Self { - SyntaxDetectionTest { - assets: HighlightingAssets::from_binary(), - syntax_mapping: SyntaxMapping::new(), - temp_dir: TempDir::new("bat_syntax_detection_tests") - .expect("creation of temporary directory"), - } - } - - fn syntax_name_with_content(&self, file_name: &str, first_line: &str) -> String { - let file_path = self.temp_dir.path().join(file_name); - { - let mut temp_file = File::create(&file_path).unwrap(); - writeln!(temp_file, "{}", first_line).unwrap(); - } - - let input_file = InputFile::Ordinary(OsStr::new(&file_path)); - let syntax = self.assets.get_syntax( - None, - input_file, - &mut input_file.get_reader(&io::stdin()).unwrap(), - &self.syntax_mapping, - ); - - syntax.name.clone() - } - - fn syntax_name(&self, file_name: &str) -> String { - self.syntax_name_with_content(file_name, "") - } -} - -#[test] -fn syntax_detection_basic() { - let test = SyntaxDetectionTest::new(); - - assert_eq!(test.syntax_name("test.rs"), "Rust"); - assert_eq!(test.syntax_name("test.cpp"), "C++"); - assert_eq!(test.syntax_name("PKGBUILD"), "Bourne Again Shell (bash)"); -} - -#[test] -fn syntax_detection_well_defined_mapping_for_duplicate_extensions() { - let test = SyntaxDetectionTest::new(); - - assert_eq!(test.syntax_name("test.sass"), "Sass"); - // TODO: make these tests pass: - // assert_eq!(test.syntax_name("test.h"), "C"); - // assert_eq!(test.syntax_name("test.hs"), "Haskell (Improved)"); - // assert_eq!(test.syntax_name("test.js"), "JavaScript (Babel)"); -} - -#[test] -fn syntax_detection_first_line() { - let test = SyntaxDetectionTest::new(); - - assert_eq!( - test.syntax_name_with_content("my_script", "#!/bin/bash"), - "Bourne Again Shell (bash)" - ); - assert_eq!(test.syntax_name_with_content("my_script", "