From d19934dcb71c78f6f02f7cd7b8337507e4e05f3f Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Sat, 21 Dec 2013 23:28:04 -0600 Subject: cleaner: clean up broken and orphaned symlinks --- Library/Homebrew/test/test_cleaner.rb | 82 ++++++++++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 12 deletions(-) (limited to 'Library/Homebrew/test') diff --git a/Library/Homebrew/test/test_cleaner.rb b/Library/Homebrew/test/test_cleaner.rb index 33205a8d2..9a4f75a86 100644 --- a/Library/Homebrew/test/test_cleaner.rb +++ b/Library/Homebrew/test/test_cleaner.rb @@ -63,22 +63,80 @@ class CleanerTests < Test::Unit::TestCase assert subdir.directory? end - def test_fails_to_remove_symlink_when_target_was_pruned_first - mkpath @f.prefix/'b' - ln_s 'b', @f.prefix/'a' - assert_raises(Errno::ENOENT) { Cleaner.new @f } + def test_removes_symlink_when_target_was_pruned_first + dir = @f.prefix/'b' + symlink = @f.prefix/'a' + + dir.mkpath + ln_s dir.basename, symlink + + Cleaner.new @f + + assert !dir.exist? + assert !symlink.symlink? + assert !symlink.exist? + end + + def test_removes_symlink_pointing_to_empty_directory + dir = @f.prefix/'b' + symlink = @f.prefix/'c' + + dir.mkpath + ln_s dir.basename, symlink + + Cleaner.new @f + + assert !dir.exist? + assert !symlink.symlink? + assert !symlink.exist? end - def test_fails_to_remove_symlink_pointing_to_empty_directory - mkpath @f.prefix/'b' - ln_s 'b', @f.prefix/'c' - assert_raises(Errno::ENOTDIR) { Cleaner.new @f } + def test_removes_broken_symlinks + symlink = @f.prefix/'symlink' + ln_s 'target', symlink + + Cleaner.new @f + + assert !symlink.symlink? end - def test_fails_to_remove_broken_symlink - ln_s 'target', @f.prefix/'symlink' + def test_skip_clean_broken_symlink + @f.class.skip_clean 'symlink' + symlink = @f.prefix/'symlink' + ln_s 'target', symlink + Cleaner.new @f - assert @f.prefix.join('symlink').symlink?, "not a symlink" - assert !@f.prefix.join('symlink').exist?, "target exists" + + assert symlink.symlink? + end + + def test_skip_clean_symlink_pointing_to_empty_directory + @f.class.skip_clean 'c' + dir = @f.prefix/'b' + symlink = @f.prefix/'c' + + dir.mkpath + ln_s dir.basename, symlink + + Cleaner.new @f + + assert !dir.exist? + assert symlink.symlink? + assert !symlink.exist? + end + + def test_skip_clean_symlink_when_target_pruned + @f.class.skip_clean 'a' + dir = @f.prefix/'b' + symlink = @f.prefix/'a' + + dir.mkpath + ln_s dir.basename, symlink + + Cleaner.new @f + + assert !dir.exist? + assert symlink.symlink? + assert !symlink.exist? end end -- cgit v1.2.3