diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-01-29 18:02:25 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-01-29 18:02:25 +0000 |
commit | e0469eea596b2454fb335520c3717a9e374d495d (patch) | |
tree | df3f67989429142186fca7d4387fb7cc3cf76aa2 /test/pathname | |
parent | 07408d7d5b2c6676233c4aa4f2d04f424f611a78 (diff) | |
download | ruby-e0469eea596b2454fb335520c3717a9e374d495d.tar.gz |
add tests.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21885 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/pathname')
-rw-r--r-- | test/pathname/test_pathname.rb | 46 |
1 files changed, 45 insertions, 1 deletions
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 |