@@ -0,0 +1,78 @@
8+use bat::assets::HighlightingAssets;
9+use bat::inputfile::InputFile;
10+use bat::syntax_mapping::SyntaxMapping;
12+struct SyntaxDetectionTest {
13+ assets: HighlightingAssets,
14+ pub syntax_mapping: SyntaxMapping,
18+impl SyntaxDetectionTest {
20+ SyntaxDetectionTest {
21+ assets: HighlightingAssets::new(),
22+ syntax_mapping: SyntaxMapping::new(),
23+ temp_dir: TempDir::new("bat_syntax_detection_tests")
24+ .expect("creation of temporary directory"),
28+ fn syntax_name_with_content(&self, file_name: &str, first_line: &str) -> String {
29+ let file_path = self.temp_dir.path().join(file_name);
31+ let mut temp_file = File::create(&file_path).unwrap();
32+ writeln!(temp_file, "{}", first_line).unwrap();
35+ let input_file = InputFile::Ordinary(OsStr::new(&file_path));
36+ let syntax = self.assets.get_syntax(
39+ &mut input_file.get_reader(&io::stdin()).unwrap(),
40+ &self.syntax_mapping,
46+ fn syntax_name(&self, file_name: &str) -> String {
47+ self.syntax_name_with_content(file_name, "")
52+fn syntax_detection_basic() {
53+ let test = SyntaxDetectionTest::new();
55+ assert_eq!(test.syntax_name("test.rs"), "Rust");
56+ assert_eq!(test.syntax_name("test.cpp"), "C++");
57+ assert_eq!(test.syntax_name("PKGBUILD"), "Bourne Again Shell (bash)");
61+fn syntax_detection_first_line() {
62+ let test = SyntaxDetectionTest::new();
65+ test.syntax_name_with_content("my_script", "#!/bin/bash"),
66+ "Bourne Again Shell (bash)"
68+ assert_eq!(test.syntax_name_with_content("my_script", "<?php"), "PHP");
72+fn syntax_detection_with_custom_mapping() {
73+ let mut test = SyntaxDetectionTest::new();
75+ assert_ne!(test.syntax_name("test.h"), "C++");
76+ test.syntax_mapping.insert("h", "cpp");
77+ assert_eq!(test.syntax_name("test.h"), "C++");