fix #16693: testament spec nimout too lax (#16698)

Co-authored-by: Timothee Cour <timothee.cour2@gmail.com>
This commit is contained in:
flywind 2021-04-05 04:47:28 +08:00 • committed by GitHub
commit 70a30317f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
28 changed files with 103 additions and 52 deletions

View file

@ -1,5 +1,4 @@
import std/private/miscdollars
import std/strutils
from std/os import getEnv
template flakyAssert*(cond: untyped, msg = "", notifySuccess = true) =
@ -26,15 +25,29 @@ template flakyAssert*(cond: untyped, msg = "", notifySuccess = true) =
msg2.add $expr & " " & msg
echo msg2
proc greedyOrderedSubsetLines*(lhs, rhs: string): bool =
## returns true if each stripped line in `lhs` appears in rhs, using a greedy matching.
let rhs = rhs.strip
var currentPos = 0
for line in lhs.strip.splitLines:
currentPos = rhs.find(line.strip, currentPos)
if currentPos < 0:
return false
return true
when not defined(js):
import std/strutils
proc greedyOrderedSubsetLines*(lhs, rhs: string): bool =
## Returns true if each stripped line in `lhs` appears in rhs, using a greedy matching.
iterator splitLinesClosure(): string {.closure.} =
for line in splitLines(rhs.strip):
yield line
var rhsIter = splitLinesClosure
var currentLine = strip(rhsIter())
for line in lhs.strip.splitLines:
let line = line.strip
if line.len != 0:
while line != currentLine:
currentLine = strip(rhsIter())
if rhsIter.finished:
return false
if rhsIter.finished:
return false
return true
template enableRemoteNetworking*: bool =
## Allows contolling whether to run some test at a statement-level granularity.

View file

@ -1,5 +1,6 @@
discard """
ccodecheck: "baz"
targets: "c"
ccodecheck: "baz"
"""
proc foo(): void {.exportc: "bar".}=

View file

@ -1,7 +1,8 @@
discard """
errormsg: "undeclared identifier: 'undeclared'"
line: 8
column: 7
errormsg: "undeclared identifier: 'undeclared'"
targets: "c"
line: 9
column: 7
"""
# test should fail because the line directive is wrong

View file

@ -1,7 +1,8 @@
discard """
errormsg: "wrong error message"
line: 8
column: 6
errormsg: "wrong error message"
targets: "c"
line: 9
column: 6
"""
# test should fail because the line directive is wrong

View file

@ -1,3 +1,4 @@
discard """
exitcode: 1
targets: "c"
exitcode: 1
"""

View file

@ -1,6 +1,7 @@
discard """
errormsg: "undeclared identifier: 'undefined'"
file: "notthisfile.nim"
targets: "c"
errormsg: "undeclared identifier: 'undefined'"
file: "notthisfile.nim"
"""
echo undefined

View file

@ -1,7 +1,8 @@
discard """
errormsg: "undeclared identifier: 'undeclared'"
line: 9
column: 6
targets: "c"
errormsg: "undeclared identifier: 'undeclared'"
line: 10
column: 6
"""
# test should fail because the line directive is wrong

View file

@ -1,5 +1,6 @@
discard """
maxcodesize: 1
targets: "c"
maxcodesize: 1
"""
echo "Hello World"

View file

@ -1,6 +1,7 @@
discard """
nimout: "Hello World!"
action: compile
targets: "c"
nimout: "Hello World!"
action: compile
"""
static:

View file

@ -1,7 +1,8 @@
discard """
output: '''
done
'''
targets: "c"
output: '''
done
'''
"""
echo "broken"

View file

@ -1,5 +1,6 @@
discard """
outputsub: "something else"
outputsub: "something else"
targets: "c"
"""
echo "Hello World!"

View file

@ -1,5 +1,6 @@
discard """
action: "reject"
action: "reject"
targets: "c"
"""
# Because we set action="reject", we expect this line not to compile. But the

View file

@ -1,9 +1,10 @@
discard """
sortoutput: true
output: '''
2
1
'''
sortoutput: true
targets: "c"
output: '''
2
1
'''
"""
# this test should ensure that the output is actually sorted

View file

@ -1,5 +1,6 @@
discard """
timeout: "0.1"
targets: "c"
"""
import os

View file

@ -1,6 +1,7 @@
discard """
valgrind: true
cmd: "nim $target --gc:arc -d:useMalloc $options $file"
valgrind: true
targets: "c"
cmd: "nim $target --gc:arc -d:useMalloc $options $file"
"""
# this is the same check used by testament/specs.nim whether or not valgrind