diff --git a/test/test_language.rb b/test/test_language.rb index 1ad47e33..aeb73127 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -371,4 +371,19 @@ class TestLanguage < Test::Unit::TestCase message << missing.map { |language| sprintf("%-#{width}s %s", language.name, language.tm_scope) }.sort.join("\n") assert missing.empty?, message end + + def test_all_languages_have_a_valid_ace_mode + ace_github_modes = JSON.parse `curl https://api.github.com/repos/ajaxorg/ace/contents/lib/ace/mode` + existing_ace_modes = ace_github_modes.map do |ace_github_mode| + File.basename(ace_github_mode["name"], ".js") if ace_github_mode["name"] !~ /_highlight_rules|_test|_worker/ + end.compact.uniq.sort + + missing = Language.all.reject { |language| language.ace_mode == "none" || existing_ace_modes.include?(language.ace_mode) } + message = "The following languages do not have an Ace mode listed in languages.yml. Please add an Ace mode for all new languages.\n" + message << "If no Ace mode exists for a language, mark the language with `ace_mode: none` in lib/linguist/languages.yml.\n" + + width = missing.map { |language| language.name.length }.max + message << missing.map { |language| sprintf("%-#{width}s %s", language.name, language.ace_mode) }.sort.join("\n") + assert missing.empty?, message + end end