
In a number of Cask specs, the value of the `homepage` stanza is currently set to https://example.com. As of 2018-11-28, the TLS certificate served by example.com seems to be expired, possibly due to an oversight on ICANN’s side. While the certificate is certainly going to be renewed soon, it would be desirable for Homebrew’s test result to be less dependent on ICANN’s actions. This commit changes the homepages of all test Casks to http://brew.sh, whose domain and TLS certificate are both controlled by Homebrew.
123 lines
4.6 KiB
Ruby
123 lines
4.6 KiB
Ruby
require "rubocops/homepage"
|
|
|
|
describe RuboCop::Cop::FormulaAudit::Homepage do
|
|
subject(:cop) { described_class.new }
|
|
|
|
context "When auditing homepage" do
|
|
it "When there is no homepage" do
|
|
source = <<~RUBY
|
|
class Foo < Formula
|
|
url 'https://brew.sh/foo-1.0.tgz'
|
|
end
|
|
RUBY
|
|
|
|
expected_offenses = [{ message: "Formula should have a homepage.",
|
|
severity: :convention,
|
|
line: 1,
|
|
column: 0,
|
|
source: source }]
|
|
|
|
inspect_source(source)
|
|
|
|
expected_offenses.zip(cop.offenses).each do |expected, actual|
|
|
expect_offense(expected, actual)
|
|
end
|
|
end
|
|
|
|
it "Homepage with ftp" do
|
|
source = <<~RUBY
|
|
class Foo < Formula
|
|
homepage "ftp://brew.sh/foo"
|
|
url "https://brew.sh/foo-1.0.tgz"
|
|
end
|
|
RUBY
|
|
|
|
expected_offenses = [{ message: "The homepage should start with http or " \
|
|
"https (URL is ftp://brew.sh/foo).",
|
|
severity: :convention,
|
|
line: 2,
|
|
column: 2,
|
|
source: source }]
|
|
|
|
inspect_source(source)
|
|
|
|
expected_offenses.zip(cop.offenses).each do |expected, actual|
|
|
expect_offense(expected, actual)
|
|
end
|
|
end
|
|
|
|
it "Homepage URLs" do
|
|
formula_homepages = {
|
|
"bar" => "http://www.freedesktop.org/wiki/bar",
|
|
"baz" => "http://www.freedesktop.org/wiki/Software/baz",
|
|
"qux" => "https://code.google.com/p/qux",
|
|
"quux" => "http://github.com/quux",
|
|
"corge" => "http://savannah.nongnu.org/corge",
|
|
"grault" => "http://grault.github.io/",
|
|
"garply" => "http://www.gnome.org/garply",
|
|
"sf1" => "http://foo.sourceforge.net/",
|
|
"sf2" => "http://foo.sourceforge.net",
|
|
"sf3" => "http://foo.sf.net/",
|
|
"sf4" => "http://foo.sourceforge.io/",
|
|
"waldo" => "http://www.gnu.org/waldo",
|
|
}
|
|
|
|
formula_homepages.each do |name, homepage|
|
|
source = <<~RUBY
|
|
class #{name.capitalize} < Formula
|
|
homepage "#{homepage}"
|
|
url "https://brew.sh/#{name}-1.0.tgz"
|
|
end
|
|
RUBY
|
|
|
|
inspect_source(source)
|
|
if homepage =~ %r{http:\/\/www\.freedesktop\.org}
|
|
if homepage =~ /Software/
|
|
expected_offenses = [{ message: "#{homepage} should be styled " \
|
|
"`https://wiki.freedesktop.org/www/Software/project_name`",
|
|
severity: :convention,
|
|
line: 2,
|
|
column: 2,
|
|
source: source }]
|
|
else
|
|
expected_offenses = [{ message: "#{homepage} should be styled " \
|
|
"`https://wiki.freedesktop.org/project_name`",
|
|
severity: :convention,
|
|
line: 2,
|
|
column: 2,
|
|
source: source }]
|
|
end
|
|
elsif homepage =~ %r{https:\/\/code\.google\.com}
|
|
expected_offenses = [{ message: "#{homepage} should end with a slash",
|
|
severity: :convention,
|
|
line: 2,
|
|
column: 2,
|
|
source: source }]
|
|
elsif homepage =~ /foo\.(sf|sourceforge)\.net/
|
|
expected_offenses = [{ message: "#{homepage} should be `https://foo.sourceforge.io/`",
|
|
severity: :convention,
|
|
line: 2,
|
|
column: 2,
|
|
source: source }]
|
|
else
|
|
expected_offenses = [{ message: "Please use https:// for #{homepage}",
|
|
severity: :convention,
|
|
line: 2,
|
|
column: 2,
|
|
source: source }]
|
|
end
|
|
expected_offenses.zip([cop.offenses.last]).each do |expected, actual|
|
|
expect_offense(expected, actual)
|
|
end
|
|
end
|
|
end
|
|
|
|
def expect_offense(expected, actual)
|
|
expect(actual.message).to eq(expected[:message])
|
|
expect(actual.severity).to eq(expected[:severity])
|
|
expect(actual.line).to eq(expected[:line])
|
|
expect(actual.column).to eq(expected[:column])
|
|
end
|
|
end
|
|
end
|