mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
better tester
This commit is contained in:
@@ -43,12 +43,12 @@ proc annotateType*(n: PNode, t: PType) =
|
||||
n.typ = t
|
||||
for i in 0 .. <n.len:
|
||||
let field = x.n.ithField(i)
|
||||
if field.isNil: globalError n.info, "invalid " & $i & "th field"
|
||||
if field.isNil: globalError n.info, "invalid field at index " & $i
|
||||
else: annotateType(n.sons[i], field.typ)
|
||||
elif x.kind == tyTuple:
|
||||
n.typ = t
|
||||
for i in 0 .. <n.len:
|
||||
if i >= x.len: globalError n.info, "invalid " & $i & "th field"
|
||||
if i >= x.len: globalError n.info, "invalid field at index " & $i
|
||||
else: annotateType(n.sons[i], x.sons[i])
|
||||
elif x.kind == tyProc and x.callConv == ccClosure:
|
||||
n.typ = t
|
||||
|
||||
@@ -76,7 +76,7 @@ proc tryExec*(db: TDbConn, query: TSqlQuery,
|
||||
proc exec*(db: TDbConn, query: TSqlQuery, args: varargs[string, `$`]) {.
|
||||
tags: [FReadDB, FWriteDb].} =
|
||||
## executes the query and raises EDB if not successful.
|
||||
if not TryExec(db, query, args): dbError(db)
|
||||
if not tryExec(db, query, args): dbError(db)
|
||||
|
||||
proc newRow(L: int): TRow =
|
||||
newSeq(result, L)
|
||||
|
||||
@@ -49,10 +49,10 @@ proc createDb() =
|
||||
# """, [])
|
||||
|
||||
type
|
||||
MachineId* = distinct int64
|
||||
MachineId = distinct int64
|
||||
CommitId = distinct int64
|
||||
|
||||
proc `$`*(id: MachineId): string {.borrow.}
|
||||
proc `$`(id: MachineId): string {.borrow.}
|
||||
proc `$`(id: CommitId): string {.borrow.}
|
||||
|
||||
var
|
||||
@@ -61,7 +61,7 @@ var
|
||||
|
||||
proc `()`(cmd: string{lit}): string = cmd.execProcess.string.strip
|
||||
|
||||
proc getMachine*: MachineId =
|
||||
proc getMachine: MachineId =
|
||||
var name = "hostname"()
|
||||
if name.len == 0:
|
||||
name = when defined(posix): getenv"HOSTNAME".string
|
||||
|
||||
@@ -109,42 +109,46 @@ div.tabContent.hide { display: none; }
|
||||
proc td(s: string): string =
|
||||
result = "<td>" & s.substr(0, 200).XMLEncode & "</td>"
|
||||
|
||||
proc generateHtml*(filename: string) =
|
||||
proc getCommit(db: TDbConn, c: int): string =
|
||||
var commit = c
|
||||
for thisCommit in db.rows(sql"select id from [Commit] order by id desc"):
|
||||
if commit == 0: result = thisCommit[0]
|
||||
inc commit
|
||||
if result.isNil:
|
||||
quit "cannot determine commit " & $c
|
||||
|
||||
proc generateHtml*(filename: string, commit: int) =
|
||||
const selRow = """select name, category, target, action,
|
||||
expected, given, result
|
||||
from TestResult
|
||||
where [commit] = ? and machine = ?
|
||||
order by category"""
|
||||
from TestResult
|
||||
where [commit] = ? and machine = ?
|
||||
order by category"""
|
||||
var db = open(connection="testament.db", user="testament", password="",
|
||||
database="testament")
|
||||
# search for proper commit:
|
||||
let lastCommit = db.getCommit(commit)
|
||||
|
||||
var outfile = open(filename, fmWrite)
|
||||
outfile.write(HtmlBegin)
|
||||
let thisMachine = backend.getMachine()
|
||||
outfile.write()
|
||||
|
||||
let machine = db.getRow(sql"select name, os, cpu from machine where id = ?",
|
||||
thisMachine)
|
||||
outfile.write("<p><b>$#</b></p>" % machine.join(" "))
|
||||
let commit = db.getValue(sql"select hash from [Commit] where id = ?",
|
||||
lastCommit)
|
||||
let branch = db.getValue(sql"select branch from [Commit] where id = ?",
|
||||
lastCommit)
|
||||
outfile.write("<p><b>$# $#</b></p>" % [branch, commit])
|
||||
|
||||
# generate navigation:
|
||||
outfile.write("""<ul id="tabs">""")
|
||||
|
||||
for thisCommit in db.rows(sql"select id from [Commit] order by id desc"):
|
||||
let lastCommit = thisCommit[0]
|
||||
let commit = db.getValue(sql"select hash from [Commit] where id = ?",
|
||||
lastCommit)
|
||||
let branch = db.getValue(sql"select branch from [Commit] where id = ?",
|
||||
lastCommit)
|
||||
|
||||
outfile.writeln """<li><a href="#$#">$#: $#</a></li>""" % [
|
||||
lastCommit, branch, commit]
|
||||
for m in db.rows(sql"select id, name, os, cpu from Machine order by id"):
|
||||
outfile.writeln """<li><a href="#$#">$#: $#, $#</a></li>""" % m
|
||||
outfile.write("</ul>")
|
||||
|
||||
for thisCommit in db.rows(sql"select id from [Commit] order by id desc"):
|
||||
let lastCommit = thisCommit[0]
|
||||
outfile.write("""<div class="tabContent" id="$#">""" % lastCommit)
|
||||
for currentMachine in db.rows(sql"select id from Machine order by id"):
|
||||
let m = currentMachine[0]
|
||||
outfile.write("""<div class="tabContent" id="$#">""" % m)
|
||||
|
||||
outfile.write(TableHeader)
|
||||
for row in db.rows(sql(selRow), lastCommit, thisMachine):
|
||||
for row in db.rows(sql(selRow), lastCommit, m):
|
||||
outfile.write("<tr>")
|
||||
for x in row:
|
||||
outfile.write(x.td)
|
||||
|
||||
@@ -22,7 +22,9 @@ const
|
||||
Command:
|
||||
all run all tests
|
||||
c|category <category> run all the tests of a certain category
|
||||
html generate $1 from the database
|
||||
html [commit] generate $1 from the database; uses the latest
|
||||
commit or a specific one (use -1 for the commit
|
||||
before latest etc)
|
||||
Arguments:
|
||||
arguments are passed to the compiler
|
||||
Options:
|
||||
@@ -254,7 +256,9 @@ proc main() =
|
||||
p.next
|
||||
processCategory(r, cat, p.cmdLineRest.string)
|
||||
of "html":
|
||||
generateHtml(resultsFile)
|
||||
var commit = 0
|
||||
discard parseInt(p.cmdLineRest.string, commit)
|
||||
generateHtml(resultsFile, commit)
|
||||
else:
|
||||
quit usage
|
||||
|
||||
|
||||
Reference in New Issue
Block a user