diff --git a/tests/trunner.nim b/tests/trunner.nim index 86b256262cce1..f71c324a23901 100644 --- a/tests/trunner.nim +++ b/tests/trunner.nim @@ -6,7 +6,7 @@ discard """ ## tests that don't quite fit the mold and are easier to handle via `execCmdEx` ## A few others could be added to here to simplify code. -import std/[strformat,os,osproc,strutils] +import std/[strformat,os,osproc] const nim = getCurrentCompilerExe() @@ -25,22 +25,36 @@ proc runCmd(file, options = ""): auto = when defined(nimHasLibFFIEnabled): block: # mevalffi - let (output, exitCode) = runCmd("vm/mevalffi.nim", "--experimental:compiletimeFFI") - let expected = """ + when defined(openbsd): + #[ + openbsd defines `#define stderr (&__sF[2])` which makes it cumbersome + for dlopen'ing inside `importcSymbol`. Instead of adding special rules + inside `importcSymbol` to handle this, we disable just the part that's + not working and will provide a more general, clean fix in future PR. + ]# + var opt = "-d:nimEvalffiStderrWorkaround" + let prefix = "" + else: + var opt = "" + let prefix = """ hello world stderr hi stderr -foo +""" + let (output, exitCode) = runCmd("vm/mevalffi.nim", fmt"{opt} --experimental:compiletimeFFI") + let expected = fmt""" +{prefix}foo foo:100 foo:101 foo:102:103 foo:102:103:104 foo:0.03:asdf:103:105 -ret={s1:foobar s2:foobar age:25 pi:3.14} +ret=[s1:foobar s2:foobar age:25 pi:3.14] """ doAssert output == expected, output doAssert exitCode == 0 else: # don't run twice the same test + import std/[strutils] template check(msg) = doAssert msg in output, output block: # mstatic_assert diff --git a/tests/vm/mevalffi.nim b/tests/vm/mevalffi.nim index cce4bc64e9592..ad8f8b62b53c8 100644 --- a/tests/vm/mevalffi.nim +++ b/tests/vm/mevalffi.nim @@ -42,7 +42,7 @@ proc fun() = let num = c_snprintf(buffer2, n, "s1:%s s2:%s age:%d pi:%g", s, s, age, 3.14) let numExp = 34 doAssert num == numExp - c_printf("ret={%s}\n", buffer2) + c_printf("ret=[%s]\n", buffer2) c_free(buffer2) block: # c_printf bug @@ -61,10 +61,11 @@ static: fun() fun() -import system/ansi_c -block: - proc fun2()= - c_fprintf(cstderr, "hello world stderr\n") - write(stderr, "hi stderr\n") - static: fun2() - fun2() +when not defined nimEvalffiStderrWorkaround: + import system/ansi_c + block: + proc fun2()= + c_fprintf(cstderr, "hello world stderr\n") + write(stderr, "hi stderr\n") + static: fun2() + fun2()