|
85 | 85 | name: string
|
86 | 86 | cat: Category
|
87 | 87 | options: string
|
88 |
| - args: seq[string] |
| 88 | + testArgs: seq[string] |
89 | 89 | spec: TSpec
|
90 | 90 | startTime: float
|
91 | 91 | debugInfo: string
|
@@ -154,24 +154,23 @@ proc nimcacheDir(filename, options: string, target: TTarget): string =
|
154 | 154 | let hashInput = options & $target
|
155 | 155 | result = "nimcache" / (filename & '_' & hashInput.getMD5)
|
156 | 156 |
|
157 |
| -proc prepareTestArgs(cmdTemplate, filename, options, nimcache: string, |
158 |
| - target: TTarget, extraOptions = ""): seq[string] = |
| 157 | +proc prepareTestCmd(cmdTemplate, filename, options, nimcache: string, |
| 158 | + target: TTarget, extraOptions = ""): string = |
159 | 159 | var options = target.defaultOptions & ' ' & options
|
160 |
| - # improve pending https://github.com/nim-lang/Nim/issues/14343 |
161 |
| - if nimcache.len > 0: options.add ' ' & ("--nimCache:" & nimcache).quoteShell |
| 160 | + if nimcache.len > 0: options.add(" --nimCache:$#" % nimcache.quoteShell) |
162 | 161 | options.add ' ' & extraOptions
|
163 |
| - result = parseCmdLine(cmdTemplate % ["target", targetToCmd[target], |
| 162 | + # we avoid using `parseCmdLine` which is buggy, refs bug #14343 |
| 163 | + result = cmdTemplate % ["target", targetToCmd[target], |
164 | 164 | "options", options, "file", filename.quoteShell,
|
165 |
| - "filedir", filename.getFileDir(), "nim", compilerPrefix]) |
| 165 | + "filedir", filename.getFileDir(), "nim", compilerPrefix] |
166 | 166 |
|
167 | 167 | proc callNimCompiler(cmdTemplate, filename, options, nimcache: string,
|
168 | 168 | target: TTarget, extraOptions = ""): TSpec =
|
169 |
| - let c = prepareTestArgs(cmdTemplate, filename, options, nimcache, target, |
| 169 | + result.cmd = prepareTestCmd(cmdTemplate, filename, options, nimcache, target, |
170 | 170 | extraOptions)
|
171 |
| - result.cmd = quoteShellCommand(c) |
172 |
| - verboseCmd(c.quoteShellCommand) |
173 |
| - var p = startProcess(command = c[0], args = c[1 .. ^1], |
174 |
| - options = {poStdErrToStdOut, poUsePath}) |
| 171 | + verboseCmd(result.cmd) |
| 172 | + var p = startProcess(command = result.cmd, |
| 173 | + options = {poStdErrToStdOut, poUsePath, poEvalCommand}) |
175 | 174 | let outp = p.outputStream
|
176 | 175 | var foundSuccessMsg = false
|
177 | 176 | var foundErrorMsg = false
|
@@ -224,9 +223,33 @@ proc callNimCompiler(cmdTemplate, filename, options, nimcache: string,
|
224 | 223 |
|
225 | 224 | proc callCCompiler(cmdTemplate, filename, options: string,
|
226 | 225 | target: TTarget): TSpec =
|
227 |
| - let c = prepareTestArgs(cmdTemplate, filename, options, nimcache = "", target) |
| 226 | + let cmd = prepareTestCmd(cmdTemplate, filename, options, nimcache = "", target) |
| 227 | + doAssert false |
| 228 | + #[ |
| 229 | + this code hasn't been run in a while, and should be removed which simplifies code |
| 230 | + there are better ways to do this anyways (e.g. running c code from a nim file) |
| 231 | + |
| 232 | + the only place where this is called is: |
| 233 | + `testC r, makeTest("tests/realtimeGC/cmain", cOptions, cat), actionRun` |
| 234 | + which isn't run unless you call: |
| 235 | + XDG_CONFIG_HOME= nim r --lib:lib --stacktrace:on testament/testament.nim r longgc |
| 236 | +
|
| 237 | + and this fails since at least nim 1.0 with: |
| 238 | + testament/testament.nim(851) testament |
| 239 | + testament/testament.nim(822) main |
| 240 | + testament/categories.nim(713) processCategory |
| 241 | + testament/categories.nim(189) longGCTests |
| 242 | + testament/testament.nim(644) makeTest |
| 243 | + testament/specs.nim(251) parseSpec |
| 244 | + testament/specs.nim(184) extractSpec |
| 245 | + lib/system/io.nim(861) readFile |
| 246 | + Error: unhandled exception: cannot open: tests/realtimeGC/cmain.nim [IOError] |
| 247 | +
|
| 248 | + Also, `c[5 .. ^1]` is too magical. |
| 249 | + ]# |
| 250 | + let c = cmd.parseCmdLine |
228 | 251 | var p = startProcess(command = "gcc", args = c[5 .. ^1],
|
229 |
| - options = {poStdErrToStdOut, poUsePath}) |
| 252 | + options = {poStdErrToStdOut, poUsePath, poEvalCommand}) |
230 | 253 | let outp = p.outputStream
|
231 | 254 | var x = newStringOfCap(120)
|
232 | 255 | result.nimout = ""
|
@@ -525,7 +548,7 @@ proc testSpecHelper(r: var TResults, test: var TTest, expected: TSpec,
|
525 | 548 | reExeNotFound)
|
526 | 549 | else:
|
527 | 550 | var exeCmd: string
|
528 |
| - var args = test.args |
| 551 | + var args = test.testArgs |
529 | 552 | if isJsTarget:
|
530 | 553 | exeCmd = nodejs
|
531 | 554 | # see D20210217T215950
|
|
0 commit comments