aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorJack Nagel2014-07-03 23:27:54 -0500
committerJack Nagel2014-07-03 23:27:54 -0500
commitf666b76c39f4f25d1dea9477cd9a69f0b46c2af1 (patch)
tree1e1dee453922bdaef6100ee301be757ca4c34bf6 /Library
parent60fc7eb0edba51e29de0981e9662fd6b51bd651b (diff)
downloadbrew-f666b76c39f4f25d1dea9477cd9a69f0b46c2af1.tar.bz2
Add more tests documenting linking behavior
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/test/test_keg.rb42
1 files changed, 41 insertions, 1 deletions
diff --git a/Library/Homebrew/test/test_keg.rb b/Library/Homebrew/test/test_keg.rb
index ec1d5e724..c30096ea3 100644
--- a/Library/Homebrew/test/test_keg.rb
+++ b/Library/Homebrew/test/test_keg.rb
@@ -15,6 +15,7 @@ class LinkTests < Homebrew::TestCase
@keg = Keg.new(keg)
@dst = HOMEBREW_PREFIX.join("bin", "helloworld")
+ @nonexistent = Pathname.new("/some/nonexistent/path")
@mode = OpenStruct.new
@@ -42,7 +43,9 @@ class LinkTests < Homebrew::TestCase
def test_unlinking_keg
@keg.link
+ assert_predicate @dst, :symlink?
assert_equal 4, @keg.unlink
+ refute_predicate @dst, :symlink?
end
def test_link_dry_run
@@ -69,7 +72,7 @@ class LinkTests < Homebrew::TestCase
def test_link_ignores_broken_symlinks_at_target
src = @keg.join("bin", "helloworld")
- ln_s "/some/nonexistent/path", @dst
+ @dst.make_symlink(@nonexistent)
@keg.link
assert_equal src.relative_path_from(@dst.dirname), @dst.readlink
end
@@ -159,4 +162,41 @@ class LinkTests < Homebrew::TestCase
@keg.unlink
refute_predicate @keg, :linked?
end
+
+ def test_unlink_preserves_broken_symlink_pointing_outside_the_keg
+ @keg.link
+ @dst.delete
+ @dst.make_symlink(@nonexistent)
+ @keg.unlink
+ assert_predicate @dst, :symlink?
+ end
+
+ def test_unlink_preserves_broken_symlink_pointing_into_the_keg
+ @keg.link
+ @dst.resolved_path.delete
+ @keg.unlink
+ assert_predicate @dst, :symlink?
+ end
+
+ def test_unlink_preserves_symlink_pointing_outside_of_keg
+ @keg.link
+ @dst.delete
+ @dst.make_symlink(Pathname.new("/bin/sh"))
+ @keg.unlink
+ assert_predicate @dst, :symlink?
+ end
+
+ def test_unlink_preserves_real_file
+ @keg.link
+ @dst.delete
+ touch @dst
+ @keg.unlink
+ assert_predicate @dst, :file?
+ end
+
+ def test_unlink_ignores_nonexistent_file
+ @keg.link
+ @dst.delete
+ assert_equal 3, @keg.unlink
+ end
end