forked from quag/iospec2
/
spec.io
79 lines (66 loc) · 1.59 KB
/
spec.io
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
AssertionFailed := Exception clone
Object verify := method(
if(self doMessage(call argAt(0), call sender),
self
,
AssertionFailed raise(call argAt(0) code)
)
)
BodyContext := Object clone do(
newSlot("setupMessage", Message)
newSlot("teardownMessage", Message)
setup := method(
setupMessage = call argAt(0)
)
teardown := method(
teardownMessage = call argAt(0)
)
)
describe := method(
if(call argCount == 1,
stateSlotName := nil
describedState := call evalArgAt(0) type
bodyMessage := call argAt(1)
,
stateSlotName := call argAt(0) name
describedState := call evalArgAt(1) type
bodyMessage := call argAt(2)
)
bodyContext := BodyContext clone
if(stateSlotName,
bodyContext setSlot(stateSlotName,
method(shouldName,
Lobby exampleCount = exampleCount + 1
testContext := Object clone
e := try(
setupMessage doInContext(testContext)
call argAt(1) doInContext(testContext)
teardownMessage doInContext(testContext)
)
if(e,
failureErrors append(e)
writeln(" - ", shouldName, " [Error ", failureErrors size, "]")
,
writeln(" - ", shouldName)
)
)
)
)
writeln(describedState)
bodyMessage doInContext(bodyContext)
)
exampleCount := 0
failureErrors := list
writeln
time := Date cpuSecondsToRun(
doFile(args at(1))
)
writeln
failureErrors foreach(i, error,
write("Error ", i + 1, ":")
error showStack
)
failureCount := failureErrors size
writeln("Finished in ", time, " seconds")
writeln
writeln(exampleCount, if(exampleCount == 1, " example, ", " examples, "), failureCount, if(failureCount == 1, " failure", " failures"))