summary refs log tree commit diff stats
path: root/tests/tester.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tester.nim')
-rwxr-xr-xtests/tester.nim204
1 files changed, 0 insertions, 204 deletions
diff --git a/tests/tester.nim b/tests/tester.nim
deleted file mode 100755
index 1c21e7afc..000000000
--- a/tests/tester.nim
+++ /dev/null
@@ -1,204 +0,0 @@
-#
-#
-#            Nimrod Tester
-#        (c) Copyright 2011 Andreas Rumpf
-#
-#    See the file "copying.txt", included in this
-#    distribution, for details about the copyright.
-#
-
-## This program verifies Nimrod against the testcases.
-
-import
-  strutils, pegs, os, osproc, streams, parsecsv, browsers
-
-const
-  cmdTemplate = r"nimrod cc --hints:on $# $#"
-  resultsFile = "testresults.html"
-
-type
-  TMsg = tuple[
-    file: string,
-    line: int,       
-    msg: string,
-    err: bool]
-  TOutp = tuple[file, outp: string]
-  TResults = object
-    total, passed: int
-    data: string
-
-proc myExec(cmd: string): string =
-  result = osproc.execProcess(cmd)
-
-var
-  pegLineError = peg"{[^(]*} '(' {\d+} ', ' \d+ ') Error:' \s* {.*}"
-  pegOtherError = peg"'Error:' \s* {.*}"
-  pegSuccess = peg"'Hint: operation successful'.*"
-  pegOfInterest = pegLineError / pegOtherError / pegSuccess
-
-proc callCompiler(filename, options: string): TMsg =
-  var c = parseCmdLine(cmdTemplate % [options, filename])
-  var a: seq[string] = @[] # slicing is not yet implemented :-(
-  for i in 1 .. c.len-1: add(a, c[i])
-  var p = startProcess(command=c[0], args=a,
-                       options={poStdErrToStdOut, poUseShell})
-  var outp = p.outputStream
-  var s = ""
-  while running(p) or not outp.atEnd(outp):
-    var x = outp.readLine()
-    if x =~ pegOfInterest:
-      # `s` should contain the last error message
-      s = x
-  result.msg = ""
-  result.file = ""
-  result.err = true    
-  result.line = -1
-  if s =~ pegLineError:
-    result.file = extractFilename(matches[0])
-    result.line = parseInt(matches[1])
-    result.msg = matches[2]
-  elif s =~ pegOtherError:
-    result.msg = matches[0]
-  elif s =~ pegSuccess:
-    result.err = false
-
-proc setupCvsParser(csvFile: string): TCsvParser = 
-  var s = newFileStream(csvFile, fmRead)
-  if s == nil: quit("cannot open the file" & csvFile)
-  result.open(s, csvFile, separator=';', skipInitialSpace=true)
-
-proc parseRejectData(dir: string): seq[TMsg] = 
-  var p = setupCvsParser(dir / "spec.csv")
-  result = @[]
-  while readRow(p, 3):
-    result.add((p.row[0], parseInt(p.row[1]), p.row[2], true))
-  close(p)
-
-proc parseRunData(dir: string): seq[TOutp] = 
-  var p = setupCvsParser(dir / "spec.csv")
-  result = @[]
-  while readRow(p, 2):
-    result.add((p.row[0], p.row[1]))
-  close(p)
-
-proc findSpec[T](specs: seq[T], filename: string): int = 
-  while result < specs.len:
-    if specs[result].file == filename: return
-    inc(result)
-  quit("cannot find spec for file: " & filename)
-
-proc initResults: TResults = 
-  result.total = 0
-  result.passed = 0
-  result.data = ""
-
-proc `$`(x: TResults): string = 
-  result = "Tests passed: " & $x.passed & "/" & $x.total & "<br />\n"
-
-proc colorBool(b: bool): string =
-  if b: result = "<span style=\"color:green\">yes</span>" 
-  else: result = "<span style=\"color:red\">no</span>"
-
-const
-  TableHeader4 = "<table border=\"1\"><tr><td>Test</td><td>Expected</td>" &
-                 "<td>Given</td><td>Success</td></tr>\n"
-  TableHeader3 = "<table border=\"1\"><tr><td>Test</td>" &
-                 "<td>Given</td><td>Success</td></tr>\n"
-  TableFooter = "</table>\n"
-
-proc addResult(r: var TResults, test, expected, given: string,
-               success: bool) =
-  r.data.addf("<tr><td>$#</td><td>$#</td><td>$#</td><td>$#</td></tr>\n", [
-    test, expected, given, success.colorBool])
-
-proc addResult(r: var TResults, test, given: string,
-               success: bool) =
-  r.data.addf("<tr><td>$#</td><td>$#</td><td>$#</td></tr>\n", [
-    test, given, success.colorBool])
-
-proc listResults(reject, compile, run: TResults) =
-  var s = "<html>"
-  s.add("<h1>Tests to Reject</h1>\n")
-  s.add($reject)
-  s.add(TableHeader4 & reject.data & TableFooter)
-  s.add("<br /><br /><br /><h1>Tests to Compile</h1>\n")
-  s.add($compile)
-  s.add(TableHeader3 & compile.data & TableFooter)
-  s.add("<br /><br /><br /><h1>Tests to Run</h1>\n")
-  s.add($run)
-  s.add(TableHeader4 & run.data & TableFooter)
-  s.add("</html>")
-  var outp: TFile
-  if open(outp, resultsFile, fmWrite):
-    write(outp, s)
-    close(outp)
-
-proc cmpMsgs(r: var TResults, expected, given: TMsg, test: string) = 
-  inc(r.total)
-  if strip(expected.msg) notin strip(given.msg):
-    r.addResult(test, expected.msg, given.msg, false)
-  elif expected.file != given.file:
-    r.addResult(test, expected.file, given.file, false)
-  elif expected.line != given.line: 
-    r.addResult(test, $expected.line, $given.line, false)
-  else:
-    r.addResult(test, expected.msg, given.msg, true)
-    inc(r.passed)
-
-proc reject(r: var TResults, dir, options: string) =  
-  ## handle all the tests that the compiler should reject
-  var specs = parseRejectData(dir)
-  
-  for test in os.walkFiles(dir / "t*.nim"):
-    var t = extractFilename(test)
-    inc(r.total)
-    echo t
-    var expected = findSpec(specs, t)
-    var given = callCompiler(test, options)
-    cmpMsgs(r, specs[expected], given, t)
-  
-proc compile(r: var TResults, pattern, options: string) = 
-  for test in os.walkFiles(pattern): 
-    var t = extractFilename(test)
-    inc(r.total)
-    echo t
-    var given = callCompiler(test, options)
-    r.addResult(t, given.msg, not given.err)
-    if not given.err: inc(r.passed)
-  
-proc run(r: var TResults, dir, options: string) = 
-  var specs = parseRunData(dir)
-  for test in os.walkFiles(dir / "t*.nim"): 
-    var t = extractFilename(test)
-    inc(r.total)
-    echo t
-    var given = callCompiler(test, options)
-    if given.err:
-      r.addResult(t, "", given.msg, not given.err)
-    else:
-      var exeFile = changeFileExt(test, ExeExt)
-      var expected = specs[findSpec(specs, t)]
-      if existsFile(exeFile):
-        var buf = myExec(exeFile)
-        var success = strip(buf) == strip(expected.outp)
-        if success: inc(r.passed)
-        r.addResult(t, expected.outp, buf, success)
-      else:
-        r.addResult(t, expected.outp, "executable not found", false)
-
-var options = ""
-var rejectRes = initResults()
-var compileRes = initResults()
-var runRes = initResults()
-  
-for i in 1.. paramCount():
-  add(options, " ")
-  add(options, paramStr(i))
-
-reject(rejectRes, "tests/reject", options)
-compile(compileRes, "tests/accept/compile/t*.nim", options)
-compile(compileRes, "examples/*.nim", options)
-compile(compileRes, "examples/gtk/*.nim", options)
-run(runRes, "tests/accept/run", options)
-listResults(rejectRes, compileRes, runRes)
-openDefaultBrowser(resultsFile)