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
parent f02e159b56
commit 70a30317f7
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

View File

@@ -1,6 +1,6 @@
discard """
cmd: "nim c --expandMacro:foo $file"
nimout: '''Hint: expanded macro:
nimout: '''texpandmacro.nim(17, 1) Hint: expanded macro:
echo ["injected echo"]
var x = 4 [ExpandMacro]
'''

View File

@@ -2,7 +2,7 @@ discard """
cmd: "nim check $file"
errormsg: "type mismatch: got <AsyncHttpServer, Port, proc (req: Request): Future[system.void]{.locks: <unknown>.}>"
nimout: '''
type mismatch: got <AsyncHttpServer, Port, proc (req: Request): Future[system.void]{.locks: <unknown>.}>
tgcsafety.nim(30, 18) Error: type mismatch: got <AsyncHttpServer, Port, proc (req: Request): Future[system.void]{.locks: <unknown>.}>
but expected one of:
proc serve(server: AsyncHttpServer; port: Port;
callback: proc (request: Request): Future[void] {.closure, gcsafe.};

View File

@@ -1,7 +1,7 @@
discard """
errormsg: "in expression ' do:"
nimout: '''
Error: in expression ' do:
twrongcolon.nim(11, 12) Error: in expression ' do:
890': identifier expected, but found ''
'''

View File

@@ -1,5 +1,5 @@
discard """
nimout: "Special variable 'result' is shadowed. [ResultShadowed]"
nimout: "tresultwarning.nim(6, 7) Warning: Special variable 'result' is shadowed. [ResultShadowed]"
"""
proc test(): string =

View File

@@ -1,5 +1,5 @@
discard """
nimout: "Warning: use explicit initialization of 'y' for clarity [Uninit]"
nimout: "tuninit1.nim(35, 11) Warning: use explicit initialization of 'y' for clarity [Uninit]"
line:34
action: compile
"""

View File

@@ -1,5 +1,5 @@
discard """
nimout: "Warning: cannot prove that field 'x.s' is accessible [ProveField]"
nimout: "tcheckedfield1.nim(40, 6) Warning: cannot prove that field 'x.s' is accessible [ProveField]"
line:51
action: run
output: "abc abc"

View File

@@ -0,0 +1,18 @@
discard """
disabled: windows
matrix: "--hint:processing"
nimout: '''
compile start
..
warn_module.nim(6, 6) Hint: 'test' is declared but not used [XDeclaredButNotUsed]
compile end
'''
"""
static:
echo "compile start"
import warn_module
static:
echo "compile end"

View File

@@ -1,8 +1,6 @@
discard """
matrix: "--hint:processing"
nimout: '''
compile start
..
warn_module.nim(6, 6) Hint: 'test' is declared but not used [XDeclaredButNotUsed]
compile end
'''

View File

@@ -1,6 +1,6 @@
discard """
targets: "c cpp js"
matrix: "; --gc:arc"
matrix: "--gc:refc; --gc:arc"
"""
from std/sugar import collect

View File

@@ -4,3 +4,8 @@ block: # greedyOrderedSubsetLines
doAssert greedyOrderedSubsetLines("a1\na3", "a0\na1\na2\na3\na4")
doAssert not greedyOrderedSubsetLines("a3\na1", "a0\na1\na2\na3\na4") # out of order
doAssert not greedyOrderedSubsetLines("a1\na5", "a0\na1\na2\na3\na4") # a5 not in lhs
doAssert not greedyOrderedSubsetLines("a1\na5", "a0\na1\na2\na3\na4\nprefix:a5")
doAssert not greedyOrderedSubsetLines("a1\na5", "a0\na1\na2\na3\na4\na5:suffix")
doAssert not greedyOrderedSubsetLines("a5", "a0\na1\na2\na3\na4\nprefix:a5")
doAssert not greedyOrderedSubsetLines("a5", "a0\na1\na2\na3\na4\na5:suffix")

View File

@@ -1,7 +1,7 @@
discard """
errormsg: "type mismatch: got <int>"
line: 17
nimout: '''type mismatch: got <int>
nimout: '''tprevent_forloopvar_mutations.nim(17, 7) Error: type mismatch: got <int>
but expected one of:
proc inc[T: Ordinal](x: var T; y = 1)
first type mismatch at position: 1

View File

@@ -1,12 +1,16 @@
discard """
nimout: '''2
nimout: '''
2
3
4:2
Got Hi
Got Hey
'''
output:'''
a
b
c'''
c
'''
"""
# bug #404

View File

@@ -19,6 +19,7 @@ foo4
(a: 0, b: 0)
'''
"""
import std/sets
#bug #1009
type
@@ -95,8 +96,6 @@ static: simpleTryFinally()
# bug #10981
import sets
proc main =
for i in 0..<15:
var someSets = @[initHashSet[int]()]