2020-10-10 14:16:11 +02:00
|
|
|
# typed: false
|
2019-04-19 15:38:03 +09:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2018-09-06 08:29:14 +02:00
|
|
|
describe Cask::DSL, :cask do
|
|
|
|
let(:cask) { Cask::CaskLoader.load(cask_path(token.to_s)) }
|
2017-02-08 10:45:25 +01:00
|
|
|
let(:token) { "basic-cask" }
|
|
|
|
|
2021-02-19 23:15:33 +00:00
|
|
|
describe "stanzas" do
|
2017-02-08 10:45:25 +01:00
|
|
|
it "lets you set url, homepage, and version" do
|
2020-12-11 21:58:09 +01:00
|
|
|
expect(cask.url.to_s).to eq("https://brew.sh/TestCask-1.2.3.dmg")
|
2018-11-28 20:51:55 +01:00
|
|
|
expect(cask.homepage).to eq("https://brew.sh/")
|
2017-02-08 10:45:25 +01:00
|
|
|
expect(cask.version.to_s).to eq("1.2.3")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "when a Cask includes an unknown method" do
|
|
|
|
let(:attempt_unknown_method) {
|
2019-10-03 08:50:45 +02:00
|
|
|
Cask::Cask.new("unexpected-method-cask") do
|
|
|
|
future_feature :not_yet_on_your_machine
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
}
|
|
|
|
|
|
|
|
it "prints a warning that it has encountered an unexpected method" do
|
2018-06-14 22:48:37 +02:00
|
|
|
expected = Regexp.compile(<<~EOS.lines.map(&:chomp).join)
|
2017-02-08 10:45:25 +01:00
|
|
|
(?m)
|
|
|
|
Warning:
|
|
|
|
.*
|
|
|
|
Unexpected method 'future_feature' called on Cask unexpected-method-cask\\.
|
|
|
|
.*
|
2018-05-25 18:03:16 +02:00
|
|
|
https://github.com/Homebrew/homebrew-cask#reporting-bugs
|
2017-02-08 10:45:25 +01:00
|
|
|
EOS
|
|
|
|
|
|
|
|
expect {
|
2019-10-03 08:50:45 +02:00
|
|
|
expect { attempt_unknown_method }.not_to output.to_stdout
|
2017-02-08 10:45:25 +01:00
|
|
|
}.to output(expected).to_stderr
|
|
|
|
end
|
|
|
|
|
|
|
|
it "will simply warn, not throw an exception" do
|
|
|
|
expect {
|
2019-10-03 08:50:45 +02:00
|
|
|
attempt_unknown_method
|
2017-02-08 10:45:25 +01:00
|
|
|
}.not_to raise_error
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "header line" do
|
|
|
|
context "when invalid" do
|
|
|
|
let(:token) { "invalid/invalid-header-format" }
|
2018-03-25 13:30:37 +01:00
|
|
|
|
2017-02-08 10:45:25 +01:00
|
|
|
it "raises an error" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect { cask }.to raise_error(Cask::CaskUnreadableError)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when token does not match the file name" do
|
|
|
|
let(:token) { "invalid/invalid-header-token-mismatch" }
|
|
|
|
|
|
|
|
it "raises an error" do
|
|
|
|
expect {
|
|
|
|
cask
|
2018-09-06 08:29:14 +02:00
|
|
|
}.to raise_error(Cask::CaskTokenMismatchError, /header line does not match the file name/)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when it contains no DSL version" do
|
|
|
|
let(:token) { "no-dsl-version" }
|
|
|
|
|
|
|
|
it "does not require a DSL version in the header" do
|
|
|
|
expect(cask.token).to eq("no-dsl-version")
|
2020-12-11 21:58:09 +01:00
|
|
|
expect(cask.url.to_s).to eq("https://brew.sh/TestCask-1.2.3.dmg")
|
2018-11-28 20:51:55 +01:00
|
|
|
expect(cask.homepage).to eq("https://brew.sh/")
|
2017-07-29 19:55:05 +02:00
|
|
|
expect(cask.version.to_s).to eq("1.2.3")
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "name stanza" do
|
|
|
|
it "lets you set the full name via a name stanza" do
|
2018-09-06 08:29:14 +02:00
|
|
|
cask = Cask::Cask.new("name-cask") do
|
2017-02-08 10:45:25 +01:00
|
|
|
name "Proper Name"
|
|
|
|
end
|
|
|
|
|
|
|
|
expect(cask.name).to eq([
|
2021-02-11 13:24:19 +00:00
|
|
|
"Proper Name",
|
|
|
|
])
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
it "Accepts an array value to the name stanza" do
|
2018-09-06 08:29:14 +02:00
|
|
|
cask = Cask::Cask.new("array-name-cask") do
|
2017-02-08 10:45:25 +01:00
|
|
|
name ["Proper Name", "Alternate Name"]
|
|
|
|
end
|
|
|
|
|
|
|
|
expect(cask.name).to eq([
|
2021-02-11 13:24:19 +00:00
|
|
|
"Proper Name",
|
|
|
|
"Alternate Name",
|
|
|
|
])
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
it "Accepts multiple name stanzas" do
|
2018-09-06 08:29:14 +02:00
|
|
|
cask = Cask::Cask.new("multi-name-cask") do
|
2017-02-08 10:45:25 +01:00
|
|
|
name "Proper Name"
|
|
|
|
name "Alternate Name"
|
|
|
|
end
|
|
|
|
|
|
|
|
expect(cask.name).to eq([
|
2021-02-11 13:24:19 +00:00
|
|
|
"Proper Name",
|
|
|
|
"Alternate Name",
|
|
|
|
])
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-07-29 15:40:31 +01:00
|
|
|
describe "desc stanza" do
|
|
|
|
it "lets you set the description via a desc stanza" do
|
|
|
|
cask = Cask::Cask.new("desc-cask") do
|
|
|
|
desc "The package's description"
|
|
|
|
end
|
|
|
|
|
|
|
|
expect(cask.desc).to eq("The package's description")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-02-08 10:45:25 +01:00
|
|
|
describe "sha256 stanza" do
|
|
|
|
it "lets you set checksum via sha256" do
|
2018-09-06 08:29:14 +02:00
|
|
|
cask = Cask::Cask.new("checksum-cask") do
|
2017-02-08 10:45:25 +01:00
|
|
|
sha256 "imasha2"
|
|
|
|
end
|
|
|
|
|
|
|
|
expect(cask.sha256).to eq("imasha2")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "language stanza" do
|
2020-07-21 21:28:58 +02:00
|
|
|
context "when language is set explicitly" do
|
|
|
|
subject(:cask) {
|
2018-09-06 08:29:14 +02:00
|
|
|
Cask::Cask.new("cask-with-apps") do
|
2017-02-08 10:45:25 +01:00
|
|
|
language "zh" do
|
|
|
|
sha256 "abc123"
|
|
|
|
"zh-CN"
|
|
|
|
end
|
|
|
|
|
|
|
|
language "en-US", default: true do
|
|
|
|
sha256 "xyz789"
|
|
|
|
"en-US"
|
|
|
|
end
|
|
|
|
|
|
|
|
url "https://example.org/#{language}.zip"
|
|
|
|
end
|
2020-07-21 21:28:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
matcher :be_the_chinese_version do
|
|
|
|
match do |cask|
|
|
|
|
expect(cask.language).to eq("zh-CN")
|
|
|
|
expect(cask.sha256).to eq("abc123")
|
|
|
|
expect(cask.url.to_s).to eq("https://example.org/zh-CN.zip")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
matcher :be_the_english_version do
|
|
|
|
match do |cask|
|
|
|
|
expect(cask.language).to eq("en-US")
|
|
|
|
expect(cask.sha256).to eq("xyz789")
|
|
|
|
expect(cask.url.to_s).to eq("https://example.org/en-US.zip")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
before do
|
|
|
|
config = cask.config
|
|
|
|
config.languages = languages
|
|
|
|
cask.config = config
|
|
|
|
end
|
|
|
|
|
2021-02-21 01:02:57 +00:00
|
|
|
describe "to 'zh'" do
|
2020-07-21 21:28:58 +02:00
|
|
|
let(:languages) { ["zh"] }
|
|
|
|
|
|
|
|
it { is_expected.to be_the_chinese_version }
|
|
|
|
end
|
|
|
|
|
2021-02-21 01:02:57 +00:00
|
|
|
describe "to 'zh-XX'" do
|
2020-07-21 21:28:58 +02:00
|
|
|
let(:languages) { ["zh-XX"] }
|
|
|
|
|
|
|
|
it { is_expected.to be_the_chinese_version }
|
|
|
|
end
|
|
|
|
|
2021-02-21 01:02:57 +00:00
|
|
|
describe "to 'en'" do
|
2020-07-21 21:28:58 +02:00
|
|
|
let(:languages) { ["en"] }
|
|
|
|
|
|
|
|
it { is_expected.to be_the_english_version }
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
|
2021-02-21 01:02:57 +00:00
|
|
|
describe "to 'xx-XX'" do
|
2020-07-21 21:28:58 +02:00
|
|
|
let(:languages) { ["xx-XX"] }
|
2017-02-08 10:45:25 +01:00
|
|
|
|
2020-07-21 21:28:58 +02:00
|
|
|
it { is_expected.to be_the_english_version }
|
|
|
|
end
|
2017-02-08 10:45:25 +01:00
|
|
|
|
2021-02-21 01:02:57 +00:00
|
|
|
describe "to 'xx-XX,zh,en'" do
|
2020-07-21 21:28:58 +02:00
|
|
|
let(:languages) { ["xx-XX", "zh", "en"] }
|
2017-02-08 10:45:25 +01:00
|
|
|
|
2020-07-21 21:28:58 +02:00
|
|
|
it { is_expected.to be_the_chinese_version }
|
|
|
|
end
|
2017-02-08 10:45:25 +01:00
|
|
|
|
2021-02-21 01:02:57 +00:00
|
|
|
describe "to 'xx-XX,en-US,zh'" do
|
2020-07-21 21:28:58 +02:00
|
|
|
let(:languages) { ["xx-XX", "en-US", "zh"] }
|
2017-02-08 10:45:25 +01:00
|
|
|
|
2020-07-21 21:28:58 +02:00
|
|
|
it { is_expected.to be_the_english_version }
|
|
|
|
end
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
2017-09-27 00:17:47 -07:00
|
|
|
|
2017-10-02 11:34:50 -07:00
|
|
|
it "returns an empty array if no languages are specified" do
|
2017-09-27 00:17:47 -07:00
|
|
|
cask = lambda do
|
2018-09-06 08:29:14 +02:00
|
|
|
Cask::Cask.new("cask-with-apps") do
|
2017-09-27 00:17:47 -07:00
|
|
|
url "https://example.org/file.zip"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
expect(cask.call.languages).to be_empty
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns an array of available languages" do
|
|
|
|
cask = lambda do
|
2018-09-06 08:29:14 +02:00
|
|
|
Cask::Cask.new("cask-with-apps") do
|
2017-09-27 00:17:47 -07:00
|
|
|
language "zh" do
|
|
|
|
sha256 "abc123"
|
|
|
|
"zh-CN"
|
|
|
|
end
|
|
|
|
|
|
|
|
language "en-US", default: true do
|
|
|
|
sha256 "xyz789"
|
|
|
|
"en-US"
|
|
|
|
end
|
|
|
|
|
|
|
|
url "https://example.org/file.zip"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
expect(cask.call.languages).to eq(["zh", "en-US"])
|
|
|
|
end
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
describe "app stanza" do
|
|
|
|
it "allows you to specify app stanzas" do
|
2018-09-06 08:29:14 +02:00
|
|
|
cask = Cask::Cask.new("cask-with-apps") do
|
2017-02-08 10:45:25 +01:00
|
|
|
app "Foo.app"
|
|
|
|
app "Bar.app"
|
|
|
|
end
|
|
|
|
|
2017-10-04 17:54:52 +02:00
|
|
|
expect(cask.artifacts.map(&:to_s)).to eq(["Foo.app (App)", "Bar.app (App)"])
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
it "allow app stanzas to be empty" do
|
2018-09-06 08:29:14 +02:00
|
|
|
cask = Cask::Cask.new("cask-with-no-apps")
|
2017-10-04 17:54:52 +02:00
|
|
|
expect(cask.artifacts).to be_empty
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "caveats stanza" do
|
|
|
|
it "allows caveats to be specified via a method define" do
|
2018-09-06 08:29:14 +02:00
|
|
|
cask = Cask::Cask.new("plain-cask")
|
2017-02-08 10:45:25 +01:00
|
|
|
|
|
|
|
expect(cask.caveats).to be_empty
|
|
|
|
|
2018-09-06 08:29:14 +02:00
|
|
|
cask = Cask::Cask.new("cask-with-caveats") do
|
2018-01-17 10:42:43 +00:00
|
|
|
def caveats
|
|
|
|
<<~EOS
|
|
|
|
When you install this Cask, you probably want to know this.
|
2017-02-08 10:45:25 +01:00
|
|
|
EOS
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
expect(cask.caveats).to eq("When you install this Cask, you probably want to know this.\n")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "pkg stanza" do
|
|
|
|
it "allows installable pkgs to be specified" do
|
2018-09-06 08:29:14 +02:00
|
|
|
cask = Cask::Cask.new("cask-with-pkgs") do
|
2017-02-08 10:45:25 +01:00
|
|
|
pkg "Foo.pkg"
|
|
|
|
pkg "Bar.pkg"
|
|
|
|
end
|
|
|
|
|
2017-10-04 17:54:52 +02:00
|
|
|
expect(cask.artifacts.map(&:to_s)).to eq(["Foo.pkg (Pkg)", "Bar.pkg (Pkg)"])
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "url stanza" do
|
|
|
|
let(:token) { "invalid/invalid-two-url" }
|
|
|
|
|
|
|
|
it "prevents defining multiple urls" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect { cask }.to raise_error(Cask::CaskInvalidError, /'url' stanza may only appear once/)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "homepage stanza" do
|
|
|
|
let(:token) { "invalid/invalid-two-homepage" }
|
|
|
|
|
|
|
|
it "prevents defining multiple homepages" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect { cask }.to raise_error(Cask::CaskInvalidError, /'homepage' stanza may only appear once/)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "version stanza" do
|
|
|
|
let(:token) { "invalid/invalid-two-version" }
|
2018-03-25 13:30:37 +01:00
|
|
|
|
2017-02-08 10:45:25 +01:00
|
|
|
it "prevents defining multiple versions" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect { cask }.to raise_error(Cask::CaskInvalidError, /'version' stanza may only appear once/)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "appcast stanza" do
|
|
|
|
let(:token) { "with-appcast" }
|
|
|
|
|
|
|
|
it "allows appcasts to be specified" do
|
|
|
|
expect(cask.appcast.to_s).to match(/^http/)
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when multiple appcasts are defined" do
|
|
|
|
let(:token) { "invalid/invalid-appcast-multiple" }
|
|
|
|
|
|
|
|
it "raises an error" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect { cask }.to raise_error(Cask::CaskInvalidError, /'appcast' stanza may only appear once/)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when appcast URL is invalid" do
|
|
|
|
let(:token) { "invalid/invalid-appcast-url" }
|
|
|
|
|
|
|
|
it "refuses to load" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect { cask }.to raise_error(Cask::CaskInvalidError)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "depends_on stanza" do
|
|
|
|
let(:token) { "invalid/invalid-depends-on-key" }
|
|
|
|
|
|
|
|
it "refuses to load with an invalid depends_on key" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect { cask }.to raise_error(Cask::CaskInvalidError)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "depends_on formula" do
|
|
|
|
context "with one Formula" do
|
|
|
|
let(:token) { "with-depends-on-formula" }
|
|
|
|
|
|
|
|
it "allows depends_on formula to be specified" do
|
|
|
|
expect(cask.depends_on.formula).not_to be nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "with multiple Formulae" do
|
|
|
|
let(:token) { "with-depends-on-formula-multiple" }
|
|
|
|
|
|
|
|
it "allows multiple depends_on formula to be specified" do
|
|
|
|
expect(cask.depends_on.formula).not_to be nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "depends_on cask" do
|
2021-02-19 23:15:33 +00:00
|
|
|
context "with a single cask" do
|
2017-02-08 10:45:25 +01:00
|
|
|
let(:token) { "with-depends-on-cask" }
|
2018-03-25 13:30:37 +01:00
|
|
|
|
2017-02-08 10:45:25 +01:00
|
|
|
it "is allowed" do
|
|
|
|
expect(cask.depends_on.cask).not_to be nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-02-19 23:15:33 +00:00
|
|
|
context "when specifying multiple" do
|
2017-02-08 10:45:25 +01:00
|
|
|
let(:token) { "with-depends-on-cask-multiple" }
|
|
|
|
|
|
|
|
it "is allowed" do
|
|
|
|
expect(cask.depends_on.cask).not_to be nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "depends_on macos" do
|
2021-02-19 23:15:33 +00:00
|
|
|
context "when the depends_on macos value is invalid" do
|
2017-02-08 10:45:25 +01:00
|
|
|
let(:token) { "invalid/invalid-depends-on-macos-bad-release" }
|
|
|
|
|
|
|
|
it "refuses to load" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect { cask }.to raise_error(Cask::CaskInvalidError)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-02-19 23:15:33 +00:00
|
|
|
context "when there are conflicting depends_on macos forms" do
|
2017-02-08 10:45:25 +01:00
|
|
|
let(:token) { "invalid/invalid-depends-on-macos-conflicting-forms" }
|
|
|
|
|
|
|
|
it "refuses to load" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect { cask }.to raise_error(Cask::CaskInvalidError)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "depends_on arch" do
|
2021-02-19 23:15:33 +00:00
|
|
|
context "when valid" do
|
2017-02-08 10:45:25 +01:00
|
|
|
let(:token) { "with-depends-on-arch" }
|
|
|
|
|
|
|
|
it "is allowed to be specified" do
|
|
|
|
expect(cask.depends_on.arch).not_to be nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-02-19 23:15:33 +00:00
|
|
|
context "with invalid depends_on arch value" do
|
2017-02-08 10:45:25 +01:00
|
|
|
let(:token) { "invalid/invalid-depends-on-arch-value" }
|
|
|
|
|
|
|
|
it "refuses to load" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect { cask }.to raise_error(Cask::CaskInvalidError)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "depends_on x11" do
|
2021-02-19 23:15:33 +00:00
|
|
|
context "with invalid depends_on x11 value" do
|
2017-02-08 10:45:25 +01:00
|
|
|
let(:token) { "invalid/invalid-depends-on-x11-value" }
|
|
|
|
|
|
|
|
it "refuses to load" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect { cask }.to raise_error(Cask::CaskInvalidError)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "conflicts_with stanza" do
|
2021-02-19 23:15:33 +00:00
|
|
|
context "when valid" do
|
2017-02-08 10:45:25 +01:00
|
|
|
let(:token) { "with-conflicts-with" }
|
|
|
|
|
|
|
|
it "allows conflicts_with stanza to be specified" do
|
2019-01-27 21:34:24 +01:00
|
|
|
expect(cask.conflicts_with[:formula]).to be_empty
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-02-19 23:15:33 +00:00
|
|
|
context "with invalid conflicts_with key" do
|
2017-02-08 10:45:25 +01:00
|
|
|
let(:token) { "invalid/invalid-conflicts-with-key" }
|
|
|
|
|
|
|
|
it "refuses to load invalid conflicts_with key" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect { cask }.to raise_error(Cask::CaskInvalidError)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "installer stanza" do
|
2021-02-19 23:15:33 +00:00
|
|
|
context "when script" do
|
2017-02-08 10:45:25 +01:00
|
|
|
let(:token) { "with-installer-script" }
|
|
|
|
|
|
|
|
it "allows installer script to be specified" do
|
2018-09-17 19:44:12 +02:00
|
|
|
expect(cask.artifacts.to_a.first.path).to eq(Pathname("/usr/bin/true"))
|
|
|
|
expect(cask.artifacts.to_a.first.args[:args]).to eq(["--flag"])
|
|
|
|
expect(cask.artifacts.to_a.second.path).to eq(Pathname("/usr/bin/false"))
|
|
|
|
expect(cask.artifacts.to_a.second.args[:args]).to eq(["--flag"])
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-02-19 23:15:33 +00:00
|
|
|
context "when manual" do
|
2017-02-08 10:45:25 +01:00
|
|
|
let(:token) { "with-installer-manual" }
|
|
|
|
|
|
|
|
it "allows installer manual to be specified" do
|
2017-10-04 17:54:52 +02:00
|
|
|
installer = cask.artifacts.first
|
2018-09-06 08:29:14 +02:00
|
|
|
expect(installer).to be_a(Cask::Artifact::Installer::ManualInstaller)
|
2018-07-11 16:39:17 +02:00
|
|
|
expect(installer.path).to eq(Pathname("Caffeine.app"))
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "stage_only stanza" do
|
|
|
|
context "when there is no other activatable artifact" do
|
|
|
|
let(:token) { "stage-only" }
|
|
|
|
|
|
|
|
it "allows stage_only stanza to be specified" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect(cask.artifacts).to contain_exactly a_kind_of Cask::Artifact::StageOnly
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when there is are activatable artifacts" do
|
|
|
|
let(:token) { "invalid/invalid-stage-only-conflict" }
|
|
|
|
|
|
|
|
it "prevents specifying stage_only" do
|
2018-09-06 08:29:14 +02:00
|
|
|
expect { cask }.to raise_error(Cask::CaskInvalidError, /'stage_only' must be the only activatable artifact/)
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "auto_updates stanza" do
|
|
|
|
let(:token) { "auto-updates" }
|
|
|
|
|
|
|
|
it "allows auto_updates stanza to be specified" do
|
|
|
|
expect(cask.auto_updates).to be true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-10-04 17:08:35 +02:00
|
|
|
describe "#appdir" do
|
2021-02-19 23:15:33 +00:00
|
|
|
context "with interpolation of the appdir in stanzas" do
|
2017-02-08 10:45:25 +01:00
|
|
|
let(:token) { "appdir-interpolation" }
|
|
|
|
|
|
|
|
it "is allowed" do
|
2019-02-02 17:11:37 +01:00
|
|
|
expect(cask.artifacts.first.source).to eq(cask.config.appdir/"some/path")
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "does not include a trailing slash" do
|
2020-09-29 23:46:30 +02:00
|
|
|
config = Cask::Config.new(explicit: {
|
2021-02-11 13:24:19 +00:00
|
|
|
appdir: "/Applications/",
|
|
|
|
})
|
2017-02-08 10:45:25 +01:00
|
|
|
|
2020-09-29 23:46:30 +02:00
|
|
|
cask = Cask::Cask.new("appdir-trailing-slash", config: config) do
|
2019-10-13 10:03:26 +01:00
|
|
|
binary "#{appdir}/some/path"
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
2019-10-13 10:03:26 +01:00
|
|
|
|
2020-09-29 23:46:30 +02:00
|
|
|
expect(cask.artifacts.first.source).to eq(Pathname("/Applications/some/path"))
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|
|
|
|
end
|
2017-10-04 17:08:35 +02:00
|
|
|
|
|
|
|
describe "#artifacts" do
|
|
|
|
it "sorts artifacts according to the preferable installation order" do
|
2018-09-06 08:29:14 +02:00
|
|
|
cask = Cask::Cask.new("appdir-trailing-slash") do
|
2017-10-04 17:08:35 +02:00
|
|
|
postflight do
|
|
|
|
next
|
|
|
|
end
|
|
|
|
|
|
|
|
preflight do
|
|
|
|
next
|
|
|
|
end
|
|
|
|
|
|
|
|
binary "binary"
|
|
|
|
|
|
|
|
app "App.app"
|
|
|
|
end
|
|
|
|
|
|
|
|
expect(cask.artifacts.map(&:class).map(&:dsl_key)).to eq [
|
|
|
|
:preflight,
|
|
|
|
:app,
|
|
|
|
:binary,
|
|
|
|
:postflight,
|
|
|
|
]
|
|
|
|
end
|
|
|
|
end
|
2017-02-08 10:45:25 +01:00
|
|
|
end
|