-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathparachute.lisp
80 lines (64 loc) · 2.57 KB
/
parachute.lisp
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
80
(defpackage #:slite/parachute
(:use #:cl
#:alexandria)
(:import-from #:parachute
#:test-result
#:parent-result
#:result)
(:import-from #:slite
#:test-case
#:test-result-list))
(in-package #:slite/parachute)
(defclass fake-test-result ()
((test-case :accessor parent-test-result
:initarg :test-case)
(parachute-result :accessor parachute-result
:initarg :parachute-result))
(:documentation "Simulates TEST-RESULT and TEST-CASE from FiveAM"))
(defmethod test-result-list ((result result))
nil)
(defmethod test-case ((result fake-test-result))
(parachute:expression (parent-test-result result)))
(defmethod test-result-list ((result test-result))
(loop for x across (parachute:results result)
unless (typep x 'test-result)
collect (make-instance 'fake-test-result
:test-case result
:parachute-result x)))
(defmethod test-result-list ((result parent-result))
(loop for x across (parachute:results result)
appending (test-result-list x)))
(defmethod slite:test-result-success-p ((result fake-test-result))
(ecase (parachute:status (parachute-result result))
(:failed nil)
(:passed t)))
(defmethod slite:test-case-package ((result parachute:test))
(package-name (parachute:home result)))
(defmethod slite:test-name ((test parachute:test))
(parachute:name test))
(defmethod slite:test-expression ((result fake-test-result))
(format nil "~S"
(parachute:expression (parachute-result result))))
(defmethod slite:test-message ((fake-result fake-test-result))
(let ((result (parachute-result fake-result)))
(or
(parachute:description result)
(format nil "Failed: ~S" (slite:test-expression fake-result)))))
(defun guess-parachute (result)
(when (typep result 'parachute:result)
:parachute))
(pushnew 'guess-parachute slite/api:*framework-guessors*)
(defmethod slite/api:rerun-in-debugger ((framework (eql :parachute))
name
package)
(declare (ignore framework))
;; name could be either string or symbol, but it looks like
;; parachute:find-test can handle both correctly
(parachute:test (parachute:find-test name package)
:report 'parachute:interactive)
(values))
(defmethod slite/api:rem-test ((framework (eql :parachute))
name
package)
(parachute:remove-test
(find-symbol name package)))