212 lines
9.7 KiB
Julia
212 lines
9.7 KiB
Julia
# This file is a part of Julia. License is MIT: https://julialang.org/license
|
||
|
||
for S in (String, GenericString)
|
||
dir = pwd()
|
||
sep = Base.Filesystem.path_separator
|
||
|
||
@test abspath(S("foo")) == "$dir$(sep)foo"
|
||
@test abspath(S("foo"), S("bar")) == "$dir$(sep)foo$(sep)bar"
|
||
|
||
@test basename(S("foo$(sep)bar")) == "bar"
|
||
@test dirname(S("foo$(sep)bar")) == "foo"
|
||
|
||
@test expanduser(S("x")) == "x"
|
||
@test expanduser(S("~")) == (is_windows() ? "~" : homedir())
|
||
|
||
@test isabspath(S(homedir()))
|
||
@test !isabspath(S("foo"))
|
||
|
||
@test !isdirpath(S("foo"))
|
||
@test isdirpath(S("foo$sep"))
|
||
@test isdirpath(S(""))
|
||
@test isdirpath(S("."))
|
||
@test isdirpath(S(".."))
|
||
|
||
@test joinpath(S("foo")) == "foo"
|
||
@test joinpath(S("foo"), S("bar")) == "foo$(sep)bar"
|
||
@test joinpath(S("foo"), S(homedir())) == homedir()
|
||
@test joinpath(S(abspath("foo")), S(homedir())) == homedir()
|
||
|
||
@test normpath(S(joinpath("."))) == "."
|
||
@test normpath(S(joinpath(".."))) == ".."
|
||
@test normpath(S(joinpath("..","."))) == ".."
|
||
@test normpath(S(joinpath(".",".."))) == ".."
|
||
@test normpath(S(joinpath("..",".."))) == "..$(sep).."
|
||
@test normpath(S(joinpath(".","..",".."))) == "..$(sep).."
|
||
@test normpath(S(joinpath("..",".",".."))) == "..$(sep).."
|
||
@test normpath(S(joinpath("..","..","."))) == "..$(sep).."
|
||
|
||
@test normpath(S(joinpath("foo","."))) == "foo$sep"
|
||
@test normpath(S(joinpath("foo",".."))) == "."
|
||
@test normpath(S(joinpath("foo","..","."))) == "."
|
||
@test normpath(S(joinpath("foo",".",".."))) == "."
|
||
@test normpath(S(joinpath("foo","..",".."))) == ".."
|
||
@test normpath(S(joinpath("foo",".","..",".."))) == ".."
|
||
@test normpath(S(joinpath("foo","..",".",".."))) == ".."
|
||
@test normpath(S(joinpath("foo","..","..","."))) == ".."
|
||
|
||
@test normpath(S(joinpath(".","bar"))) == "bar"
|
||
@test normpath(S(joinpath("..","bar"))) == "..$(sep)bar"
|
||
@test normpath(S(joinpath("..",".","bar"))) == "..$(sep)bar"
|
||
@test normpath(S(joinpath(".","..","bar"))) == "..$(sep)bar"
|
||
@test normpath(S(joinpath("..","..","bar"))) == "..$(sep)..$(sep)bar"
|
||
@test normpath(S(joinpath(".","..","..","bar"))) == "..$(sep)..$(sep)bar"
|
||
@test normpath(S(joinpath("..",".","..","bar"))) == "..$(sep)..$(sep)bar"
|
||
@test normpath(S(joinpath("..","..",".","bar"))) == "..$(sep)..$(sep)bar"
|
||
|
||
@test normpath(S(joinpath("foo",".","bar"))) == "foo$(sep)bar"
|
||
@test normpath(S(joinpath("foo","..","bar"))) == "bar"
|
||
@test normpath(S(joinpath("foo","..",".","bar"))) == "bar"
|
||
@test normpath(S(joinpath("foo",".","..","bar"))) == "bar"
|
||
@test normpath(S(joinpath("foo","..","..","bar"))) == "..$(sep)bar"
|
||
@test normpath(S(joinpath("foo",".","..","..","bar"))) == "..$(sep)bar"
|
||
@test normpath(S(joinpath("foo","..",".","..","bar"))) == "..$(sep)bar"
|
||
@test normpath(S(joinpath("foo","..","..",".","bar"))) == "..$(sep)bar"
|
||
|
||
@test relpath(S(joinpath("foo","bar")), S("foo")) == "bar"
|
||
|
||
@test joinpath(splitdir(S(homedir()))...) == homedir()
|
||
@test string(splitdrive(S(homedir()))...) == homedir()
|
||
|
||
if is_windows()
|
||
@test splitdrive(S("\\\\servername\\hello.world\\filename.ext")) ==
|
||
("\\\\servername\\hello.world","\\filename.ext")
|
||
@test splitdrive(S("\\\\servername.com\\hello.world\\filename.ext")) ==
|
||
("\\\\servername.com\\hello.world","\\filename.ext")
|
||
@test splitdrive(S("C:\\foo\\bar")) ==
|
||
("C:","\\foo\\bar")
|
||
end
|
||
|
||
@test splitext(S("")) == ("", "")
|
||
@test splitext(S(".")) == (".", "")
|
||
@test_broken splitext(S("..")) == ("..", "")
|
||
@test_broken splitext(S("...")) == ("...", "")
|
||
@test splitext(S("foo")) == ("foo", "")
|
||
@test splitext(S("foo.")) == ("foo", ".")
|
||
@test_broken splitext(S("foo..")) == ("foo", "..")
|
||
@test_broken splitext(S("foo...")) == ("foo", "...")
|
||
@test splitext(S("foo.bar")) == ("foo", ".bar")
|
||
@test splitext(S(".foo")) == (".foo", "")
|
||
@test splitext(S(".foo.")) == (".foo", ".")
|
||
@test_broken splitext(S(".foo..")) == (".foo", "..")
|
||
@test_broken splitext(S(".foo...")) == (".foo", "...")
|
||
@test splitext(S(".foo.bar")) == (".foo", ".bar")
|
||
end
|
||
|
||
@test isabspath("~") == false
|
||
@test isabspath("/") == true # on windows, this is relatively absolute
|
||
@test isabspath("A:/") == is_windows()
|
||
@test isabspath("B:\\") == is_windows()
|
||
@test isabspath("./") == false
|
||
@test isabspath("C:") == false
|
||
@test isabspath("C:.") == false
|
||
@test isabspath("α:/") == false
|
||
@test isabspath(".:/") == false
|
||
#@test isabspath("_:/") == false # FIXME?
|
||
#@test isabspath("AB:/") == false # FIXME?
|
||
@test isabspath("\\\\") == is_windows()
|
||
if is_unix()
|
||
@test isabspath(expanduser("~")) == true
|
||
@test startswith(expanduser("~"), homedir())
|
||
else
|
||
@test expanduser("~") == "~"
|
||
end
|
||
|
||
############################################
|
||
# This section tests relpath computation. #
|
||
###########################################
|
||
function test_relpath()
|
||
sep = Base.Filesystem.path_separator
|
||
filepaths = [
|
||
"$(sep)home$(sep)user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)Test1.md",
|
||
"$(sep)home$(sep)user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)lib$(sep)file1.md",
|
||
"$(sep)home$(sep)user$(sep).julia$(sep)测试2$(sep)docs$(sep)api$(sep)测试2.md",
|
||
"$(sep)home$(sep)user$(sep)dir_withendsep$(sep)",
|
||
"$(sep)home$(sep)dir2_withendsep$(sep)",
|
||
"$(sep)home$(sep)test.md",
|
||
"$(sep)home",
|
||
# Special cases
|
||
"$(sep)",
|
||
"$(sep)home$(sep)$(sep)$(sep)"
|
||
]
|
||
startpaths = [
|
||
"$(sep)home$(sep)user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)genindex.md",
|
||
"$(sep)multi_docs$(sep)genindex.md",
|
||
"$(sep)home$(sep)user$(sep)dir_withendsep$(sep)",
|
||
"$(sep)home$(sep)dir2_withendsep$(sep)",
|
||
"$(sep)home$(sep)test.md",
|
||
"$(sep)home",
|
||
# Special cases
|
||
"$(sep)",
|
||
"$(sep)home$(sep)$(sep)$(sep)"
|
||
]
|
||
relpath_expected_results = [
|
||
"..$(sep)Test1.md",
|
||
"..$(sep)..$(sep)home$(sep)user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)Test1.md",
|
||
"..$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)Test1.md",
|
||
"..$(sep)user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)Test1.md",
|
||
"..$(sep)user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)Test1.md",
|
||
"user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)Test1.md",
|
||
"home$(sep)user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)Test1.md",
|
||
"user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)Test1.md",
|
||
"..$(sep)lib$(sep)file1.md",
|
||
"..$(sep)..$(sep)home$(sep)user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)lib$(sep)file1.md",
|
||
"..$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)lib$(sep)file1.md",
|
||
"..$(sep)user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)lib$(sep)file1.md",
|
||
"..$(sep)user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)lib$(sep)file1.md",
|
||
"user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)lib$(sep)file1.md",
|
||
"home$(sep)user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)lib$(sep)file1.md",
|
||
"user$(sep).julia$(sep)Test1$(sep)docs$(sep)api$(sep)lib$(sep)file1.md",
|
||
"..$(sep)..$(sep)..$(sep)..$(sep)测试2$(sep)docs$(sep)api$(sep)测试2.md",
|
||
"..$(sep)..$(sep)home$(sep)user$(sep).julia$(sep)测试2$(sep)docs$(sep)api$(sep)测试2.md",
|
||
"..$(sep).julia$(sep)测试2$(sep)docs$(sep)api$(sep)测试2.md",
|
||
"..$(sep)user$(sep).julia$(sep)测试2$(sep)docs$(sep)api$(sep)测试2.md",
|
||
"..$(sep)user$(sep).julia$(sep)测试2$(sep)docs$(sep)api$(sep)测试2.md",
|
||
"user$(sep).julia$(sep)测试2$(sep)docs$(sep)api$(sep)测试2.md",
|
||
"home$(sep)user$(sep).julia$(sep)测试2$(sep)docs$(sep)api$(sep)测试2.md",
|
||
"user$(sep).julia$(sep)测试2$(sep)docs$(sep)api$(sep)测试2.md",
|
||
"..$(sep)..$(sep)..$(sep)..$(sep)..$(sep)dir_withendsep",
|
||
"..$(sep)..$(sep)home$(sep)user$(sep)dir_withendsep",".","..$(sep)user$(sep)dir_withendsep",
|
||
"..$(sep)user$(sep)dir_withendsep","user$(sep)dir_withendsep",
|
||
"home$(sep)user$(sep)dir_withendsep","user$(sep)dir_withendsep",
|
||
"..$(sep)..$(sep)..$(sep)..$(sep)..$(sep)..$(sep)dir2_withendsep",
|
||
"..$(sep)..$(sep)home$(sep)dir2_withendsep","..$(sep)..$(sep)dir2_withendsep",".",
|
||
"..$(sep)dir2_withendsep","dir2_withendsep","home$(sep)dir2_withendsep","dir2_withendsep",
|
||
"..$(sep)..$(sep)..$(sep)..$(sep)..$(sep)..$(sep)test.md","..$(sep)..$(sep)home$(sep)test.md",
|
||
"..$(sep)..$(sep)test.md","..$(sep)test.md",".","test.md","home$(sep)test.md","test.md",
|
||
"..$(sep)..$(sep)..$(sep)..$(sep)..$(sep)..","..$(sep)..$(sep)home","..$(sep)..",
|
||
"..","..",".","home",".","..$(sep)..$(sep)..$(sep)..$(sep)..$(sep)..$(sep)..","..$(sep)..",
|
||
"..$(sep)..$(sep)..","..$(sep)..","..$(sep)..","..",".","..",
|
||
"..$(sep)..$(sep)..$(sep)..$(sep)..$(sep)..","..$(sep)..$(sep)home","..$(sep)..",
|
||
"..","..",".","home","."
|
||
]
|
||
idx = 0
|
||
for filep in filepaths
|
||
for startp in startpaths
|
||
res = relpath(filep, startp)
|
||
idx += 1
|
||
@test res == relpath_expected_results[idx]
|
||
end
|
||
end
|
||
# Additional cases
|
||
@test_throws ArgumentError relpath("$(sep)home$(sep)user$(sep)dir_withendsep$(sep)", "")
|
||
@test_throws ArgumentError relpath("", "$(sep)home$(sep)user$(sep)dir_withendsep$(sep)")
|
||
end
|
||
test_relpath()
|
||
|
||
# Test type stability
|
||
@test isa(joinpath("a", "b"), String)
|
||
@test isa(joinpath(abspath("a"), "b"), String)
|
||
|
||
# homedir
|
||
let var = is_windows() ? "USERPROFILE" : "HOME",
|
||
MAX_PATH = is_windows() ? 240 : 1020
|
||
for i = 0:9
|
||
local home = " "^MAX_PATH * "123456789"[1:i]
|
||
@test withenv(var => home) do
|
||
homedir()
|
||
end == home
|
||
end
|
||
@test isabspath(withenv(homedir, var => nothing))
|
||
end
|