brew/Library/Homebrew/test/test_keg.rb

166 lines
3.8 KiB
Ruby
Raw Normal View History

require 'testing_env'
require 'keg'
require 'stringio'
class LinkTests < Homebrew::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
2014-06-23 22:00:33 -05:00
def teardown
@keg.unlink
@keg.uninstall
$stdout = @old_stdout
rmtree HOMEBREW_PREFIX/"bin"
rmtree HOMEBREW_PREFIX/"lib"
end
def test_linking_keg
assert_equal 3, @keg.link
2014-06-11 12:21:03 -05:00
(HOMEBREW_PREFIX/"bin").children.each { |c| assert_predicate 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)
2014-06-11 12:21:03 -05:00
refute_predicate @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_raises(Keg::AlreadyLinkedError) { @keg.link }
end
def test_linking_fails_when_files_exist
touch HOMEBREW_PREFIX/"bin/helloworld"
assert_raises(Keg::ConflictError) { @keg.link }
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
@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)
2014-07-01 09:01:06 -05:00
assert_predicate @keg, :linked?
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)
2014-07-01 09:01:06 -05:00
assert_predicate @keg, :linked?
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)
2014-06-11 12:21:03 -05:00
refute_predicate @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
2014-06-11 12:21:03 -05:00
refute_predicate HOMEBREW_PREFIX/"lib/foo", :directory?
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
2014-06-11 12:21:03 -05:00
refute_predicate HOMEBREW_PREFIX/"lib/foo", :directory?
refute_predicate HOMEBREW_PREFIX/"lib/foo/.DS_Store", :exist?
end
2014-06-30 21:47:50 -05:00
2014-07-01 09:01:06 -05:00
def test_linking_creates_opt_link
refute_predicate @keg, :optlinked?
@keg.link
assert_predicate @keg, :optlinked?
end
def test_unlinking_does_not_remove_opt_link
@keg.link
@keg.unlink
assert_predicate @keg, :optlinked?
end
2014-06-30 21:47:50 -05:00
def test_existing_opt_link
@keg.opt_record.make_relative_symlink Pathname.new(@keg)
@keg.optlink
2014-07-01 09:01:06 -05:00
assert_predicate @keg, :optlinked?
2014-06-30 21:47:50 -05:00
end
def test_existing_opt_link_directory
@keg.opt_record.mkpath
@keg.optlink
2014-07-01 09:01:06 -05:00
assert_predicate @keg, :optlinked?
2014-06-30 21:47:50 -05:00
end
def test_existing_opt_link_file
@keg.opt_record.parent.mkpath
@keg.opt_record.write("foo")
@keg.optlink
2014-07-01 09:01:06 -05:00
assert_predicate @keg, :optlinked?
end
def test_linked_keg
refute_predicate @keg, :linked?
@keg.link
assert_predicate @keg, :linked?
@keg.unlink
refute_predicate @keg, :linked?
2014-06-30 21:47:50 -05:00
end
end