From 335c19c8692086ddb845af1b840b49e306c5179b Mon Sep 17 00:00:00 2001 From: Araq Date: Wed, 25 Feb 2015 12:59:19 +0100 Subject: tester reports ignored tests and supports 'nimout'; fixes #2211 --- compiler/vmdeps.nim | 3 ++- tests/macros/tmacrotypes.nim | 14 +++++++------- tests/macros/tnimnode_for_runtime.nim | 12 ++++++++++++ tests/macros/tnimrodnode_for_runtime.nim | 13 ------------- tests/macros/tsame_name_497.nim | 4 ++++ tests/macros/typesapi.nim | 17 +++++++++++++++++ tests/testament/specs.nim | 4 ++++ tests/testament/tester.nim | 15 ++++++++++++++- 8 files changed, 60 insertions(+), 22 deletions(-) create mode 100644 tests/macros/tnimnode_for_runtime.nim delete mode 100644 tests/macros/tnimrodnode_for_runtime.nim create mode 100644 tests/macros/typesapi.nim diff --git a/compiler/vmdeps.nim b/compiler/vmdeps.nim index c1a68dbcb..11d839c41 100644 --- a/compiler/vmdeps.nim +++ b/compiler/vmdeps.nim @@ -54,6 +54,7 @@ proc mapTypeToBracket(name: string; t: PType; info: TLineInfo): PNode = if t.sons[i] == nil: let void = atomicTypeX("void", t, info) void.typ = newType(tyEmpty, t.owner) + result.add void else: result.add mapTypeToAst(t.sons[i], info) @@ -105,7 +106,7 @@ proc mapTypeToAst(t: PType, info: TLineInfo; allowRecursion=false): PNode = of tyPtr: result = mapTypeToBracket("ptr", t, info) of tyRef: result = mapTypeToBracket("ref", t, info) of tyVar: result = mapTypeToBracket("var", t, info) - of tySequence: result = mapTypeToBracket("sequence", t, info) + of tySequence: result = mapTypeToBracket("seq", t, info) of tyProc: result = mapTypeToBracket("proc", t, info) of tyOpenArray: result = mapTypeToBracket("openArray", t, info) of tyRange: diff --git a/tests/macros/tmacrotypes.nim b/tests/macros/tmacrotypes.nim index f19aa2ddb..991668930 100644 --- a/tests/macros/tmacrotypes.nim +++ b/tests/macros/tmacrotypes.nim @@ -1,16 +1,16 @@ discard """ - disabled: true + nimout: '''void +int''' """ -import macros, typetraits +import macros -macro checkType(ex, expected: expr): stmt {.immediate.} = - var t = ex.typ - assert t.name == expected.strVal +macro checkType(ex: stmt; expected: expr): stmt = + var t = ex.getType() + echo t proc voidProc = echo "hello" -proc intProc(a, b): int = 10 +proc intProc(a: int, b: float): int = 10 checkType(voidProc(), "void") checkType(intProc(10, 20.0), "int") -checkType(noproc(10, 20.0), "Error Type") diff --git a/tests/macros/tnimnode_for_runtime.nim b/tests/macros/tnimnode_for_runtime.nim new file mode 100644 index 000000000..69c7aedd2 --- /dev/null +++ b/tests/macros/tnimnode_for_runtime.nim @@ -0,0 +1,12 @@ +discard """ + output: "bla" +""" + +import macros +proc makeMacro: PNimrodNode = + result = nil + +var p = makeMacro() + +echo "bla" + diff --git a/tests/macros/tnimrodnode_for_runtime.nim b/tests/macros/tnimrodnode_for_runtime.nim deleted file mode 100644 index e73c8430f..000000000 --- a/tests/macros/tnimrodnode_for_runtime.nim +++ /dev/null @@ -1,13 +0,0 @@ -discard """ - output: "bla" - disabled: true -""" - -import macros -proc makeMacro: PNimrodNode = - result = nil - -var p = makeMacro() - -echo "bla" - diff --git a/tests/macros/tsame_name_497.nim b/tests/macros/tsame_name_497.nim index e49f9f6d8..ed5d5c6d8 100644 --- a/tests/macros/tsame_name_497.nim +++ b/tests/macros/tsame_name_497.nim @@ -1,3 +1,7 @@ +discard """ + disabled: true +""" + import macro_bug type TObj = object diff --git a/tests/macros/typesapi.nim b/tests/macros/typesapi.nim new file mode 100644 index 000000000..670b39c9e --- /dev/null +++ b/tests/macros/typesapi.nim @@ -0,0 +1,17 @@ +discard """ + nimout: '''proc (x: int): string => typeDesc[proc[string, int]] +proc (x: int): void => typeDesc[proc[void, int]] +proc (x: int) => typeDesc[proc[void, int]]''' +""" + +#2211 + +import macros + +macro showType(t:stmt): stmt = + let ty = t.getType + echo t.repr, " => ", ty.repr + +showType(proc(x:int): string) +showType(proc(x:int): void) +showType(proc(x:int)) diff --git a/tests/testament/specs.nim b/tests/testament/specs.nim index e079eed62..2a8a4ea24 100644 --- a/tests/testament/specs.nim +++ b/tests/testament/specs.nim @@ -48,6 +48,7 @@ type err*: TResultEnum substr*, sortoutput*: bool targets*: set[TTarget] + nimout*: string const targetToExt*: array[TTarget, string] = ["c", "cpp", "m", "js"] @@ -94,6 +95,7 @@ proc parseSpec*(filename: string): TSpec = result.file = filename result.msg = "" result.outp = "" + result.nimout = "" result.ccodeCheck = "" result.cmd = cmdTemplate parseSpecAux: @@ -124,6 +126,8 @@ proc parseSpec*(filename: string): TSpec = of "errormsg": result.msg = e.value result.action = actionReject + of "nimout": + result.nimout = e.value of "disabled": if parseCfgBool(e.value): result.err = reIgnored of "cmd": result.cmd = e.value diff --git a/tests/testament/tester.nim b/tests/testament/tester.nim index 45643be10..881a41ce6 100644 --- a/tests/testament/tester.nim +++ b/tests/testament/tester.nim @@ -64,7 +64,9 @@ proc callCompiler(cmdTemplate, filename, options: string, var suc = "" var err = "" var x = newStringOfCap(120) + result.nimout = "" while outp.readLine(x.TaintedString) or running(p): + result.nimout.add(x & "\n") if x =~ pegOfInterest: # `err` should contain the last error/warning message err = x @@ -112,7 +114,9 @@ proc addResult(r: var TResults, test: TTest, expected = expected, given = given) r.data.addf("$#\t$#\t$#\t$#", name, expected, given, $success) - if success notin {reSuccess, reIgnored}: + if success == reIgnored: + styledEcho styleBright, name, fgYellow, " [", $success, "]" + elif success != reSuccess: styledEcho styleBright, name, fgRed, " [", $success, "]" echo"Expected:" styledEcho styleBright, expected @@ -151,6 +155,13 @@ proc codegenCheck(test: TTest, check: string, given: var TSpec) = except IOError: given.err = reCodeNotFound +proc nimoutCheck(test: TTest; expectedNimout: string; given: var TSpec) = + if expectedNimout.len > 0: + let exp = expectedNimout.strip.replace("\C\L", "\L") + let giv = given.nimout.strip.replace("\C\L", "\L") + if exp notin giv: + given.err = reMsgsDiffer + proc makeDeterministic(s: string): string = var x = splitLines(s) sort(x, system.cmp) @@ -172,6 +183,7 @@ proc testSpec(r: var TResults, test: TTest) = test.target) if given.err == reSuccess: codegenCheck(test, expected.ccodeCheck, given) + nimoutCheck(test, expected.nimout, given) r.addResult(test, "", given.msg, given.err) if given.err == reSuccess: inc(r.passed) of actionRun: @@ -205,6 +217,7 @@ proc testSpec(r: var TResults, test: TTest) = given.err = reOutputsDiffer if given.err == reSuccess: codeGenCheck(test, expected.ccodeCheck, given) + nimoutCheck(test, expected.nimout, given) if given.err == reSuccess: inc(r.passed) r.addResult(test, expected.outp, buf.string, given.err) else: -- cgit 1.4.1-2-gfad0