summary refs log tree commit diff stats
path: root/tests/stdlib/tos.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/stdlib/tos.nim')
-rw-r--r--tests/stdlib/tos.nim75
1 files changed, 75 insertions, 0 deletions
diff --git a/tests/stdlib/tos.nim b/tests/stdlib/tos.nim
index 771dc2456..10f439dfa 100644
--- a/tests/stdlib/tos.nim
+++ b/tests/stdlib/tos.nim
@@ -42,6 +42,8 @@ Raises
 true
 true
 true
+true
+
 '''
 """
 # test os path creation, iteration, and deletion
@@ -129,3 +131,76 @@ echo fileExists("../dest/a/b/file.txt")
 
 echo fileExists("../dest/a/b/c/fileC.txt")
 removeDir("../dest")
+
+# Test get/set modification times
+# Should support at least microsecond resolution
+import times
+let tm = fromUnix(0) + 100.microseconds
+writeFile("a", "")
+setLastModificationTime("a", tm)
+
+when defined(macosx):
+  echo "true"
+else:
+  echo getLastModificationTime("a") == tm
+removeFile("a")
+
+when defined(posix):
+
+  block normalizedPath:
+    block relative:
+      doAssert normalizedPath(".") == "."
+      doAssert normalizedPath("..") == ".."
+      doAssert normalizedPath("../") == ".."
+      doAssert normalizedPath("../..") == "../.."
+      doAssert normalizedPath("../a/..") == ".."
+      doAssert normalizedPath("../a/../") == ".."
+      doAssert normalizedPath("./") == "."
+
+    block absolute:
+      doAssert normalizedPath("/") == "/"
+      doAssert normalizedPath("/.") == "/"
+      doAssert normalizedPath("/..") == "/"
+      doAssert normalizedPath("/../") == "/"
+      doAssert normalizedPath("/../..") == "/"
+      doAssert normalizedPath("/../../") == "/"
+      doAssert normalizedPath("/../../../") == "/"
+      doAssert normalizedPath("/a/b/../../foo") == "/foo"
+      doAssert normalizedPath("/a/b/../../../foo") == "/foo"
+      doAssert normalizedPath("/./") == "/"
+      doAssert normalizedPath("//") == "/"
+      doAssert normalizedPath("///") == "/"
+      doAssert normalizedPath("/a//b") == "/a/b"
+      doAssert normalizedPath("/a///b") == "/a/b"
+      doAssert normalizedPath("/a/b/c/..") == "/a/b"
+      doAssert normalizedPath("/a/b/c/../") == "/a/b"
+
+else:
+
+  block normalizedPath:
+    block relative:
+      doAssert normalizedPath(".") == "."
+      doAssert normalizedPath("..") == ".."
+      doAssert normalizedPath("..\\") == ".."
+      doAssert normalizedPath("..\\..") == "..\\.."
+      doAssert normalizedPath("..\\a\\..") == ".."
+      doAssert normalizedPath("..\\a\\..\\") == ".."
+      doAssert normalizedPath(".\\") == "."
+
+    block absolute:
+      doAssert normalizedPath("\\") == "\\"
+      doAssert normalizedPath("\\.") == "\\"
+      doAssert normalizedPath("\\..") == "\\"
+      doAssert normalizedPath("\\..\\") == "\\"
+      doAssert normalizedPath("\\..\\..") == "\\"
+      doAssert normalizedPath("\\..\\..\\") == "\\"
+      doAssert normalizedPath("\\..\\..\\..\\") == "\\"
+      doAssert normalizedPath("\\a\\b\\..\\..\\foo") == "\\foo"
+      doAssert normalizedPath("\\a\\b\\..\\..\\..\\foo") == "\\foo"
+      doAssert normalizedPath("\\.\\") == "\\"
+      doAssert normalizedPath("\\\\") == "\\"
+      doAssert normalizedPath("\\\\\\") == "\\"
+      doAssert normalizedPath("\\a\\\\b") == "\\a\\b"
+      doAssert normalizedPath("\\a\\\\\\b") == "\\a\\b"
+      doAssert normalizedPath("\\a\\b\\c\\..") == "\\a\\b"
+      doAssert normalizedPath("\\a\\b\\c\\..\\") == "\\a\\b"