285 lines
8.6 KiB
Ruby
285 lines
8.6 KiB
Ruby
require 'test_helper'
|
|
|
|
describe Cask::DSL do
|
|
it "lets you set url, homepage, and version" do
|
|
test_cask = Cask.load('basic-cask')
|
|
test_cask.url.to_s.must_equal 'http://example.com/TestCask.dmg'
|
|
test_cask.homepage.must_equal 'http://example.com/'
|
|
test_cask.version.must_equal '1.2.3'
|
|
end
|
|
|
|
it "prevents the entire world from crashing when a cask includes an unknown method" do
|
|
UnexpectedMethodCask = Class.new(Cask)
|
|
begin
|
|
TestHelper.must_output(self, lambda {
|
|
UnexpectedMethodCask.class_eval do
|
|
future_feature :not_yet_on_your_machine
|
|
end
|
|
}, <<-WARNING.undent.chomp)
|
|
Warning: Unexpected method 'future_feature' called on UnexpectedMethodCask.
|
|
Warning:#{' '}
|
|
Warning: If you are working on UnexpectedMethodCask, this may point to a typo. Otherwise
|
|
Warning: it probably means this Cask is using a new feature. If that feature
|
|
Warning: has been released, running
|
|
Warning:#{' '}
|
|
Warning: brew update && brew upgrade brew-cask && brew cleanup && brew cask cleanup
|
|
Warning:#{' '}
|
|
Warning: should fix it. Otherwise you should wait to use UnexpectedMethodCask until the
|
|
Warning: new feature is released.
|
|
WARNING
|
|
rescue Exception => e
|
|
flunk("Wanted unexpected method to simply warn, but got exception #{e}")
|
|
end
|
|
end
|
|
|
|
describe "sha256 stanza" do
|
|
it "lets you set checksum via sha256" do
|
|
ChecksumCask = Class.new(Cask)
|
|
ChecksumCask.class_eval do
|
|
sha256 'imasha2'
|
|
end
|
|
instance = ChecksumCask.new
|
|
instance.sums.must_equal [
|
|
Checksum.new(:sha2, 'imasha2')
|
|
]
|
|
end
|
|
end
|
|
|
|
describe "app stanza" do
|
|
it "allows you to specify app stanzas" do
|
|
CaskWithLinkables = Class.new(Cask)
|
|
CaskWithLinkables.class_eval do
|
|
app 'Foo.app'
|
|
app 'Bar.app'
|
|
end
|
|
|
|
instance = CaskWithLinkables.new
|
|
Array(instance.artifacts[:link]).sort.must_equal [['Bar.app'], ['Foo.app']]
|
|
end
|
|
|
|
it "allow app stanzas to be set to empty" do
|
|
CaskWithNoLinkables = Class.new(Cask)
|
|
|
|
instance = CaskWithNoLinkables.new
|
|
Array(instance.artifacts[:link]).must_equal %w[]
|
|
end
|
|
end
|
|
|
|
describe "caveats stanza" do
|
|
it "allows caveats to be specified via a method define" do
|
|
PlainCask = Class.new(Cask)
|
|
|
|
instance = PlainCask.new
|
|
|
|
instance.caveats.must_be :empty?
|
|
|
|
CaskWithCaveats = Class.new(Cask)
|
|
CaskWithCaveats.class_eval do
|
|
def caveats; <<-EOS.undent
|
|
When you install this cask, you probably want to know this.
|
|
EOS
|
|
end
|
|
end
|
|
|
|
instance = CaskWithCaveats.new
|
|
|
|
instance.caveats.must_equal "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
|
|
CaskWithPkgs = Class.new(Cask)
|
|
CaskWithPkgs.class_eval do
|
|
pkg 'Foo.pkg'
|
|
pkg 'Bar.pkg'
|
|
end
|
|
|
|
instance = CaskWithPkgs.new
|
|
Array(instance.artifacts[:install]).sort.must_equal [['Bar.pkg'], ['Foo.pkg']]
|
|
end
|
|
end
|
|
|
|
describe "url stanza" do
|
|
it "prevents defining multiple urls" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-two-url')
|
|
}.must_raise(CaskInvalidError)
|
|
err.message.must_include "'url' stanza may only appear once"
|
|
end
|
|
end
|
|
|
|
describe "homepage stanza" do
|
|
it "prevents defining multiple homepages" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-two-homepage')
|
|
}.must_raise(CaskInvalidError)
|
|
err.message.must_include "'homepage' stanza may only appear once"
|
|
end
|
|
end
|
|
|
|
describe "version stanza" do
|
|
it "prevents defining multiple versions" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-two-version')
|
|
}.must_raise(CaskInvalidError)
|
|
err.message.must_include "'version' stanza may only appear once"
|
|
end
|
|
end
|
|
|
|
describe "appcast stanza" do
|
|
it "allows appcasts to be specified" do
|
|
cask = Cask.load('with-appcast')
|
|
cask.appcast.to_s.must_match %r{^http}
|
|
end
|
|
|
|
it "prevents defining multiple appcasts" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-appcast-multiple')
|
|
}.must_raise(CaskInvalidError)
|
|
err.message.must_include "'appcast' stanza may only appear once"
|
|
end
|
|
|
|
it "refuses to load invalid appcast URLs" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-appcast-url')
|
|
}.must_raise(CaskInvalidError)
|
|
end
|
|
|
|
it "refuses to load if appcast :format is invalid" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-appcast-format')
|
|
}.must_raise(CaskInvalidError)
|
|
end
|
|
end
|
|
|
|
describe "gpg stanza" do
|
|
it "allows gpg stanza to be specified" do
|
|
cask = Cask.load('with-gpg')
|
|
cask.gpg.to_s.must_match %r{\S}
|
|
end
|
|
|
|
it "allows gpg stanza to be specified with :key_url" do
|
|
cask = Cask.load('with-gpg-key-url')
|
|
cask.gpg.to_s.must_match %r{\S}
|
|
end
|
|
|
|
it "prevents specifying gpg stanza multiple times" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-gpg-multiple-stanzas')
|
|
}.must_raise(CaskInvalidError)
|
|
err.message.must_include "'gpg' stanza may only appear once"
|
|
end
|
|
|
|
it "prevents missing gpg key parameters" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-gpg-missing-key')
|
|
}.must_raise(CaskInvalidError)
|
|
err.message.must_include "'gpg' stanza must include exactly one"
|
|
end
|
|
|
|
it "prevents conflicting gpg key parameters" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-gpg-conflicting-keys')
|
|
}.must_raise(CaskInvalidError)
|
|
err.message.must_include "'gpg' stanza must include exactly one"
|
|
end
|
|
|
|
it "refuses to load invalid gpg signature URLs" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-gpg-signature-url')
|
|
}.must_raise(CaskInvalidError)
|
|
end
|
|
|
|
it "refuses to load invalid gpg key URLs" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-gpg-key-url')
|
|
}.must_raise(CaskInvalidError)
|
|
end
|
|
|
|
it "refuses to load if gpg parameter is unknown" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-gpg-parameter')
|
|
}.must_raise(CaskInvalidError)
|
|
end
|
|
end
|
|
|
|
describe "depends_on stanza" do
|
|
it "allows depends_on stanza to be specified" do
|
|
cask = Cask.load('with-depends-on')
|
|
cask.depends_on.formula.wont_be_nil
|
|
end
|
|
|
|
it "refuses to load invalid depends_on key" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-depends-on-key')
|
|
}.must_raise(CaskInvalidError)
|
|
end
|
|
end
|
|
|
|
describe "conflicts_with stanza" do
|
|
it "allows conflicts_with stanza to be specified" do
|
|
cask = Cask.load('with-conflicts-with')
|
|
cask.conflicts_with.formula.wont_be_nil
|
|
end
|
|
|
|
it "refuses to load invalid conflicts_with key" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-conflicts-with-key')
|
|
}.must_raise(CaskInvalidError)
|
|
end
|
|
end
|
|
|
|
describe "license stanza" do
|
|
it "allows the license to be specified" do
|
|
cask = Cask.load('with-license')
|
|
cask.license.value.must_equal :gpl
|
|
end
|
|
|
|
it "the license has a category" do
|
|
cask = Cask.load('with-license')
|
|
cask.license.category.must_equal :oss
|
|
end
|
|
|
|
it "prevents defining multiple license stanzas" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-license-multiple')
|
|
}.must_raise(CaskInvalidError)
|
|
err.message.must_include "'license' stanza may only appear once"
|
|
end
|
|
|
|
it "refuses to load on invalid license value" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-license-value')
|
|
}.must_raise(CaskInvalidError)
|
|
end
|
|
end
|
|
|
|
describe "install_script stanza" do
|
|
it "allows install_script to be specified" do
|
|
cask = Cask.load('with-install-script')
|
|
cask.artifacts[:install_script].first[:executable].must_equal '/usr/bin/true'
|
|
end
|
|
end
|
|
|
|
describe "tags stanza" do
|
|
it "allows tags stanza to be specified" do
|
|
cask = Cask.load('with-tags')
|
|
cask.tags.to_s.must_match %r{\S}
|
|
end
|
|
|
|
it "prevents specifying tags multiple times" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-tags-multiple')
|
|
}.must_raise(CaskInvalidError)
|
|
err.message.must_include "'tags' stanza may only appear once"
|
|
end
|
|
|
|
it "refuses to load if tags key is invalid" do
|
|
err = lambda {
|
|
invalid_cask = Cask.load('invalid/invalid-tags-key')
|
|
}.must_raise(CaskInvalidError)
|
|
end
|
|
end
|
|
end
|