diff --git a/lib/cask/audit.rb b/lib/cask/audit.rb index f732d4775..88836a734 100644 --- a/lib/cask/audit.rb +++ b/lib/cask/audit.rb @@ -12,6 +12,7 @@ class Cask::Audit def run! _check_required_fields _check_checksums + _check_sourceforge_download_url_format return if errors? end @@ -29,4 +30,12 @@ class Cask::Audit return if cask.sums == 0 add_error "could not find checksum or no_checksum" unless cask.sums.is_a?(Array) && cask.sums.length > 0 end + + def _check_sourceforge_download_url_format + if cask.url.to_s.match(/\S*sourceforge\.\S*\/\S*/i) + unless cask.url.to_s.match(/\S*downloads.sourceforge.net\/\S+/i) + add_warning "SourceForge URL format incorrect. See https://github.com/phinze/homebrew-cask/pull/225#issuecomment-16536889 for details" + end + end + end end diff --git a/test/cask/audit_test.rb b/test/cask/audit_test.rb index a476837d6..8ae14ae2d 100644 --- a/test/cask/audit_test.rb +++ b/test/cask/audit_test.rb @@ -15,6 +15,18 @@ class CaskMissingHomepage < Cask version '1.2.3' end +class CaskSourceForgeIncorrectURLFormat < Cask + version '1.2.3' + homepage 'http://sourceforge.net/projects/something/' + url 'http://sourceforge.net/projects/something/files/Something-1.2.3.dmg/download' +end + +class CaskSourceForgeCorrectURLFormat < Cask + version '1.2.3' + homepage 'http://sourceforge.net/projects/something/' + url 'http://downloads.sourceforge.net/project/something/Something-1.2.3.dmg' +end + describe Cask::Audit do describe "result" do it "is 'failed' if there are have been any errors added" do @@ -56,6 +68,18 @@ describe Cask::Audit do audit.errors.must_include 'homepage is required' end end + describe "preferred download URL formats" do + it "adds a warning if SourceForge doesn't use download subdomain" do + warning_msg = 'SourceForge URL format incorrect. See https://github.com/phinze/homebrew-cask/pull/225#issuecomment-16536889 for details' + audit = Cask::Audit.new(CaskSourceForgeIncorrectURLFormat.new) + audit.run! + audit.warnings.must_include warning_msg + + audit = Cask::Audit.new(CaskSourceForgeCorrectURLFormat.new) + audit.run! + audit.warnings.wont_include warning_msg + end + end end end