mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
mproved Path code.
This commit is contained in:
committed by
Christoffer Lerno
parent
d2a16961cf
commit
7a2d73c690
@@ -5,10 +5,198 @@ fn void! test_parent()
|
||||
{
|
||||
Path p = path::new("")?;
|
||||
assert(catch(p.parent()));
|
||||
p = path::new("/")?;
|
||||
p = path::new("/", .path_env = PathEnv.POSIX)?;
|
||||
assert(catch(p.parent()));
|
||||
p = path::new("/a/b/c")?;
|
||||
assert(path::new("/a/b")? == p.parent()?);
|
||||
p = path::new("/a/b/c/")?;
|
||||
assert(path::new("/a/b")? == p.parent()?);
|
||||
}
|
||||
p = path::new("/a/b/c", .path_env = PathEnv.POSIX)?;
|
||||
assert(p.parent().as_str()? == "/a/b");
|
||||
p = path::new("/a/b/c", .path_env = PathEnv.WIN32)?;
|
||||
assert(p.parent().as_str()? == `\a\b`);
|
||||
}
|
||||
|
||||
fn void! test_path_normalized()
|
||||
{
|
||||
assert(path::new("", .path_env = PathEnv.WIN32).as_str()? == "");
|
||||
assert(catch(path::new("1:\\a\\b\\c.txt", .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(":", .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new("1:", .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new("1:a", .path_env = PathEnv.WIN32)));
|
||||
// assert(catch(path::new(`\\\a\b\c.txt`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`\\server\a\b\..\..\..\c`, .path_env = PathEnv.WIN32)));
|
||||
|
||||
assert(catch(path::new(`\\a`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`a/b/../../../c`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`a/b/../../../c`, .path_env = PathEnv.POSIX)));
|
||||
assert(catch(path::new(`/a/b/../../../c`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`/a/b/../../../c`, .path_env = PathEnv.POSIX)));
|
||||
assert(catch(path::new(`a/b/../../..`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`a/b/../../..`, .path_env = PathEnv.POSIX)));
|
||||
assert(catch(path::new(`/a/b/../../..`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`/a/b/../../..`, .path_env = PathEnv.POSIX)));
|
||||
assert(catch(path::new(`../a`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`../a`, .path_env = PathEnv.POSIX)));
|
||||
assert(catch(path::new(`..`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`..`, .path_env = PathEnv.POSIX)));
|
||||
assert(catch(path::new(`/../a`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`/../a`, .path_env = PathEnv.POSIX)));
|
||||
assert(catch(path::new(`/..`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`/..`, .path_env = PathEnv.POSIX)));
|
||||
assert(catch(path::new(`C:/a/b/../../../c`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`C:/../a`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`C:/..`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`C:a/b/../../../c`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`C:../a`, .path_env = PathEnv.WIN32)));
|
||||
assert(catch(path::new(`C:..`, .path_env = PathEnv.WIN32)));
|
||||
|
||||
assert(path::new("/", .path_env = PathEnv.POSIX).as_str()? == "/");
|
||||
assert(path::new("/./", .path_env = PathEnv.POSIX).as_str()? == "/");
|
||||
assert(path::new("/foo/../", .path_env = PathEnv.POSIX).as_str()? == "/");
|
||||
assert(path::new("/foo/bar/../", .path_env = PathEnv.POSIX).as_str()? == "/foo");
|
||||
assert(path::new("/foo//bar", .path_env = PathEnv.POSIX).as_str()? == "/foo/bar");
|
||||
assert(path::new("/foo//bar/../", .path_env = PathEnv.POSIX).as_str()? == "/foo");
|
||||
assert(path::new("a\\b/c.txt", .path_env = PathEnv.WIN32).as_str()? == `a\b\c.txt`);
|
||||
assert(path::new("a\\b/c.txt", .path_env = PathEnv.POSIX).as_str()? == "a\\b/c.txt");
|
||||
assert(path::new("C:\\a\\b/c.txt", .path_env = PathEnv.WIN32).as_str()? == `C:\a\b\c.txt`);
|
||||
assert(path::new("C:\\a\\b/c.txt", .path_env = PathEnv.POSIX).as_str()? == "C:\\a\\b/c.txt");
|
||||
assert(path::new(`\\server\a\b/c.txt`, .path_env = PathEnv.WIN32).as_str()? == `\\server\a\b\c.txt`);
|
||||
assert(path::new(`\\server\a\b/c.txt`, .path_env = PathEnv.POSIX).as_str()? == `\\server\a\b/c.txt`);
|
||||
assert(path::new(`c:\hello//bar\\\\foo.txt`, .path_env = PathEnv.WIN32).as_str()? == `c:\hello\bar\foo.txt`);
|
||||
|
||||
assert(path::new(`~\a\b/c.txt`, .path_env = PathEnv.WIN32).as_str()? == `~\a\b\c.txt`);
|
||||
assert(path::new(`~\a\b/c.txt`, .path_env = PathEnv.POSIX).as_str()? == `~\a\b/c.txt`);
|
||||
|
||||
assert(path::new(`a/b/../c`, .path_env = PathEnv.WIN32).as_str()? == `a\c`);
|
||||
assert(path::new(`a/b/../c`, .path_env = PathEnv.POSIX).as_str()? == `a/c`);
|
||||
assert(path::new(`a/b/../../c`, .path_env = PathEnv.WIN32).as_str()? == `c`);
|
||||
assert(path::new(`a/b/../../c`, .path_env = PathEnv.POSIX).as_str()? == `c`);
|
||||
assert(path::new(`a/b/..`, .path_env = PathEnv.WIN32).as_str()? == `a`);
|
||||
assert(path::new(`a/b/..`, .path_env = PathEnv.POSIX).as_str()? == `a`);
|
||||
assert(path::new(`a/b/../`, .path_env = PathEnv.WIN32).as_str()? == `a`);
|
||||
assert(path::new(`a/b/../`, .path_env = PathEnv.POSIX).as_str()? == `a`);
|
||||
assert(path::new(`a/b/../..`, .path_env = PathEnv.WIN32).as_str()? == "");
|
||||
assert(path::new(`a/b/../..`, .path_env = PathEnv.POSIX).as_str()? == "");
|
||||
assert(path::new(`a/b/../../`, .path_env = PathEnv.WIN32).as_str()? == "");
|
||||
assert(path::new(`a/b/../../`, .path_env = PathEnv.POSIX).as_str()? == "");
|
||||
assert(path::new(`a/b/../c/../d`, .path_env = PathEnv.WIN32).as_str()? == `a\d`);
|
||||
assert(path::new(`a/b/../c/../d`, .path_env = PathEnv.POSIX).as_str()? == `a/d`);
|
||||
assert(path::new(`a/b/../c/../d/`, .path_env = PathEnv.WIN32).as_str()? == `a\d`);
|
||||
assert(path::new(`a/b/../c/../d/`, .path_env = PathEnv.POSIX).as_str()? == `a/d`);
|
||||
assert(path::new(`a/b//d`, .path_env = PathEnv.WIN32).as_str()? == `a\b\d`);
|
||||
assert(path::new(`a/b//d`, .path_env = PathEnv.POSIX).as_str()? == `a/b/d`);
|
||||
assert(path::new(`a/b/././.`, .path_env = PathEnv.WIN32).as_str()? == `a\b`);
|
||||
assert(path::new(`a/b/././.`, .path_env = PathEnv.POSIX).as_str()? == `a/b`);
|
||||
assert(path::new(`a/b/./././`, .path_env = PathEnv.WIN32).as_str()? == `a\b`);
|
||||
assert(path::new(`a/b/./././`, .path_env = PathEnv.POSIX).as_str()? == `a/b`);
|
||||
assert(path::new(`./a/`, .path_env = PathEnv.WIN32).as_str()? == `a`);
|
||||
assert(path::new(`./a/`, .path_env = PathEnv.POSIX).as_str()? == `a`);
|
||||
assert(path::new(`./`, .path_env = PathEnv.WIN32).as_str()? == ``);
|
||||
assert(path::new(`./`, .path_env = PathEnv.POSIX).as_str()? == ``);
|
||||
assert(path::new(`.`, .path_env = PathEnv.WIN32).as_str()? == ``);
|
||||
assert(path::new(`.`, .path_env = PathEnv.POSIX).as_str()? == ``);
|
||||
assert(path::new(``, .path_env = PathEnv.WIN32).as_str()? == ``);
|
||||
assert(path::new(``, .path_env = PathEnv.POSIX).as_str()? == ``);
|
||||
assert(path::new(`/a`, .path_env = PathEnv.WIN32).as_str()? == `\a`);
|
||||
assert(path::new(`/a`, .path_env = PathEnv.POSIX).as_str()? == `/a`);
|
||||
assert(path::new(`/a/`, .path_env = PathEnv.WIN32).as_str()? == `\a`);
|
||||
assert(path::new(`/a/`, .path_env = PathEnv.POSIX).as_str()? == `/a`);
|
||||
assert(path::new(`/a/b/../c`, .path_env = PathEnv.WIN32).as_str()? == `\a\c`);
|
||||
assert(path::new(`/a/b/../c`, .path_env = PathEnv.POSIX).as_str()? == `/a/c`);
|
||||
assert(path::new(`/a/b/../../c`, .path_env = PathEnv.WIN32).as_str()? == `\c`);
|
||||
assert(path::new(`/a/b/../../c`, .path_env = PathEnv.POSIX).as_str()? == `/c`);
|
||||
assert(path::new(`/a/b/..`, .path_env = PathEnv.WIN32).as_str()? == `\a`);
|
||||
assert(path::new(`/a/b/..`, .path_env = PathEnv.POSIX).as_str()? == `/a`);
|
||||
assert(path::new(`/a/b/../..`, .path_env = PathEnv.WIN32).as_str()? == `\`);
|
||||
assert(path::new(`/a/b/../..`, .path_env = PathEnv.POSIX).as_str()? == `/`);
|
||||
assert(path::new(`/a/b/../c/../d`, .path_env = PathEnv.WIN32).as_str()? == `\a\d`);
|
||||
assert(path::new(`/a/b/../c/../d`, .path_env = PathEnv.POSIX).as_str()? == `/a/d`);
|
||||
assert(path::new(`/a/b//d`, .path_env = PathEnv.WIN32).as_str()? == `\a\b\d`);
|
||||
assert(path::new(`/a/b//d`, .path_env = PathEnv.POSIX).as_str()? == `/a/b/d`);
|
||||
assert(path::new(`/./a/`, .path_env = PathEnv.WIN32).as_str()? == `\a`);
|
||||
assert(path::new(`/./a/`, .path_env = PathEnv.POSIX).as_str()? == `/a`);
|
||||
assert(path::new(`/./`, .path_env = PathEnv.WIN32).as_str()? == `\`);
|
||||
assert(path::new(`/./`, .path_env = PathEnv.POSIX).as_str()? == `/`);
|
||||
assert(path::new(`/.`, .path_env = PathEnv.WIN32).as_str()? == `\`);
|
||||
assert(path::new(`/.`, .path_env = PathEnv.POSIX).as_str()? == `/`);
|
||||
assert(path::new(`/`, .path_env = PathEnv.WIN32).as_str()? == `\`);
|
||||
assert(path::new(`/`, .path_env = PathEnv.POSIX).as_str()? == `/`);
|
||||
assert(path::new(`C:/a`, .path_env = PathEnv.WIN32).as_str()? == `C:\a`);
|
||||
assert(path::new(`C:/a`, .path_env = PathEnv.POSIX).as_str()? == `C:/a`);
|
||||
assert(path::new(`C:/a/b/../c`, .path_env = PathEnv.WIN32).as_str()? == `C:\a\c`);
|
||||
assert(path::new(`C:/a/b/../c`, .path_env = PathEnv.POSIX).as_str()? == `C:/a/c`);
|
||||
assert(path::new(`C:/a/b/../../c`, .path_env = PathEnv.WIN32).as_str()? == `C:\c`);
|
||||
assert(path::new(`C:/a/b/../../c`, .path_env = PathEnv.POSIX).as_str()? == `C:/c`);
|
||||
assert(path::new(`C:/a/b/../../../c`, .path_env = PathEnv.POSIX).as_str()? == `c`);
|
||||
assert(path::new(`C:/a/b/..`, .path_env = PathEnv.WIN32).as_str()? == `C:\a`);
|
||||
assert(path::new(`C:/a/b/..`, .path_env = PathEnv.POSIX).as_str()? == `C:/a`);
|
||||
assert(path::new(`C:/a/b/../..`, .path_env = PathEnv.WIN32).as_str()? == `C:\`);
|
||||
assert(path::new(`C:/a/b/../..`, .path_env = PathEnv.POSIX).as_str()? == `C:`);
|
||||
assert(path::new(`C:/a/b/../c/../d`, .path_env = PathEnv.WIN32).as_str()? == `C:\a\d`);
|
||||
assert(path::new(`C:/a/b/../c/../d`, .path_env = PathEnv.POSIX).as_str()? == `C:/a/d`);
|
||||
assert(path::new(`C:/a/b//d`, .path_env = PathEnv.WIN32).as_str()? == `C:\a\b\d`);
|
||||
assert(path::new(`C:/a/b//d`, .path_env = PathEnv.POSIX).as_str()? == `C:/a/b/d`);
|
||||
assert(path::new(`C:/a/b/././.`, .path_env = PathEnv.WIN32).as_str()? == `C:\a\b`);
|
||||
assert(path::new(`C:/a/b/././.`, .path_env = PathEnv.POSIX).as_str()? == `C:/a/b`);
|
||||
assert(path::new(`C:/./a`, .path_env = PathEnv.WIN32).as_str()? == `C:\a`);
|
||||
assert(path::new(`C:/./a`, .path_env = PathEnv.POSIX).as_str()? == `C:/a`);
|
||||
assert(path::new(`C:/./`, .path_env = PathEnv.WIN32).as_str()? == `C:\`);
|
||||
assert(path::new(`C:/./`, .path_env = PathEnv.POSIX).as_str()? == `C:`);
|
||||
assert(path::new(`C:/../a`, .path_env = PathEnv.POSIX).as_str()? == `a`);
|
||||
assert(path::new(`C:/..`, .path_env = PathEnv.POSIX).as_str()? == ``);
|
||||
assert(path::new(`C:/`, .path_env = PathEnv.WIN32).as_str()? == `C:\`);
|
||||
assert(path::new(`C:/`, .path_env = PathEnv.POSIX).as_str()? == `C:`);
|
||||
assert(path::new(`C:a`, .path_env = PathEnv.WIN32).as_str()? == `C:a`);
|
||||
assert(path::new(`C:a`, .path_env = PathEnv.POSIX).as_str()? == `C:a`);
|
||||
assert(path::new(`C:a/`, .path_env = PathEnv.WIN32).as_str()? == `C:a`);
|
||||
assert(path::new(`C:a/`, .path_env = PathEnv.POSIX).as_str()? == `C:a`);
|
||||
|
||||
assert(path::new(`C:a/b/../c`, .path_env = PathEnv.WIN32).as_str()? == `C:a\c`);
|
||||
assert(path::new(`C:a/b/../c`, .path_env = PathEnv.POSIX).as_str()? == `C:a/c`);
|
||||
assert(path::new(`C:a/b/../../c`, .path_env = PathEnv.WIN32).as_str()? == `C:c`);
|
||||
assert(path::new(`C:a/b/../../c`, .path_env = PathEnv.POSIX).as_str()? == `c`);
|
||||
assert(path::new(`C:a/b/..`, .path_env = PathEnv.WIN32).as_str()? == `C:a`);
|
||||
assert(path::new(`C:a/b/..`, .path_env = PathEnv.POSIX).as_str()? == `C:a`);
|
||||
assert(path::new(`C:a/b/../..`, .path_env = PathEnv.WIN32).as_str()? == `C:`);
|
||||
assert(path::new(`C:a/b/../..`, .path_env = PathEnv.POSIX).as_str()? == ``);
|
||||
assert(path::new(`C:a/b/../c/../d`, .path_env = PathEnv.WIN32).as_str()? == `C:a\d`);
|
||||
assert(path::new(`C:a/b/../c/../d`, .path_env = PathEnv.POSIX).as_str()? == `C:a/d`);
|
||||
assert(path::new(`C:a/b//d`, .path_env = PathEnv.WIN32).as_str()? == `C:a\b\d`);
|
||||
assert(path::new(`C:a/b//d`, .path_env = PathEnv.POSIX).as_str()? == `C:a/b/d`);
|
||||
assert(path::new(`C:a/b/././.`, .path_env = PathEnv.WIN32).as_str()? == `C:a\b`);
|
||||
assert(path::new(`C:a/b/././.`, .path_env = PathEnv.POSIX).as_str()? == `C:a/b`);
|
||||
assert(path::new(`C:./a`, .path_env = PathEnv.WIN32).as_str()? == `C:a`);
|
||||
assert(path::new(`C:./a`, .path_env = PathEnv.POSIX).as_str()? == `C:./a`);
|
||||
assert(path::new(`C:./`, .path_env = PathEnv.WIN32).as_str()? == `C:`);
|
||||
assert(path::new(`C:./`, .path_env = PathEnv.POSIX).as_str()? == `C:.`);
|
||||
assert(path::new(`C:../a`, .path_env = PathEnv.POSIX).as_str()? == `C:../a`);
|
||||
assert(path::new(`C:..`, .path_env = PathEnv.POSIX).as_str()? == `C:..`);
|
||||
assert(path::new(`C:`, .path_env = PathEnv.WIN32).as_str()? == `C:`);
|
||||
assert(path::new(`C:`, .path_env = PathEnv.POSIX).as_str()? == `C:`);
|
||||
|
||||
assert(path::new(`\\server/a`, .path_env = PathEnv.WIN32).as_str()? == `\\server\a`);
|
||||
assert(path::new(`\\server/a`, .path_env = PathEnv.POSIX).as_str()? == `\\server/a`);
|
||||
assert(path::new(`\\server\a\b\..\c`, .path_env = PathEnv.WIN32).as_str()? == `\\server\a\c`);
|
||||
assert(path::new(`\\server\a\b\..\..\c`, .path_env = PathEnv.WIN32).as_str()? == `\\server\c`);
|
||||
assert(path::new(`\\server\a\b\..`, .path_env = PathEnv.WIN32).as_str()? == `\\server\a`);
|
||||
assert(path::new(`\\server\a\..`, .path_env = PathEnv.WIN32).as_str()? == `\\server\`);
|
||||
assert(path::new(`\\server\a\b\..\c\..\d`, .path_env = PathEnv.WIN32).as_str()? == `\\server\a\d`);
|
||||
assert(path::new(`\\server\a\b\\d`, .path_env = PathEnv.WIN32).as_str()? == `\\server\a\b\d`);
|
||||
assert(path::new(`\\server\a\b\.\.\.`, .path_env = PathEnv.WIN32).as_str()? == `\\server\a\b`);
|
||||
assert(path::new(`\\server\.\a`, .path_env = PathEnv.WIN32).as_str()? == `\\server\a`);
|
||||
assert(path::new(`\\server\.`, .path_env = PathEnv.WIN32).as_str()? == `\\server\`);
|
||||
assert(path::new(`\\server\`, .path_env = PathEnv.WIN32).as_str()? == `\\server\`);
|
||||
|
||||
|
||||
/*
|
||||
assertEquals(null, FilenameUtils.normalize("//server/../a"));
|
||||
assertEquals(null, FilenameUtils.normalize("//server/.."));
|
||||
assertEquals(SEP + SEP + "server" + SEP + "", FilenameUtils.normalize("//server/"));*/
|
||||
}
|
||||
|
||||
fn void! test_path_volume()
|
||||
{
|
||||
assert(path::new_windows(`C:\abs`).volume_name()? == `C:`);
|
||||
assert(path::new_windows(`C:abs`).volume_name()? == `C:`);
|
||||
assert(path::new_posix(`C:/abs`).volume_name()? == ``);
|
||||
assert(path::new_posix(`C:abs`).volume_name()? == ``);
|
||||
assert(path::new_windows(`\\server\`).volume_name()? == `\\server`);
|
||||
assert(path::new_windows(`\\server\abc`).volume_name()? == `\\server`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user