diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2016-11-05 10:32:24 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2016-11-05 10:32:24 +0100 |
commit | 162f5ddb7d73f6e5abf284ea1f6b1cc4f68307ab (patch) | |
tree | 484f1bc0e481218842b0ec7d8aa6af741756b41f /tools | |
parent | 499ae7297bd7d106525a296312d1653e8bf80b7e (diff) | |
download | Nim-162f5ddb7d73f6e5abf284ea1f6b1cc4f68307ab.tar.gz |
nimsuggest tester supports editing of files
Diffstat (limited to 'tools')
-rw-r--r-- | tools/nimsuggest/tester.nim | 49 | ||||
-rw-r--r-- | tools/nimsuggest/tests/tdot2.nim | 29 |
2 files changed, 62 insertions, 16 deletions
diff --git a/tools/nimsuggest/tester.nim b/tools/nimsuggest/tester.nim index c3c20a5ba..b4e1f8f7f 100644 --- a/tools/nimsuggest/tester.nim +++ b/tools/nimsuggest/tester.nim @@ -7,7 +7,7 @@ import os, osproc, strutils, streams, re type Test = object - cmd: string + cmd, dest: string script: seq[(string, string)] const @@ -17,17 +17,17 @@ const proc parseTest(filename: string): Test = const cursorMarker = "#[!]#" let nimsug = curDir & addFileExt("nimsuggest", ExeExt) - let dest = getTempDir() / extractFilename(filename) - result.cmd = nimsug & " --tester " & dest + result.dest = getTempDir() / extractFilename(filename) + result.cmd = nimsug & " --tester " & result.dest result.script = @[] - var tmp = open(dest, fmWrite) + var tmp = open(result.dest, fmWrite) var specSection = 0 var markers = newSeq[string]() var i = 1 for x in lines(filename): let marker = x.find(cursorMarker)+1 if marker > 0: - markers.add "\"" & filename & "\";\"" & dest & "\":" & $i & ":" & $marker + markers.add "\"" & filename & "\";\"" & result.dest & "\":" & $i & ":" & $marker tmp.writeLine x.replace(cursorMarker, "") else: tmp.writeLine x @@ -36,6 +36,8 @@ proc parseTest(filename: string): Test = elif specSection == 1: if x.startsWith("$nimsuggest"): result.cmd = x % ["nimsuggest", nimsug, "file", filename] + elif x.startsWith("!edit"): + result.script.add((x, "")) elif x.startsWith(">"): # since 'markers' here are not complete yet, we do the $substitutions # afterwards @@ -50,6 +52,18 @@ proc parseTest(filename: string): Test = for a in mitems(result.script): a[0] = a[0] % markers +proc edit(tmpfile, cmd: string) = + let x = cmd.splitWhitespace() + let f = if x.len >= 4: x[3] else: tmpfile + try: + let content = readFile(f) + let newcontent = content.replace(x[1], x[2]) + if content == newcontent: + quit "wrong test case: edit had no effect" + writeFile(f, newcontent) + except IOError: + quit "cannot edit file " & tmpfile + proc smartCompare(pattern, x: string): bool = if pattern.contains('*'): result = match(x, re(escapeRe(pattern).replace("\\x2A","(.*)"), {})) @@ -69,17 +83,20 @@ proc runTest(filename: string): int = while outp.readLine(a): if a == DummyEof: break for req, resp in items(s.script): - inp.writeLine(req) - inp.flush() - var answer = "" - while outp.readLine(a): - if a == DummyEof: break - answer.add a - answer.add '\L' - if resp != answer and not smartCompare(resp, answer): - report.add "\nTest failed: " & filename - report.add "\n Expected: " & resp - report.add "\n But got: " & answer + if req.startsWith("!edit"): + edit(s.dest, req) + else: + inp.writeLine(req) + inp.flush() + var answer = "" + while outp.readLine(a): + if a == DummyEof: break + answer.add a + answer.add '\L' + if resp != answer and not smartCompare(resp, answer): + report.add "\nTest failed: " & filename + report.add "\n Expected: " & resp + report.add "\n But got: " & answer finally: inp.writeLine("quit") inp.flush() diff --git a/tools/nimsuggest/tests/tdot2.nim b/tools/nimsuggest/tests/tdot2.nim new file mode 100644 index 000000000..490e78451 --- /dev/null +++ b/tools/nimsuggest/tests/tdot2.nim @@ -0,0 +1,29 @@ +# Test that basic editing. We replace the 'false' by 'true' to +# see whether then the z field is suggested. + +const zField = 0i32 + +type + Foo = object + x, y: int + when zField == 1i32: + z: string + +proc main(f: Foo) = + f.#[!]# + +# the tester supports the spec section at the bottom of the file and +# this way, the line numbers more often stay the same +discard """ +$nimsuggest --tester $file +>sug $1 +sug;;skField;;x;;int;;$file;;8;;4;;"";;100 +sug;;skField;;y;;int;;$file;;8;;7;;"";;100 +sug;;skProc;;tdot2.main;;proc (f: Foo);;$file;;12;;5;;"";;100 +!edit 0i32 1i32 +>sug $1 +sug;;skField;;x;;int;;$file;;8;;4;;"";;100 +sug;;skField;;y;;int;;$file;;8;;7;;"";;100 +sug;;skField;;z;;string;;$file;;10;;6;;"";;100 +sug;;skProc;;tdot2.main;;proc (f: Foo);;$file;;12;;5;;"";;100 +""" |