1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/ruby/test_path.rb
NAKAMURA Usaku 204dc3f39f Revert "Should return "." for File.extname("file.") also on Windows"
We want to introduce consistency and better compatibility with unixen,
but the Windows APIs doues not have consistency fundamentally and
we can not found any logical way...

This reverts commit 61aff0cd18.
2019-12-23 11:54:25 +09:00

267 lines
9.8 KiB
Ruby

# frozen_string_literal: false
require 'test/unit'
class TestPath < Test::Unit::TestCase
def test_path
assert_equal("a", File.basename("a"))
assert_equal("b", File.basename("a/b"))
assert_equal("b", File.basename("a/b/"))
assert_equal("/", File.basename("/"))
assert_equal("/", File.basename("//"))
assert_equal("/", File.basename("///"))
assert_equal("b", File.basename("a/b////"))
assert_equal("a", File.basename("a.rb", ".rb"))
assert_equal("a", File.basename("a.rb///", ".rb"))
assert_equal("a", File.basename("a.rb///", ".*"))
assert_equal("a.rb", File.basename("a.rb///", ".c"))
assert_equal(".", File.dirname("a"))
assert_equal("/", File.dirname("/"))
assert_equal("/", File.dirname("/a"))
assert_equal("a", File.dirname("a/b"))
assert_equal("a/b", File.dirname("a/b/c"))
assert_equal("/a/b", File.dirname("/a/b/c"))
assert_equal("/a", File.dirname("/a/b/"))
assert_equal("/a", File.dirname("/a/b///"))
case Dir.pwd
when %r'\A\w:'
assert_match(/\A\w:\/\z/, File.expand_path(".", "/"))
assert_match(/\A\w:\/a\z/, File.expand_path("a", "/"))
dosish = true
when %r'\A//'
assert_match(%r'\A//[^/]+/[^/]+\z', File.expand_path(".", "/"))
assert_match(%r'\A//[^/]+/[^/]+/a\z', File.expand_path(".", "/"))
dosish = true
else
assert_equal("/", File.expand_path(".", "/"))
assert_equal("/sub", File.expand_path("sub", "/"))
end
if dosish
assert_equal("//127.0.0.1/share", File.expand_path("/", "//127.0.0.1/share/sub"))
assert_equal("//127.0.0.1/share/dir", File.expand_path("/dir", "//127.0.0.1/share/sub"))
assert_equal("z:/", File.expand_path("/", "z:/sub"))
assert_equal("z:/dir", File.expand_path("/dir", "z:/sub"))
end
assert_equal("//", File.expand_path(".", "//"))
assert_equal("//sub", File.expand_path("sub", "//"))
assert_equal("//127.0.0.1/\u3042", File.expand_path("\u3042", "//127.0.0.1"))
end
def test_dirname
if /(bcc|ms)win\d|mingw|cygwin|emx/ =~ RUBY_PLATFORM
# DOSISH_DRIVE_LETTER
assert_equal('C:.', File.dirname('C:'))
assert_equal('C:.', File.dirname('C:a'))
assert_equal('C:.', File.dirname('C:a/'))
assert_equal('C:a', File.dirname('C:a/b'), "[ruby-dev:27738]")
assert_equal('C:/', File.dirname('C:/'))
assert_equal('C:/', File.dirname('C:/a'))
assert_equal('C:/', File.dirname('C:/a/'))
assert_equal('C:/a', File.dirname('C:/a/b'))
assert_equal('C:/', File.dirname('C://'))
assert_equal('C:/', File.dirname('C://a'))
assert_equal('C:/', File.dirname('C://a/'))
assert_equal('C:/a', File.dirname('C://a/b'))
assert_equal('C:/', File.dirname('C:///'), "[ruby-dev:27738]")
assert_equal('C:/', File.dirname('C:///a'))
assert_equal('C:/', File.dirname('C:///a/'))
assert_equal('C:/a', File.dirname('C:///a/b'))
else
# others
assert_equal('.', File.dirname('C:'))
assert_equal('.', File.dirname('C:a'))
assert_equal('.', File.dirname('C:a/'))
assert_equal('C:a', File.dirname('C:a/b'))
assert_equal('.', File.dirname('C:/'))
assert_equal('C:', File.dirname('C:/a'))
assert_equal('C:', File.dirname('C:/a/'))
assert_equal('C:/a', File.dirname('C:/a/b'))
assert_equal('.', File.dirname('C://'))
assert_equal('C:', File.dirname('C://a'))
assert_equal('C:', File.dirname('C://a/'))
# not spec.
#assert_equal('C://a', File.dirname('C://a/b'))
assert_equal('.', File.dirname('C:///'))
assert_equal('C:', File.dirname('C:///a'))
assert_equal('C:', File.dirname('C:///a/'))
# not spec.
#assert_equal('C:///a', File.dirname('C:///a/b'))
end
assert_equal('.', File.dirname(''))
assert_equal('.', File.dirname('a'))
assert_equal('.', File.dirname('a/'))
assert_equal('a', File.dirname('a/b'))
assert_equal('/', File.dirname('/'))
assert_equal('/', File.dirname('/a'))
assert_equal('/', File.dirname('/a/'))
assert_equal('/a', File.dirname('/a/b'))
if /(bcc|ms|cyg)win|mingw|emx/ =~ RUBY_PLATFORM
# DOSISH_UNC
assert_equal('//', File.dirname('//'))
assert_equal('//a', File.dirname('//a'))
assert_equal('//a', File.dirname('//a/'))
assert_equal('//a/b', File.dirname('//a/b'))
assert_equal('//a/b', File.dirname('//a/b/'))
assert_equal('//a/b', File.dirname('//a/b/c'))
assert_equal('//', File.dirname('///'))
assert_equal('//a', File.dirname('///a'))
assert_equal('//a', File.dirname('///a/'))
assert_equal('//a/b', File.dirname('///a/b'))
assert_equal('//a/b', File.dirname('///a/b/'))
assert_equal('//a/b', File.dirname('///a/b/c'))
else
# others
assert_equal('/', File.dirname('//'))
assert_equal('/', File.dirname('//a'))
assert_equal('/', File.dirname('//a/'))
assert_equal('/a', File.dirname('//a/b'))
assert_equal('/a', File.dirname('//a/b/'))
assert_equal('/a/b', File.dirname('//a/b/c'))
assert_equal('/', File.dirname('///'))
assert_equal('/', File.dirname('///a'))
assert_equal('/', File.dirname('///a/'))
assert_equal('/a', File.dirname('///a/b'))
assert_equal('/a', File.dirname('///a/b/'))
assert_equal('/a/b', File.dirname('///a/b/c'))
end
end
def test_basename
if /(bcc|ms)win\d|mingw|cygwin|emx/ =~ RUBY_PLATFORM
# DOSISH_DRIVE_LETTER
assert_equal('', File.basename('C:'))
assert_equal('a', File.basename('C:a'))
assert_equal('a', File.basename('C:a/'))
assert_equal('b', File.basename('C:a/b'))
assert_equal('/', File.basename('C:/'))
assert_equal('a', File.basename('C:/a'))
assert_equal('a', File.basename('C:/a/'))
assert_equal('b', File.basename('C:/a/b'))
assert_equal('/', File.basename('C://'))
assert_equal('a', File.basename('C://a'))
assert_equal('a', File.basename('C://a/'))
assert_equal('b', File.basename('C://a/b'))
assert_equal('/', File.basename('C:///'))
assert_equal('a', File.basename('C:///a'))
assert_equal('a', File.basename('C:///a/'))
assert_equal('b', File.basename('C:///a/b'))
else
# others
assert_equal('C:', File.basename('C:'))
assert_equal('C:a', File.basename('C:a'))
assert_equal('C:a', File.basename('C:a/'))
assert_equal('b', File.basename('C:a/b'))
assert_equal('C:', File.basename('C:/'))
assert_equal('a', File.basename('C:/a'))
assert_equal('a', File.basename('C:/a/'))
assert_equal('b', File.basename('C:/a/b'))
assert_equal('C:', File.basename('C://'))
assert_equal('a', File.basename('C://a'))
assert_equal('a', File.basename('C://a/'))
assert_equal('b', File.basename('C://a/b'))
assert_equal('C:', File.basename('C:///'))
assert_equal('a', File.basename('C:///a'))
assert_equal('a', File.basename('C:///a/'))
assert_equal('b', File.basename('C:///a/b'))
end
assert_equal('', File.basename(''))
assert_equal('a', File.basename('a'))
assert_equal('a', File.basename('a/'))
assert_equal('b', File.basename('a/b'))
assert_equal('/', File.basename('/'))
assert_equal('a', File.basename('/a'))
assert_equal('a', File.basename('/a/'))
assert_equal('b', File.basename('/a/b'))
assert_equal("..", File.basename("..", ".*"))
if /(bcc|ms|cyg)win|mingw|emx/ =~ RUBY_PLATFORM
# DOSISH_UNC
assert_equal('/', File.basename('//'))
assert_equal('/', File.basename('//a'))
assert_equal('/', File.basename('//a/'))
assert_equal('/', File.basename('//a/b'), "[ruby-dev:27776]")
assert_equal('/', File.basename('//a/b/'))
assert_equal('c', File.basename('//a/b/c'))
assert_equal('/', File.basename('///'))
assert_equal('/', File.basename('///a'))
assert_equal('/', File.basename('///a/'))
assert_equal('/', File.basename('///a/b'))
assert_equal('/', File.basename('///a/b/'))
assert_equal('c', File.basename('///a/b/c'))
else
# others
assert_equal('/', File.basename('//'))
assert_equal('a', File.basename('//a'))
assert_equal('a', File.basename('//a/'))
assert_equal('b', File.basename('//a/b'))
assert_equal('b', File.basename('//a/b/'))
assert_equal('c', File.basename('//a/b/c'))
assert_equal('/', File.basename('///'))
assert_equal('a', File.basename('///a'))
assert_equal('a', File.basename('///a/'))
assert_equal('b', File.basename('///a/b'))
assert_equal('b', File.basename('///a/b/'))
assert_equal('c', File.basename('///a/b/c'))
end
end
def test_extname
assert_equal('', File.extname('a'))
ext = '.rb'
assert_equal(ext, File.extname('a.rb'))
assert_equal(ext, File.extname('.a.rb'))
assert_equal(ext, File.extname('a/b/d/test.rb'))
assert_equal(ext, File.extname('.a/b/d/test.rb'))
unless /mswin|bccwin|mingw/ =~ RUBY_PLATFORM
# trailing spaces and dots are ignored on NTFS.
ext = '.'
end
assert_equal(ext, File.extname('a.rb.'))
if /mswin|bccwin|mingw/ =~ RUBY_PLATFORM
# trailing spaces and dots are ignored on NTFS.
ext = ''
end
assert_equal(ext, File.extname('a.'))
assert_equal('', File.extname('.x'))
assert_equal('', File.extname('..x'))
end
def test_ascii_incompatible_path
s = "\u{221e}\u{2603}"
assert_raise(Encoding::CompatibilityError) {open(s.encode("utf-16be"))}
assert_raise(Encoding::CompatibilityError) {open(s.encode("utf-16le"))}
assert_raise(Encoding::CompatibilityError) {open(s.encode("utf-32be"))}
assert_raise(Encoding::CompatibilityError) {open(s.encode("utf-32le"))}
end
def test_join
bug5483 = '[ruby-core:40338]'
path = %w[a b]
Encoding.list.each do |e|
next unless e.ascii_compatible?
assert_equal(e, File.join(*path.map {|s| s.force_encoding(e)}).encoding, bug5483)
end
end
end