brew/Library/Homebrew/test/test_keg.rb

129 lines
2.9 KiB
Ruby
Raw Normal View History

require 'testing_env'
require 'keg'
require 'stringio'
class LinkTests < Test::Unit::TestCase
include FileUtils
def setup
2013-08-09 11:29:18 -05:00
@keg = HOMEBREW_CELLAR/"foo/1.0"
@keg.mkpath
(@keg/"bin").mkpath
%w{hiworld helloworld goodbye_cruel_world}.each do |file|
touch @keg/"bin/#{file}"
end
2013-08-09 11:29:18 -05:00
@keg = Keg.new(@keg)
2013-05-14 16:27:59 -05:00
@mode = OpenStruct.new
@old_stdout = $stdout
$stdout = StringIO.new
mkpath HOMEBREW_PREFIX/"bin"
mkpath HOMEBREW_PREFIX/"lib"
end
def test_linking_keg
assert_equal 3, @keg.link
(HOMEBREW_PREFIX/"bin").children.each { |c| assert c.readlink.relative? }
end
def test_unlinking_keg
@keg.link
assert_equal 4, @keg.unlink
end
def test_link_dry_run
2013-05-14 16:27:59 -05:00
@mode.dry_run = true
2013-05-14 16:27:59 -05:00
assert_equal 0, @keg.link(@mode)
assert !@keg.linked?
['hiworld', 'helloworld', 'goodbye_cruel_world'].each do |file|
2013-08-09 11:29:18 -05:00
assert_match "#{HOMEBREW_PREFIX}/bin/#{file}", $stdout.string
end
assert_equal 3, $stdout.string.lines.count
end
def test_linking_fails_when_already_linked
@keg.link
assert_raise Keg::AlreadyLinkedError do
2013-04-01 12:15:29 -05:00
shutup { @keg.link }
end
end
def test_linking_fails_when_files_exist
touch HOMEBREW_PREFIX/"bin/helloworld"
assert_raise Keg::ConflictError do
2013-04-01 12:15:29 -05:00
shutup { @keg.link }
end
end
2014-03-27 09:35:10 -05:00
def test_link_ignores_broken_symlinks_at_target
dst = HOMEBREW_PREFIX/"bin/helloworld"
src = @keg/"bin/helloworld"
ln_s "/some/nonexistent/path", dst
2014-03-27 09:35:10 -05:00
shutup { @keg.link }
assert_equal src.relative_path_from(dst.dirname), dst.readlink
2014-03-27 09:35:10 -05:00
end
def test_link_overwrite
touch HOMEBREW_PREFIX/"bin/helloworld"
2013-05-14 16:27:59 -05:00
@mode.overwrite = true
assert_equal 3, @keg.link(@mode)
end
def test_link_overwrite_broken_symlinks
cd HOMEBREW_PREFIX/"bin" do
ln_s "nowhere", "helloworld"
end
2013-05-14 16:27:59 -05:00
@mode.overwrite = true
assert_equal 3, @keg.link(@mode)
end
def test_link_overwrite_dryrun
touch HOMEBREW_PREFIX/"bin/helloworld"
2013-05-14 16:27:59 -05:00
@mode.overwrite = true
@mode.dry_run = true
2013-05-14 16:27:59 -05:00
assert_equal 0, @keg.link(@mode)
assert !@keg.linked?
2013-08-09 11:29:18 -05:00
assert_equal "#{HOMEBREW_PREFIX}/bin/helloworld\n", $stdout.string
end
def test_unlink_prunes_empty_toplevel_directories
mkpath HOMEBREW_PREFIX/"lib/foo/bar"
mkpath @keg/"lib/foo/bar"
touch @keg/"lib/foo/bar/file1"
@keg.unlink
assert !File.directory?(HOMEBREW_PREFIX/"lib/foo")
end
def test_unlink_ignores_DS_Store_when_pruning_empty_dirs
mkpath HOMEBREW_PREFIX/"lib/foo/bar"
touch HOMEBREW_PREFIX/"lib/foo/.DS_Store"
mkpath @keg/"lib/foo/bar"
touch @keg/"lib/foo/bar/file1"
@keg.unlink
assert !File.directory?(HOMEBREW_PREFIX/"lib/foo")
assert !File.exist?(HOMEBREW_PREFIX/"lib/foo/.DS_Store")
end
def teardown
@keg.unlink
@keg.rmtree
$stdout = @old_stdout
rmtree HOMEBREW_PREFIX/"bin"
rmtree HOMEBREW_PREFIX/"lib"
end
end