123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- discard """
- output: '''true
- true
- true
- true
- true
- true
- true
- true
- true
- All:
- __really_obscure_dir_name/are.x
- __really_obscure_dir_name/created
- __really_obscure_dir_name/dirs
- __really_obscure_dir_name/files.q
- __really_obscure_dir_name/some
- __really_obscure_dir_name/test
- __really_obscure_dir_name/testing.r
- __really_obscure_dir_name/these.txt
- Files:
- __really_obscure_dir_name/are.x
- __really_obscure_dir_name/files.q
- __really_obscure_dir_name/testing.r
- __really_obscure_dir_name/these.txt
- Dirs:
- __really_obscure_dir_name/created
- __really_obscure_dir_name/dirs
- __really_obscure_dir_name/some
- __really_obscure_dir_name/test
- false
- false
- false
- false
- false
- false
- false
- false
- false
- true
- true
- Raises
- Raises
- true
- true
- true
- true
- true
- true
- '''
- """
- # test os path creation, iteration, and deletion
- import os, strutils
- block fileOperations:
- let files = @["these.txt", "are.x", "testing.r", "files.q"]
- let dirs = @["some", "created", "test", "dirs"]
- let dname = "__really_obscure_dir_name"
- createDir(dname)
- echo dirExists(dname)
- # Test creating files and dirs
- for dir in dirs:
- createDir(dname/dir)
- echo dirExists(dname/dir)
- for file in files:
- let fh = open(dname/file, fmReadWrite)
- fh.close()
- echo fileExists(dname/file)
- echo "All:"
- template norm(x): untyped =
- (when defined(windows): x.replace('\\', '/') else: x)
- for path in walkPattern(dname/"*"):
- echo path.norm
- echo "Files:"
- for path in walkFiles(dname/"*"):
- echo path.norm
- echo "Dirs:"
- for path in walkDirs(dname/"*"):
- echo path.norm
- # Test removal of files dirs
- for dir in dirs:
- removeDir(dname/dir)
- echo dirExists(dname/dir)
- for file in files:
- removeFile(dname/file)
- echo fileExists(dname/file)
- removeDir(dname)
- echo dirExists(dname)
- # createDir should create recursive directories
- createDir(dirs[0] / dirs[1])
- echo dirExists(dirs[0] / dirs[1]) # true
- removeDir(dirs[0])
- # createDir should properly handle trailing separator
- createDir(dname / "")
- echo dirExists(dname) # true
- removeDir(dname)
- # createDir should raise IOError if the path exists
- # and is not a directory
- open(dname, fmWrite).close
- try:
- createDir(dname)
- except IOError:
- echo "Raises"
- removeFile(dname)
- # removeFile should not remove directory
- createDir(dname)
- try:
- removeFile(dname)
- except OSError:
- echo "Raises"
- removeDir(dname)
- # test copyDir:
- createDir("a/b")
- open("a/b/file.txt", fmWrite).close
- createDir("a/b/c")
- open("a/b/c/fileC.txt", fmWrite).close
- copyDir("a", "../dest/a")
- removeDir("a")
- echo dirExists("../dest/a/b")
- echo fileExists("../dest/a/b/file.txt")
- echo fileExists("../dest/a/b/c/fileC.txt")
- removeDir("../dest")
- # test copyDir:
- # if separator at the end of a path
- createDir("a/b")
- open("a/file.txt", fmWrite).close
- copyDir("a/", "../dest/a/")
- removeDir("a")
- echo dirExists("../dest/a/b")
- echo fileExists("../dest/a/file.txt")
- removeDir("../dest")
- import times
- block modificationTime:
- # Test get/set modification times
- # Should support at least microsecond resolution
- let tm = fromUnix(0) + 100.microseconds
- writeFile("a", "")
- setLastModificationTime("a", tm)
- when defined(macosx):
- echo "true"
- else:
- echo getLastModificationTime("a") == tm
- removeFile("a")
- block walkDirRec:
- createDir("walkdir_test/a/b")
- open("walkdir_test/a/b/file_1", fmWrite).close()
- open("walkdir_test/a/file_2", fmWrite).close()
- for p in walkDirRec("walkdir_test"):
- doAssert p.fileExists
- doAssert p.startsWith("walkdir_test")
- var s: seq[string]
- for p in walkDirRec("walkdir_test", {pcFile}, {pcDir}, relative=true):
- s.add(p)
- doAssert s.len == 2
- doAssert "a" / "b" / "file_1" in s
- doAssert "a" / "file_2" in s
- removeDir("walkdir_test")
- when not defined(windows):
- block walkDirRelative:
- createDir("walkdir_test")
- createSymlink(".", "walkdir_test/c")
- for k, p in walkDir("walkdir_test", true):
- doAssert k == pcLinkToDir
- removeDir("walkdir_test")
- block normalizedPath:
- doAssert normalizedPath("") == ""
- block relative:
- doAssert normalizedPath(".") == "."
- doAssert normalizedPath("foo/..") == "."
- doAssert normalizedPath("foo//../bar/.") == "bar"
- doAssert normalizedPath("..") == ".."
- doAssert normalizedPath("../") == ".."
- doAssert normalizedPath("../..") == unixToNativePath"../.."
- doAssert normalizedPath("../a/..") == ".."
- doAssert normalizedPath("../a/../") == ".."
- doAssert normalizedPath("./") == "."
- block absolute:
- doAssert normalizedPath("/") == unixToNativePath"/"
- doAssert normalizedPath("/.") == unixToNativePath"/"
- doAssert normalizedPath("/..") == unixToNativePath"/.."
- doAssert normalizedPath("/../") == unixToNativePath"/.."
- doAssert normalizedPath("/../..") == unixToNativePath"/../.."
- doAssert normalizedPath("/../../") == unixToNativePath"/../.."
- doAssert normalizedPath("/../../../") == unixToNativePath"/../../.."
- doAssert normalizedPath("/a/b/../../foo") == unixToNativePath"/foo"
- doAssert normalizedPath("/a/b/../../../foo") == unixToNativePath"/../foo"
- doAssert normalizedPath("/./") == unixToNativePath"/"
- doAssert normalizedPath("//") == unixToNativePath"/"
- doAssert normalizedPath("///") == unixToNativePath"/"
- doAssert normalizedPath("/a//b") == unixToNativePath"/a/b"
- doAssert normalizedPath("/a///b") == unixToNativePath"/a/b"
- doAssert normalizedPath("/a/b/c/..") == unixToNativePath"/a/b"
- doAssert normalizedPath("/a/b/c/../") == unixToNativePath"/a/b"
- block isHidden:
- when defined(posix):
- doAssert ".foo.txt".isHidden
- doAssert "bar/.foo.ext".isHidden
- doAssert: not "bar".isHidden
- doAssert: not "foo/".isHidden
- # Corner cases: paths are not normalized when determining `isHidden`
- doAssert: not ".foo/.".isHidden
- doAssert: not ".foo/..".isHidden
- block absolutePath:
- doAssertRaises(ValueError): discard absolutePath("a", "b")
- doAssert absolutePath("a") == getCurrentDir() / "a"
- doAssert absolutePath("a", "/b") == "/b" / "a"
- when defined(Posix):
- doAssert absolutePath("a", "/b/") == "/b" / "a"
- doAssert absolutePath("a", "/b/c") == "/b/c" / "a"
- doAssert absolutePath("/a", "b/") == "/a"
- block splitFile:
- doAssert splitFile("") == ("", "", "")
- doAssert splitFile("abc/") == ("abc", "", "")
- doAssert splitFile("/") == ("/", "", "")
- doAssert splitFile("./abc") == (".", "abc", "")
- doAssert splitFile(".txt") == ("", ".txt", "")
- doAssert splitFile("abc/.txt") == ("abc", ".txt", "")
- doAssert splitFile("abc") == ("", "abc", "")
- doAssert splitFile("abc.txt") == ("", "abc", ".txt")
- doAssert splitFile("/abc.txt") == ("/", "abc", ".txt")
- doAssert splitFile("/foo/abc.txt") == ("/foo", "abc", ".txt")
- doAssert splitFile("/foo/abc.txt.gz") == ("/foo", "abc.txt", ".gz")
- doAssert splitFile(".") == ("", ".", "")
- doAssert splitFile("abc/.") == ("abc", ".", "")
- doAssert splitFile("..") == ("", "..", "")
- doAssert splitFile("a/..") == ("a", "..", "")
|