Added recursive object printing. Bumped version up!

This commit is contained in:
Joey Payne 2015-07-13 19:03:38 -06:00
commit 74846335b5
3 changed files with 70 additions and 9 deletions

View file

@ -133,6 +133,7 @@ is this:
Condition: check(self.returnTrue()) Condition: check(self.returnTrue())
Where: Where:
self.returnTrue() -> false self.returnTrue() -> false
self -> ref UnitTestsNew(testObj: 90, name: UnitTestsNew, currentTestName: testMoreMore, testsPassed: 2, numTests: 4)
Location: test.nim; line 59 Location: test.nim; line 59
@ -153,12 +154,13 @@ is this:
Condition: check(self.returnTrue()) Condition: check(self.returnTrue())
Where: Where:
self.returnTrue() -> false self.returnTrue() -> false
self -> ref UnitTestsNew(testObj: 90, name: TestInherit, currentTestName: testMoreMore, testsPassed: 2, numTests: 4)
Location: test.nim; line 59 Location: test.nim; line 59
[Failed] testRaises [Failed] testRaises
Condition: checkRaises(OSError, self.raisesOs()) Condition: checkRaises(OSError, self.raisesOs())
Where: Where:
self.raisesOs() -> Exception self.raisesOs() -> SystemError
Location: test.nim; line 72 Location: test.nim; line 72
@ -184,30 +186,66 @@ is this:
Condition: check(self.returnTrue()) Condition: check(self.returnTrue())
Where: Where:
self.returnTrue() -> false self.returnTrue() -> false
self -> ref UnitTestsNew(testObj: 12345, name: MoreInheritance, currentTestName: testMoreMore, testsPassed: 1, numTests: 4)
Location: test.nim; line 59 Location: test.nim; line 59
[Failed] testRaises [Failed] testRaises
Condition: checkRaises(OSError, self.raisesOs()) Condition: checkRaises(OSError, self.raisesOs())
Where: Where:
self.raisesOs() -> Exception self.raisesOs() -> SystemError
Location: test.nim; line 72 Location: test.nim; line 72
[OK] testTestObj [OK] testTestObj
[OK] testNewObj [OK] testNewObj
[Failed] testRefObject
Condition: check(d == k)
Where:
k -> ref TestObj(t: 30)
d -> ref TestObj(t: 3)
Location: test.nim; line 123
[Failed] testObject
Condition: check(d == k)
Where:
k -> TestObj(t: 30)
d -> TestObj(t: 3)
Location: test.nim; line 138
[Failed] testComplexObject
Condition: check(x.isObj(p))
Where:
x.isObj(p) -> false
p -> 4
x -> Obj2(d: Obj1(e: Hey))
Location: test.nim; line 150
[Failed] testTuple
Condition: check(t == r)
Where:
r -> tuple Person(name: P, age: 3)
t -> tuple Person(name: Peter, age: 30)
Location: test.nim; line 161
[Failed] testComplex [Failed] testComplex
Condition: check(self.doStuff(a, s) == "5stuff" and self.doStuff(a, self.doStuff(a, self.doStuff(y, s))) == "something?") Condition: check(self.doStuff(a, s) == "5stuff" and self.doStuff(a, self.doStuff(a, self.doStuff(y, s))) == "something?")
Where: Where:
self.doStuff(a, s) -> 5stuff self.doStuff(a, s) -> 5stuff
a -> 5 a -> 5
self -> ref MoreInheritance(testObj: 12345, name: MoreInheritance, currentTestName: testComplex, testsPassed: 3, numTests: 12)
self.doStuff(a, self.doStuff(a, self.doStuff(y, s))) -> 5545stuff self.doStuff(a, self.doStuff(a, self.doStuff(y, s))) -> 5545stuff
y -> 45 y -> 45
s -> stuff s -> stuff
self.doStuff(y, s) -> 45stuff self.doStuff(y, s) -> 45stuff
self.doStuff(a, self.doStuff(y, s)) -> 545stuff self.doStuff(a, self.doStuff(y, s)) -> 545stuff
Location: test.nim; line 134 Location: test.nim; line 169
[3/8] tests passed for MoreInheritance. ---------------------------------------- [3/12] tests passed for MoreInheritance. ---------------------------------------
[Summary]
[8/24] tests passed.
``` ```
Notice that on failure, the test runner gives some useful information about the test in question. This is useful for determining why the test failed. Notice that on failure, the test runner gives some useful information about the test in question. This is useful for determining why the test failed.

View file

@ -35,11 +35,34 @@ proc `$`*[T](some:typedesc[T]): string = name(T)
proc `$`*(s: ref object): string = proc `$`*(s: ref object): string =
result = ($type(s)).replace(":ObjectType", "") & $s[] result = ($type(s)).replace(":ObjectType", "") & $s[]
proc objToStr*[T: object](obj: T): string = template tupleObjToStr(obj): string {.dirty.} =
result = $type(obj) & system.`$`(obj) var res = $type(obj)
template helper(n) {.gensym.} =
res.add("(")
var firstElement = true
for name, value in n.fieldPairs():
if not firstElement:
res.add(", ")
res.add(name)
res.add(": ")
when (value is object or value is tuple):
when (value is tuple):
res.add("tuple " & $type(value))
else:
res.add($type(value))
helper(value)
else:
res.add($value)
firstElement = false
res.add(")")
helper(obj)
res
proc objToStr*[T: object](obj: var T): string =
tupleObjToStr(obj)
proc objToStr*[T: tuple](obj: T): string = proc objToStr*[T: tuple](obj: T): string =
result = "tuple " & $type(obj) & system.`$`(obj) result = "tuple " & tupleObjToStr(obj)
macro toString*(obj: typed): untyped = macro toString*(obj: typed): untyped =
## this macro is to work around not being ## this macro is to work around not being

View file

@ -1,6 +1,6 @@
[Package] [Package]
name = "einheit" name = "einheit"
version = "0.1.3" version = "0.1.4"
author = "Joey Payne" author = "Joey Payne"
description = "Tool for providing unit tests. Einheit is German for Unit." description = "Tool for providing unit tests. Einheit is German for Unit."
license = "MIT" license = "MIT"