diff options
Diffstat (limited to 'tests/osproc')
-rw-r--r-- | tests/osproc/passenv.nim | 2 | ||||
-rw-r--r-- | tests/osproc/ta_in.nim | 9 | ||||
-rw-r--r-- | tests/osproc/ta_out.nim | 33 | ||||
-rw-r--r-- | tests/osproc/tafalse.nim | 7 | ||||
-rw-r--r-- | tests/osproc/tclose.nim | 8 | ||||
-rw-r--r-- | tests/osproc/texecps.nim | 4 | ||||
-rw-r--r-- | tests/osproc/texitcode.nim | 23 | ||||
-rw-r--r-- | tests/osproc/tnoexe.nim | 27 | ||||
-rw-r--r-- | tests/osproc/treadlines.nim | 23 | ||||
-rw-r--r-- | tests/osproc/tstderr.nim | 37 | ||||
-rw-r--r-- | tests/osproc/tstdin.nim | 17 | ||||
-rw-r--r-- | tests/osproc/tstdout.nim | 31 | ||||
-rw-r--r-- | tests/osproc/twaitforexit.nim | 38 |
13 files changed, 97 insertions, 162 deletions
diff --git a/tests/osproc/passenv.nim b/tests/osproc/passenv.nim index 815f7536f..40b1c3f7c 100644 --- a/tests/osproc/passenv.nim +++ b/tests/osproc/passenv.nim @@ -1,7 +1,7 @@ discard """ file: "passenv.nim" output: "123" - targets: "c c++ objc" + targets: "c cpp objc" """ import osproc, os, strtabs diff --git a/tests/osproc/ta_in.nim b/tests/osproc/ta_in.nim deleted file mode 100644 index fb294ec14..000000000 --- a/tests/osproc/ta_in.nim +++ /dev/null @@ -1,9 +0,0 @@ -discard """ -action: compile -""" - -# This file is prefixed with an "a", because other tests -# depend on it and it must be compiled first. -import strutils -let x = stdin.readLine() -echo x.parseInt + 5 diff --git a/tests/osproc/ta_out.nim b/tests/osproc/ta_out.nim deleted file mode 100644 index 01b78eb11..000000000 --- a/tests/osproc/ta_out.nim +++ /dev/null @@ -1,33 +0,0 @@ -discard """ -output: ''' -start ta_out -to stdout -to stdout -to stderr -to stderr -to stdout -to stdout -end ta_out -''' -""" - -echo "start ta_out" - -# This file is prefixed with an "a", because other tests -# depend on it and it must be compiled first. -stdout.writeLine("to stdout") -stdout.flushFile() -stdout.writeLine("to stdout") -stdout.flushFile() - -stderr.writeLine("to stderr") -stderr.flushFile() -stderr.writeLine("to stderr") -stderr.flushFile() - -stdout.writeLine("to stdout") -stdout.flushFile() -stdout.writeLine("to stdout") -stdout.flushFile() - -echo "end ta_out" diff --git a/tests/osproc/tafalse.nim b/tests/osproc/tafalse.nim deleted file mode 100644 index 05a0bfce9..000000000 --- a/tests/osproc/tafalse.nim +++ /dev/null @@ -1,7 +0,0 @@ -discard """ -exitcode: 1 -""" - -# 'tafalse.nim' to ensure it is compiled before texitcode.nim -import system -quit(QuitFailure) diff --git a/tests/osproc/tclose.nim b/tests/osproc/tclose.nim index d466b466a..1c99237c7 100644 --- a/tests/osproc/tclose.nim +++ b/tests/osproc/tclose.nim @@ -13,12 +13,12 @@ when defined(linux): let initCount = countFds() let p = osproc.startProcess("echo", options={poUsePath}) - assert countFds() == initCount + 3 + doAssert countFds() == initCount + 3 p.close - assert countFds() == initCount + doAssert countFds() == initCount let p1 = osproc.startProcess("echo", options={poUsePath}) discard p1.inputStream - assert countFds() == initCount + 3 + doAssert countFds() == initCount + 3 p.close - assert countFds() == initCount + doAssert countFds() == initCount diff --git a/tests/osproc/texecps.nim b/tests/osproc/texecps.nim index 10715fa0f..b818fe8eb 100644 --- a/tests/osproc/texecps.nim +++ b/tests/osproc/texecps.nim @@ -1,3 +1,7 @@ +discard """ +joinable: false +""" + import osproc, streams, strutils, os const NumberOfProcesses = 13 diff --git a/tests/osproc/texitcode.nim b/tests/osproc/texitcode.nim deleted file mode 100644 index 558017716..000000000 --- a/tests/osproc/texitcode.nim +++ /dev/null @@ -1,23 +0,0 @@ -discard """ - output: "" -""" - -import osproc, os - -const filename = when defined(Windows): "tafalse.exe" else: "tafalse" -let dir = getCurrentDir() / "tests" / "osproc" -doAssert fileExists(dir / filename) - -var p = startProcess(filename, dir) -doAssert(waitForExit(p) == QuitFailure) - -p = startProcess(filename, dir) -var running = true -while running: - running = running(p) -doAssert(waitForExit(p) == QuitFailure) - -# make sure that first call to running() after process exit returns false -p = startProcess(filename, dir) -os.sleep(500) -doAssert(not running(p)) diff --git a/tests/osproc/tnoexe.nim b/tests/osproc/tnoexe.nim new file mode 100644 index 000000000..19a3cca67 --- /dev/null +++ b/tests/osproc/tnoexe.nim @@ -0,0 +1,27 @@ +discard """ + output: '''true +true''' +""" + +import std/osproc + +const command = "lsaaa -lah" + +try: + let process = startProcess(command, options = {poUsePath}) + discard process.waitForExit() +except OSError as e: + echo e.errorCode != 0 + +# `poEvalCommand`, invokes the system shell to run the specified command +try: + let process = startProcess(command, options = {poUsePath, poEvalCommand}) + # linux + let exitCode = process.waitForExit() + echo exitCode != 0 +except OSError as e: + # Because the implementation of `poEvalCommand` on different platforms is inconsistent, + # Linux will not throw an exception, but Windows will throw an exception + + # windows + echo e.errorCode != 0 diff --git a/tests/osproc/treadlines.nim b/tests/osproc/treadlines.nim new file mode 100644 index 000000000..bb6a7f129 --- /dev/null +++ b/tests/osproc/treadlines.nim @@ -0,0 +1,23 @@ +discard """ + output: ''' +Error: cannot open 'a.nim' +Error: cannot open 'b.nim' +''' + targets: "c" +""" + +import osproc +from std/os import getCurrentCompilerExe + +var ps: seq[Process] # compile & run 2 progs in parallel +const nim = getCurrentCompilerExe() +for prog in ["a", "b"]: + ps.add startProcess(nim, "", + ["r", "--hint:Conf:off", "--hint:Processing:off", prog], + options = {poUsePath, poDaemon, poStdErrToStdOut}) + +for p in ps: + let (lines, exCode) = p.readLines + if exCode != 0: + for line in lines: echo line + p.close diff --git a/tests/osproc/tstderr.nim b/tests/osproc/tstderr.nim deleted file mode 100644 index 55b11eba5..000000000 --- a/tests/osproc/tstderr.nim +++ /dev/null @@ -1,37 +0,0 @@ -discard """ - output: ''' -start tstderr --------------------------------------- -to stderr -to stderr --------------------------------------- -''' -""" - -echo "start tstderr" - -import osproc, os, streams - -const filename = "ta_out".addFileExt(ExeExt) - -doAssert fileExists(getCurrentDir() / "tests" / "osproc" / filename) - -var p = startProcess(filename, getCurrentDir() / "tests" / "osproc", - options={}) - -try: - let stdoutStream = p.outputStream - let stderrStream = p.errorStream - var x = newStringOfCap(120) - var output = "" - while stderrStream.readLine(x.TaintedString): - output.add(x & "\n") - - echo "--------------------------------------" - stdout.flushFile() - stderr.write output - stderr.flushFile() - echo "--------------------------------------" - stdout.flushFile() -finally: - p.close() diff --git a/tests/osproc/tstdin.nim b/tests/osproc/tstdin.nim deleted file mode 100644 index 8579680ab..000000000 --- a/tests/osproc/tstdin.nim +++ /dev/null @@ -1,17 +0,0 @@ -discard """ - output: "10" -""" -import osproc, os, streams - -const filename = when defined(Windows): "ta_in.exe" else: "ta_in" - -doAssert fileExists(getCurrentDir() / "tests" / "osproc" / filename) - -var p = startProcess(filename, getCurrentDir() / "tests" / "osproc") -p.inputStream.write("5\n") -p.inputStream.flush() - -var line = "" - -while p.outputStream.readLine(line.TaintedString): - echo line diff --git a/tests/osproc/tstdout.nim b/tests/osproc/tstdout.nim deleted file mode 100644 index e3ed3986a..000000000 --- a/tests/osproc/tstdout.nim +++ /dev/null @@ -1,31 +0,0 @@ -discard """ - output: '''-------------------------------------- -start ta_out -to stdout -to stdout -to stderr -to stderr -to stdout -to stdout -end ta_out --------------------------------------- -''' -""" -import osproc, os, streams - -const filename = when defined(Windows): "ta_out.exe" else: "ta_out" - -doAssert fileExists(getCurrentDir() / "tests" / "osproc" / filename) - -var p = startProcess(filename, getCurrentDir() / "tests" / "osproc", - options={poStdErrToStdOut}) - -let outputStream = p.outputStream -var x = newStringOfCap(120) -var output = "" -while outputStream.readLine(x.TaintedString): - output.add(x & "\n") - -echo "--------------------------------------" -stdout.write output -echo "--------------------------------------" diff --git a/tests/osproc/twaitforexit.nim b/tests/osproc/twaitforexit.nim new file mode 100644 index 000000000..535faca63 --- /dev/null +++ b/tests/osproc/twaitforexit.nim @@ -0,0 +1,38 @@ +import std/[osproc, os, times] + +block: # bug #5091 + when defined(linux): + const filename = "false" + var p = startProcess(filename, options = {poStdErrToStdOut, poUsePath}) + os.sleep(1000) # make sure process has exited already + + let atStart = getTime() + const msWait = 2000 + + try: + discard waitForExit(p, msWait) + except OSError: + discard + + # check that we don't have to wait msWait milliseconds + doAssert(getTime() < atStart + milliseconds(msWait)) + +block: # bug #23825 + + # the sleep command might not be available in all Windows installations + + when defined(linux): + + var thr: array[0..99, Thread[int]] + + proc threadFunc(i: int) {.thread.} = + let sleepTime = float(i) / float(thr.len + 1) + doAssert sleepTime < 1.0 + let p = startProcess("sleep", workingDir = "", args = @[$sleepTime], options = {poUsePath, poParentStreams}) + # timeout = 1_000_000 seconds ~= 278 hours ~= 11.5 days + doAssert p.waitForExit(timeout=1_000_000_000) == 0 + + for i in low(thr)..high(thr): + createThread(thr[i], threadFunc, i) + + joinThreads(thr) |