mirror of
				https://github.com/sharkdp/bat.git
				synced 2025-11-04 00:51:56 +00:00 
			
		
		
		
	Add syntax detection unit tests
This commit is contained in:
		
							
								
								
									
										1
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							@@ -124,7 +124,6 @@ dependencies = [
 | 
			
		||||
 "dirs 2.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "escargot 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "git2 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 "liquid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										78
									
								
								tests/syntax_detection.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								tests/syntax_detection.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
			
		||||
use std::ffi::OsStr;
 | 
			
		||||
use std::fs::File;
 | 
			
		||||
use std::io;
 | 
			
		||||
use std::io::Write;
 | 
			
		||||
 | 
			
		||||
use tempdir::TempDir;
 | 
			
		||||
 | 
			
		||||
use bat::assets::HighlightingAssets;
 | 
			
		||||
use bat::inputfile::InputFile;
 | 
			
		||||
use bat::syntax_mapping::SyntaxMapping;
 | 
			
		||||
 | 
			
		||||
struct SyntaxDetectionTest {
 | 
			
		||||
    assets: HighlightingAssets,
 | 
			
		||||
    pub syntax_mapping: SyntaxMapping,
 | 
			
		||||
    temp_dir: TempDir,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl SyntaxDetectionTest {
 | 
			
		||||
    fn new() -> Self {
 | 
			
		||||
        SyntaxDetectionTest {
 | 
			
		||||
            assets: HighlightingAssets::new(),
 | 
			
		||||
            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_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", "<?php"), "PHP");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[test]
 | 
			
		||||
fn syntax_detection_with_custom_mapping() {
 | 
			
		||||
    let mut test = SyntaxDetectionTest::new();
 | 
			
		||||
 | 
			
		||||
    assert_ne!(test.syntax_name("test.h"), "C++");
 | 
			
		||||
    test.syntax_mapping.insert("h", "cpp");
 | 
			
		||||
    assert_eq!(test.syntax_name("test.h"), "C++");
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user