summary refs log tree commit diff stats
path: root/tests/stdlib/tenvvars.nim
diff options
context:
space:
mode:
authorflywind <xzsflywind@gmail.com>2022-01-20 20:55:19 +0800
committerGitHub <noreply@github.com>2022-01-20 13:55:19 +0100
commit4a38092ac1f8368cb1ebb0245c99c701963662f8 (patch)
tree7614567f8c1886f1f4bcd1d5e39877f2630439b2 /tests/stdlib/tenvvars.nim
parentce44cf03cc4a78741c423b2b3963b48b6d9e6755 (diff)
downloadNim-4a38092ac1f8368cb1ebb0245c99c701963662f8.tar.gz
Added `std/envvars` for env vars handling (#19421)
Diffstat (limited to 'tests/stdlib/tenvvars.nim')
-rw-r--r--tests/stdlib/tenvvars.nim59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/stdlib/tenvvars.nim b/tests/stdlib/tenvvars.nim
new file mode 100644
index 000000000..406aa3230
--- /dev/null
+++ b/tests/stdlib/tenvvars.nim
@@ -0,0 +1,59 @@
+discard """
+  matrix: "--threads:on"
+  joinable: false
+  targets: "c js cpp"
+"""
+
+import std/envvars
+from std/sequtils import toSeq
+import stdtest/testutils
+
+template main =
+  block: # delEnv, existsEnv, getEnv, envPairs
+    for val in ["val", ""]: # ensures empty val works too
+      const key = "NIM_TESTS_TOSENV_KEY"
+      doAssert not existsEnv(key)
+
+      putEnv(key, "tempval")
+      doAssert existsEnv(key)
+      doAssert getEnv(key) == "tempval"
+
+      putEnv(key, val) # change a key that already exists
+      doAssert existsEnv(key)
+      doAssert getEnv(key) == val
+
+      doAssert (key, val) in toSeq(envPairs())
+      delEnv(key)
+      doAssert (key, val) notin toSeq(envPairs())
+      doAssert not existsEnv(key)
+      delEnv(key) # deleting an already deleted env var
+      doAssert not existsEnv(key)
+
+    block:
+      doAssert getEnv("NIM_TESTS_TOSENV_NONEXISTENT", "") == ""
+      doAssert getEnv("NIM_TESTS_TOSENV_NONEXISTENT", " ") == " "
+      doAssert getEnv("NIM_TESTS_TOSENV_NONEXISTENT", "defval") == "defval"
+
+    whenVMorJs: discard # xxx improve
+    do:
+      doAssertRaises(OSError, putEnv("NIM_TESTS_TOSENV_PUT=DUMMY_VALUE", "NEW_DUMMY_VALUE"))
+      doAssertRaises(OSError, putEnv("", "NEW_DUMMY_VALUE"))
+      doAssert not existsEnv("")
+      doAssert not existsEnv("NIM_TESTS_TOSENV_PUT=DUMMY_VALUE")
+      doAssert not existsEnv("NIM_TESTS_TOSENV_PUT")
+
+main()
+
+when not defined(js) and not defined(nimscript):
+  block: # bug #18533
+    proc c_getenv(env: cstring): cstring {.importc: "getenv", header: "<stdlib.h>".}
+    var thr: Thread[void]
+    proc threadFunc {.thread.} = putEnv("foo", "fooVal2")
+
+    putEnv("foo", "fooVal1")
+    doAssert getEnv("foo") == "fooVal1"
+    createThread(thr, threadFunc)
+    joinThreads(thr)
+    doAssert getEnv("foo") == $c_getenv("foo")
+
+    doAssertRaises(OSError): delEnv("foo=bar")