diff options
Diffstat (limited to 'tests/no_duplicate_extensions.rs')
-rw-r--r-- | tests/no_duplicate_extensions.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/no_duplicate_extensions.rs b/tests/no_duplicate_extensions.rs new file mode 100644 index 00000000..ef9e76a9 --- /dev/null +++ b/tests/no_duplicate_extensions.rs @@ -0,0 +1,35 @@ +use std::collections::HashSet; + +use bat::assets::HighlightingAssets; + +#[test] +fn no_duplicate_extensions() { + const KNOWN_EXCEPTIONS: &[&'static str] = &[ + // The '.h' extension currently appears in multiple syntaxes: C, C++, Objective C, + // Objective C++ + "h", + // In addition to the standard Haskell syntax in 'Packages', we also ship the 'Cabal' + // syntax which comes with a "Haskell (improved)" syntax. + "hs", + // In addition to the standard JavaScript syntax in 'Packages', we also ship the + // 'Javascript (Babel)' syntax. + "js", + // The "Ruby Haml" syntax also comes with a '.sass' extension. However, we make sure + // that 'sass' is mapped to the 'Sass' syntax. + "sass", + ]; + + let assets = HighlightingAssets::new(); + + let mut extensions = HashSet::new(); + + for syntax in assets.syntax_set.syntaxes() { + for extension in &syntax.file_extensions { + assert!( + KNOWN_EXCEPTIONS.contains(&extension.as_str()) || extensions.insert(extension), + "File extension / pattern \"{}\" appears twice in the syntax set", + extension + ); + } + } +} |