summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/pure/logging.nim2
-rw-r--r--lib/pure/strutils.nim2
-rw-r--r--lib/pure/unittest.nim2
-rw-r--r--lib/system.nim1
-rw-r--r--tests/osproc/ta.nim3
-rw-r--r--tests/osproc/ta_in.nim5
-rw-r--r--tests/osproc/ta_out.nim16
-rw-r--r--tests/osproc/tstdin.nim2
-rw-r--r--tests/osproc/tstdout.nim29
9 files changed, 56 insertions, 6 deletions
diff --git a/lib/pure/logging.nim b/lib/pure/logging.nim
index 5544a4b3f..65724f75a 100644
--- a/lib/pure/logging.nim
+++ b/lib/pure/logging.nim
@@ -46,6 +46,8 @@
 ##
 ## **Warning:** The global list of handlers is a thread var, this means that
 ## the handlers must be re-added in each thread.
+## **Warning:** When logging on disk or console, only error and fatal messages
+## are flushed out immediately. Use flushFile() where needed.
 
 import strutils, times
 when not defined(js):
diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim
index 9c205a54f..9c9da92c6 100644
--- a/lib/pure/strutils.nim
+++ b/lib/pure/strutils.nim
@@ -898,7 +898,7 @@ proc toHex*(x: BiggestInt, len: Positive): string {.noSideEffect,
 
 proc toHex*[T](x: T): string =
   ## Shortcut for ``toHex(x, T.sizeOf * 2)``
-  toHex(x, T.sizeOf * 2)
+  toHex(BiggestInt(x), T.sizeOf * 2)
 
 proc intToStr*(x: int, minchars: Positive = 1): string {.noSideEffect,
   rtl, extern: "nsuIntToStr".} =
diff --git a/lib/pure/unittest.nim b/lib/pure/unittest.nim
index cdca02ed7..01af0f839 100644
--- a/lib/pure/unittest.nim
+++ b/lib/pure/unittest.nim
@@ -24,7 +24,7 @@
 ##       echo "run before each test"
 ##
 ##     teardown:
-##       echo "run after each test":
+##       echo "run after each test"
 ##
 ##     test "essential truths":
 ##       # give up and stop if this fails
diff --git a/lib/system.nim b/lib/system.nim
index bab5369f1..6388e278e 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -2743,6 +2743,7 @@ when not defined(JS): #and not defined(nimscript):
       # we use binary mode on Windows:
       c_setmode(c_fileno(stdin), O_BINARY)
       c_setmode(c_fileno(stdout), O_BINARY)
+      c_setmode(c_fileno(stderr), O_BINARY)
 
     when defined(endb):
       proc endbStep()
diff --git a/tests/osproc/ta.nim b/tests/osproc/ta.nim
deleted file mode 100644
index 5ebcc7f14..000000000
--- a/tests/osproc/ta.nim
+++ /dev/null
@@ -1,3 +0,0 @@
-import strutils
-let x = stdin.readLine()
-echo x.parseInt + 5
diff --git a/tests/osproc/ta_in.nim b/tests/osproc/ta_in.nim
new file mode 100644
index 000000000..b46890f6e
--- /dev/null
+++ b/tests/osproc/ta_in.nim
@@ -0,0 +1,5 @@
+# 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
new file mode 100644
index 000000000..f7091a7f6
--- /dev/null
+++ b/tests/osproc/ta_out.nim
@@ -0,0 +1,16 @@
+# 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()
diff --git a/tests/osproc/tstdin.nim b/tests/osproc/tstdin.nim
index b491c2500..d94c34192 100644
--- a/tests/osproc/tstdin.nim
+++ b/tests/osproc/tstdin.nim
@@ -4,7 +4,7 @@ discard """
 """
 import osproc, os, streams
 
-const filename = when defined(Windows): "ta.exe" else: "ta"
+const filename = when defined(Windows): "ta_in.exe" else: "ta_in"
 
 doAssert fileExists(getCurrentDir() / "tests" / "osproc" / filename)
 
diff --git a/tests/osproc/tstdout.nim b/tests/osproc/tstdout.nim
new file mode 100644
index 000000000..0cb5bd9c0
--- /dev/null
+++ b/tests/osproc/tstdout.nim
@@ -0,0 +1,29 @@
+discard """
+  output: '''--------------------------------------
+to stdout
+to stdout
+to stderr
+to stderr
+to stdout
+to stdout
+--------------------------------------
+'''
+"""
+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 "--------------------------------------"