summary refs log tree commit diff stats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/stdlib/tos.nim207
1 files changed, 113 insertions, 94 deletions
diff --git a/tests/stdlib/tos.nim b/tests/stdlib/tos.nim
index 829e35c7b..c10f7036b 100644
--- a/tests/stdlib/tos.nim
+++ b/tests/stdlib/tos.nim
@@ -53,124 +53,125 @@ true
 
 import os, strutils
 
-let files = @["these.txt", "are.x", "testing.r", "files.q"]
-let dirs = @["some", "created", "test", "dirs"]
+block fileOperations:
+  let files = @["these.txt", "are.x", "testing.r", "files.q"]
+  let dirs = @["some", "created", "test", "dirs"]
 
-let dname = "__really_obscure_dir_name"
+  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)
+  createDir(dname)
+  echo dirExists(dname)
 
-for file in files:
-  let fh = open(dname/file, fmReadWrite)
-  fh.close()
-  echo fileExists(dname/file)
+  # Test creating files and dirs
+  for dir in dirs:
+    createDir(dname/dir)
+    echo dirExists(dname/dir)
 
-echo "All:"
+  for file in files:
+    let fh = open(dname/file, fmReadWrite)
+    fh.close()
+    echo fileExists(dname/file)
 
-template norm(x): untyped =
-  (when defined(windows): x.replace('\\', '/') else: x)
+  echo "All:"
 
-for path in walkPattern(dname/"*"):
-  echo path.norm
+  template norm(x): untyped =
+    (when defined(windows): x.replace('\\', '/') else: x)
 
-echo "Files:"
+  for path in walkPattern(dname/"*"):
+    echo path.norm
 
-for path in walkFiles(dname/"*"):
-  echo path.norm
+  echo "Files:"
 
-echo "Dirs:"
+  for path in walkFiles(dname/"*"):
+    echo path.norm
 
-for path in walkDirs(dname/"*"):
-  echo path.norm
+  echo "Dirs:"
 
-# Test removal of files dirs
-for dir in dirs:
-  removeDir(dname/dir)
-  echo dirExists(dname/dir)
+  for path in walkDirs(dname/"*"):
+    echo path.norm
 
-for file in files:
-  removeFile(dname/file)
-  echo fileExists(dname/file)
+  # Test removal of files dirs
+  for dir in dirs:
+    removeDir(dname/dir)
+    echo dirExists(dname/dir)
 
-removeDir(dname)
-echo dirExists(dname)
+  for file in files:
+    removeFile(dname/file)
+    echo fileExists(dname/file)
 
-# createDir should create recursive directories
-createDir(dirs[0] / dirs[1])
-echo dirExists(dirs[0] / dirs[1]) # true
-removeDir(dirs[0])
+  removeDir(dname)
+  echo dirExists(dname)
 
-# createDir should properly handle trailing separator
-createDir(dname / "")
-echo dirExists(dname) # true
-removeDir(dname)
+  # createDir should create recursive directories
+  createDir(dirs[0] / dirs[1])
+  echo dirExists(dirs[0] / dirs[1]) # true
+  removeDir(dirs[0])
 
-# 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)
+  # createDir should properly handle trailing separator
+  createDir(dname / "")
+  echo dirExists(dname) # true
+  removeDir(dname)
 
-# removeFile should not remove directory
-createDir(dname)
-try:
+  # 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)
-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")
+  # removeFile should not remove directory
+  createDir(dname)
+  try:
+    removeFile(dname)
+  except OSError:
+    echo "Raises"
+  removeDir(dname)
 
-echo dirExists("../dest/a/b")
-echo fileExists("../dest/a/b/file.txt")
+  # test copyDir:
+  createDir("a/b")
+  open("a/b/file.txt", fmWrite).close
+  createDir("a/b/c")
+  open("a/b/c/fileC.txt", fmWrite).close
 
-echo fileExists("../dest/a/b/c/fileC.txt")
-removeDir("../dest")
+  copyDir("a", "../dest/a")
+  removeDir("a")
 
-# test copyDir:
-# if separator at the end of a path
-createDir("a/b")
-open("a/file.txt", fmWrite).close
+  echo dirExists("../dest/a/b")
+  echo fileExists("../dest/a/b/file.txt")
 
-copyDir("a/", "../dest/a/")
-removeDir("a")
+  echo fileExists("../dest/a/b/c/fileC.txt")
+  removeDir("../dest")
 
-echo dirExists("../dest/a/b")
-echo fileExists("../dest/a/file.txt")
-removeDir("../dest")
+  # test copyDir:
+  # if separator at the end of a path
+  createDir("a/b")
+  open("a/file.txt", fmWrite).close
 
-# Test get/set modification times
-# Should support at least microsecond resolution
-import times
-let tm = fromUnix(0) + 100.microseconds
-writeFile("a", "")
-setLastModificationTime("a", tm)
+  copyDir("a/", "../dest/a/")
+  removeDir("a")
 
-when defined(macosx):
-  echo "true"
-else:
-  echo getLastModificationTime("a") == tm
-removeFile("a")
+  echo dirExists("../dest/a/b")
+  echo fileExists("../dest/a/file.txt")
+  removeDir("../dest")
 
-when defined(posix):
-
-  block normalizedPath:
+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 normalizedPath:
+  when defined(posix):
     block relative:
       doAssert normalizedPath(".") == "."
       doAssert normalizedPath("..") == ".."
@@ -198,9 +199,7 @@ when defined(posix):
       doAssert normalizedPath("/a/b/c/..") == "/a/b"
       doAssert normalizedPath("/a/b/c/../") == "/a/b"
 
-else:
-
-  block normalizedPath:
+  else:
     block relative:
       doAssert normalizedPath(".") == "."
       doAssert normalizedPath("..") == ".."
@@ -227,3 +226,23 @@ else:
       doAssert normalizedPath("\\a\\\\\\b") == "\\a\\b"
       doAssert normalizedPath("\\a\\b\\c\\..") == "\\a\\b"
       doAssert normalizedPath("\\a\\b\\c\\..\\") == "\\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"
+