homebrew-cask-versions/test/cask/artifact/app_test.rb
Paul Hinze 63d748e14c core: [refactor] separate Hbc::Cask from Hbc
Hbc is the namespace, Hbc::Cask is the object representing a Cask

One step on the path to reducing the surface area of the God-object
we've grown over the years. :)
2015-02-07 16:37:32 -06:00

91 lines
2.7 KiB
Ruby

require 'test_helper'
describe Hbc::Artifact::App do
let(:local_caffeine) {
Hbc.load('local-caffeine').tap do |cask|
TestHelper.install_without_artifacts(cask)
end
}
describe 'install_phase' do
it "activates the given apps using the proper target directory" do
cask = local_caffeine
shutup do
Hbc::Artifact::App.new(cask).install_phase
end
TestHelper.valid_alias?(Hbc.appdir.join('Caffeine.app')).must_equal true
end
it "works with an application in a subdir" do
SubDirCask = Class.new(Hbc::Cask)
SubDirCask.class_eval do
url TestHelper.local_binary_url('caffeine.zip')
homepage 'http://example.com/local-caffeine'
version '1.2.3'
sha256 '9203c30951f9aab41ac294bbeb1dcef7bed401ff0b353dcb34d68af32ea51853'
app 'subdir/Caffeine.app'
end
begin
subdir_cask = SubDirCask.new.tap do |cask|
TestHelper.install_without_artifacts(cask)
end
appsubdir = subdir_cask.staged_path.join('subdir').tap(&:mkpath)
FileUtils.mv(subdir_cask.staged_path.join('Caffeine.app'), appsubdir)
shutup do
Hbc::Artifact::App.new(subdir_cask).install_phase
end
TestHelper.valid_alias?(Hbc.appdir.join('Caffeine.app')).must_equal true
ensure
if defined?(subdir_cask)
shutup do
Hbc::Installer.new(subdir_cask).uninstall
end
end
end
end
it "only uses apps when they are specified" do
cask = local_caffeine
app_path = cask.staged_path.join('Caffeine.app')
FileUtils.cp_r app_path, app_path.sub('Caffeine.app', 'CaffeineAgain.app')
shutup do
Hbc::Artifact::App.new(cask).install_phase
end
TestHelper.valid_alias?(Hbc.appdir.join('Caffeine.app')).must_equal true
TestHelper.valid_alias?(Hbc.appdir.join('CaffeineAgain.app')).must_equal false
end
it "avoids clobbering an existing app by linking over it" do
cask = local_caffeine
Hbc.appdir.join('Caffeine.app').mkpath
TestHelper.must_output(self, lambda {
Hbc::Artifact::App.new(cask).install_phase
}, "==> It seems there is already an App at '#{Hbc.appdir.join('Caffeine.app')}'; not linking.")
Hbc.appdir.join('Caffeine.app').wont_be :symlink?
end
it "happily clobbers an existing symlink" do
cask = local_caffeine
Hbc.appdir.join('Caffeine.app').make_symlink('/tmp')
TestHelper.must_output(self, lambda {
Hbc::Artifact::App.new(cask).install_phase
}, "==> Symlinking App 'Caffeine.app' to '#{Hbc.appdir.join('Caffeine.app')}'")
File.readlink(Hbc.appdir.join('Caffeine.app')).wont_equal '/tmp'
end
end
end