From e0469eea596b2454fb335520c3717a9e374d495d Mon Sep 17 00:00:00 2001 From: akr Date: Thu, 29 Jan 2009 18:02:25 +0000 Subject: add tests. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21885 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/pathname/test_pathname.rb | 46 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/pathname/test_pathname.rb b/test/pathname/test_pathname.rb index da12383bdd..2b0d8a6a99 100644 --- a/test/pathname/test_pathname.rb +++ b/test/pathname/test_pathname.rb @@ -269,6 +269,15 @@ class TestPathname < Test::Unit::TestCase defassert_raise(:relative_path_from, ArgumentError, "a", "..") defassert_raise(:relative_path_from, ArgumentError, ".", "..") + def with_tmpchdir(base=nil) + Dir.mktmpdir(base) {|d| + d = Pathname.new(d).realpath.to_s + Dir.chdir(d) { + yield d + } + } + end + def realpath(path) Pathname.new(path).realpath.to_s end @@ -280,11 +289,46 @@ class TestPathname < Test::Unit::TestCase return rescue TypeError end - Dir.mktmpdir('rubytest-pathname') {|dir| + with_tmpchdir('rubytest-pathname') {|dir| File.symlink("not-exist-target", "#{dir}/not-exist") assert_raise(Errno::ENOENT) { realpath("#{dir}/not-exist") } + File.symlink("loop", "#{dir}/loop") assert_raise(Errno::ELOOP) { realpath("#{dir}/loop") } + + File.symlink("loop-relative", "loop-relative") + assert_raise(Errno::ELOOP) { realpath("#{dir}/loop-relative") } + + Dir.mkdir("exist") + assert_equal("#{dir}/exist", realpath("exist")) + + File.symlink("loop1/loop1", "loop1") + assert_raise(Errno::ELOOP) { realpath("#{dir}/loop1") } + + File.symlink("loop2", "loop3") + File.symlink("loop3", "loop2") + assert_raise(Errno::ELOOP) { realpath("#{dir}/loop2") } + + Dir.mkdir("b") + + File.symlink("b", "c") + assert_equal("#{dir}/b", realpath("c")) + assert_equal("#{dir}/b", realpath("c/../c")) + assert_equal("#{dir}/b", realpath("c/../c/../c/.")) + + File.symlink("..", "b/d") + assert_equal("#{dir}/b", realpath("c/d/c/d/c")) + + File.symlink("#{dir}/b", "e") + assert_equal("#{dir}/b", realpath("e")) + + Dir.mkdir("f") + Dir.mkdir("f/g") + File.symlink("f/g", "h") + assert_equal("#{dir}/f/g", realpath("h")) + File.chmod(0000, "f") + assert_raise(Errno::EACCES) { realpath("h") } + File.chmod(0755, "f") } end -- cgit v1.2.3