diff --git a/Library/Homebrew/cask/audit.rb b/Library/Homebrew/cask/audit.rb index b23845b3e4..3a8478e5f0 100644 --- a/Library/Homebrew/cask/audit.rb +++ b/Library/Homebrew/cask/audit.rb @@ -41,6 +41,7 @@ module Cask check_token_valid check_token_bad_words check_token_conflicts + check_languages check_download check_https_availability check_single_pre_postflight @@ -277,6 +278,17 @@ module Cask end end + def check_languages + invalid = [] + @cask.languages.each do |language| + invalid << language.to_s unless language.match?(/^[a-z]{2}$/) || language.match?(/^[a-z]{2}-[A-Z]{2}$/) + end + + return if invalid.empty? + + add_error "locale #{invalid.join(", ")} are invalid" + end + def check_token_conflicts return unless @token_conflicts return unless core_formula_names.include?(cask.token) diff --git a/Library/Homebrew/test/cask/audit_spec.rb b/Library/Homebrew/test/cask/audit_spec.rb index cd906ab36e..122913370b 100644 --- a/Library/Homebrew/test/cask/audit_spec.rb +++ b/Library/Homebrew/test/cask/audit_spec.rb @@ -275,6 +275,52 @@ describe Cask::Audit, :cask do end end + describe "locale validation" do + let(:strict) { true } + let(:cask) do + tmp_cask "locale-cask-test", <<~RUBY + cask 'locale-cask-test' do + version '1.0' + url "https://brew.sh/" + name 'Audit' + homepage 'https://brew.sh/' + app 'Audit.app' + + language 'en', default: true do + sha256 '96574251b885c12b48a3495e843e434f9174e02bb83121b578e17d9dbebf1ffb' + 'zh-CN' + end + + language 'zh-CN' do + sha256 '96574251b885c12b48a3495e843e434f9174e02bb83121b578e17d9dbebf1ffb' + 'zh-CN' + end + + language 'ZH-CN' do + sha256 '96574251b885c12b48a3495e843e434f9174e02bb83121b578e17d9dbebf1ffb' + 'zh-CN' + end + + language 'zh-' do + sha256 '96574251b885c12b48a3495e843e434f9174e02bb83121b578e17d9dbebf1ffb' + 'zh-CN' + end + + language 'zh-cn' do + sha256 '96574251b885c12b48a3495e843e434f9174e02bb83121b578e17d9dbebf1ffb' + 'zh-CN' + end + end + RUBY + end + + context "when cask locale is invalid" do + it "error with invalid locale" do + expect(subject).to fail_with(/locale ZH-CN, zh-, zh-cn are invalid/) + end + end + end + describe "pkg allow_untrusted checks" do let(:warning_msg) { "allow_untrusted is not permitted in official Homebrew Cask taps" }