summaryrefslogtreecommitdiffstats
path: root/tests/no_duplicate_extensions.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/no_duplicate_extensions.rs')
-rw-r--r--tests/no_duplicate_extensions.rs35
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
+ );
+ }
+ }
+}