diff options
Diffstat (limited to 'tests/exception/t13115.nim')
-rw-r--r-- | tests/exception/t13115.nim | 46 |
1 files changed, 36 insertions, 10 deletions
diff --git a/tests/exception/t13115.nim b/tests/exception/t13115.nim index 53e078076..ee1daed26 100644 --- a/tests/exception/t13115.nim +++ b/tests/exception/t13115.nim @@ -1,12 +1,38 @@ -discard """ - exitcode: 1 - targets: "c" - matrix: "-d:debug; -d:release" - outputsub: ''' and works fine! [Exception]''' -""" +const msg = "This char is `" & '\0' & "` and works fine!" -# bug #13115 -# xxx bug: doesn't yet work for cpp +when defined nim_t13115: + # bug #13115 + template fn = + raise newException(Exception, msg) + when defined nim_t13115_static: + static: fn() + fn() +else: + import std/[osproc,strformat,os,strutils] + proc main = + const nim = getCurrentCompilerExe() + const file = currentSourcePath + for b in "c js cpp".split: + when defined(openbsd): + if b == "js": + # xxx bug: pending #13115 + # remove special case once nodejs updated >= 12.16.2 + # refs https://github.com/nim-lang/Nim/pull/16167#issuecomment-738270751 + continue -var msg = "This char is `" & '\0' & "` and works fine!" -raise newException(Exception, msg) + # save CI time by avoiding mostly redundant combinations as far as this bug is concerned + var opts = case b + of "c": @["", "-d:nim_t13115_static", "-d:danger", "-d:debug"] + of "js": @["", "-d:nim_t13115_static"] + else: @[""] + + for opt in opts: + let cmd = fmt"{nim} r -b:{b} -d:nim_t13115 {opt} --hints:off {file}" + let (outp, exitCode) = execCmdEx(cmd) + when defined windows: + # `\0` not preserved on windows + doAssert "` and works fine!" in outp, cmd & "\n" & msg + else: + doAssert msg in outp, cmd & "\n" & msg + doAssert exitCode == 1 + main() |