mirror of
				https://github.com/sharkdp/bat.git
				synced 2025-10-31 15:12:12 +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)", |  "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)", |  "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)", |  "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)", |  "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)", |  "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)", |  "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