clucumber 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/README.md +4 -9
- data/lib/clucumber/clucumber-bootstrap.lisp +32 -0
- data/lib/clucumber/vendor/cl-interpol/alias.lisp +55 -0
- data/lib/clucumber/vendor/cl-interpol/cl-interpol.asd +56 -0
- data/lib/clucumber/vendor/cl-interpol/load.lisp +53 -0
- data/lib/clucumber/vendor/cl-interpol/packages.lisp +40 -0
- data/lib/clucumber/vendor/cl-interpol/read.lisp +716 -0
- data/lib/clucumber/vendor/cl-interpol/specials.lisp +113 -0
- data/lib/clucumber/vendor/cl-interpol/test/packages.lisp +34 -0
- data/lib/clucumber/vendor/cl-interpol/test/tests.lisp +128 -0
- data/lib/clucumber/vendor/cl-interpol/test.lisp +177 -0
- data/lib/clucumber/vendor/cl-interpol/test2.lisp +6254 -0
- data/lib/clucumber/vendor/cl-interpol/unicode.lisp +13912 -0
- data/lib/clucumber/vendor/cl-interpol/util.lisp +122 -0
- data/lib/clucumber/vendor/cl-ppcre/api.lisp +1262 -0
- data/lib/clucumber/vendor/cl-ppcre/charmap.lisp +152 -0
- data/lib/clucumber/vendor/cl-ppcre/charset.lisp +242 -0
- data/lib/clucumber/vendor/cl-ppcre/chartest.lisp +98 -0
- data/lib/clucumber/vendor/cl-ppcre/cl-ppcre-test.asd +34 -0
- data/lib/clucumber/vendor/cl-ppcre/cl-ppcre-unicode/packages.lisp +38 -0
- data/lib/clucumber/vendor/cl-ppcre/cl-ppcre-unicode/resolver.lisp +61 -0
- data/lib/clucumber/vendor/cl-ppcre/cl-ppcre-unicode.asd +58 -0
- data/lib/clucumber/vendor/cl-ppcre/cl-ppcre.asd +79 -0
- data/lib/clucumber/vendor/cl-ppcre/closures.lisp +471 -0
- data/lib/clucumber/vendor/cl-ppcre/convert.lisp +875 -0
- data/lib/clucumber/vendor/cl-ppcre/errors.lisp +84 -0
- data/lib/clucumber/vendor/cl-ppcre/lexer.lisp +737 -0
- data/lib/clucumber/vendor/cl-ppcre/lispworks-defsystem.lisp +57 -0
- data/lib/clucumber/vendor/cl-ppcre/load.lisp +67 -0
- data/lib/clucumber/vendor/cl-ppcre/optimize.lisp +578 -0
- data/lib/clucumber/vendor/cl-ppcre/packages.lisp +68 -0
- data/lib/clucumber/vendor/cl-ppcre/parser.lisp +319 -0
- data/lib/clucumber/vendor/cl-ppcre/ppcre-tests.lisp +269 -0
- data/lib/clucumber/vendor/cl-ppcre/regex-class-util.lisp +555 -0
- data/lib/clucumber/vendor/cl-ppcre/regex-class.lisp +259 -0
- data/lib/clucumber/vendor/cl-ppcre/repetition-closures.lisp +833 -0
- data/lib/clucumber/vendor/cl-ppcre/scanner.lisp +506 -0
- data/lib/clucumber/vendor/cl-ppcre/specials.lisp +172 -0
- data/lib/clucumber/vendor/cl-ppcre/test/packages.lisp +37 -0
- data/lib/clucumber/vendor/cl-ppcre/test/perl-tests.lisp +150 -0
- data/lib/clucumber/vendor/cl-ppcre/test/tests.lisp +159 -0
- data/lib/clucumber/vendor/cl-ppcre/test/unicode-tests.lisp +80 -0
- data/lib/clucumber/vendor/cl-ppcre/util.lisp +201 -0
- data/lib/clucumber/vendor/cl-unicode/alias.lisp +135 -0
- data/lib/clucumber/vendor/cl-unicode/api.lisp +412 -0
- data/lib/clucumber/vendor/cl-unicode/build/char-info.lisp +133 -0
- data/lib/clucumber/vendor/cl-unicode/build/dump.lisp +239 -0
- data/lib/clucumber/vendor/cl-unicode/build/read.lisp +280 -0
- data/lib/clucumber/vendor/cl-unicode/build/util.lisp +182 -0
- data/lib/clucumber/vendor/cl-unicode/cl-unicode.asd +90 -0
- data/lib/clucumber/vendor/cl-unicode/conditions.lisp +54 -0
- data/lib/clucumber/vendor/cl-unicode/derived.lisp +120 -0
- data/lib/clucumber/vendor/cl-unicode/hash-tables.lisp +20 -0
- data/lib/clucumber/vendor/cl-unicode/lists.lisp +10 -0
- data/lib/clucumber/vendor/cl-unicode/methods.lisp +15 -0
- data/lib/clucumber/vendor/cl-unicode/packages.lisp +76 -0
- data/lib/clucumber/vendor/cl-unicode/specials.lisp +135 -0
- data/lib/clucumber/vendor/cl-unicode/test/packages.lisp +34 -0
- data/lib/clucumber/vendor/cl-unicode/test/tests.lisp +150 -0
- data/lib/clucumber/vendor/cl-unicode/test-functions.lisp +94 -0
- data/lib/clucumber/vendor/cl-unicode/util.lisp +274 -0
- data/lib/clucumber/vendor/lift/compare/fiveam-tests.lisp +14 -0
- data/lib/clucumber/vendor/lift/compare/lift-tests.lisp +13 -0
- data/lib/clucumber/vendor/lift/compare/rt-tests.lisp +16 -0
- data/lib/clucumber/vendor/lift/compare/xlunit-tests.lisp +15 -0
- data/lib/clucumber/vendor/lift/dev/changes.lisp +61 -0
- data/lib/clucumber/vendor/lift/dev/config.lisp +354 -0
- data/lib/clucumber/vendor/lift/dev/copy-file.lisp +117 -0
- data/lib/clucumber/vendor/lift/dev/introspection.lisp +232 -0
- data/lib/clucumber/vendor/lift/dev/lift-interface.lisp +56 -0
- data/lib/clucumber/vendor/lift/dev/lift-notes.lisp +202 -0
- data/lib/clucumber/vendor/lift/dev/lift-randomized.lisp +45 -0
- data/lib/clucumber/vendor/lift/dev/lift.lisp +2383 -0
- data/lib/clucumber/vendor/lift/dev/macros.lisp +229 -0
- data/lib/clucumber/vendor/lift/dev/measuring.lisp +156 -0
- data/lib/clucumber/vendor/lift/dev/packages.lisp +161 -0
- data/lib/clucumber/vendor/lift/dev/port.lisp +151 -0
- data/lib/clucumber/vendor/lift/dev/prototypes.lisp +282 -0
- data/lib/clucumber/vendor/lift/dev/random-testing.lisp +124 -0
- data/lib/clucumber/vendor/lift/dev/report-locations.lisp +13 -0
- data/lib/clucumber/vendor/lift/dev/reports.lisp +916 -0
- data/lib/clucumber/vendor/lift/dev/utilities.lisp +242 -0
- data/lib/clucumber/vendor/lift/docs/package.lisp +6 -0
- data/lib/clucumber/vendor/lift/docs/setup.lisp +17 -0
- data/lib/clucumber/vendor/lift/examples/basic-examples.lisp +289 -0
- data/lib/clucumber/vendor/lift/examples/random-testing.lisp +32 -0
- data/lib/clucumber/vendor/lift/lift-documentation.asd +28 -0
- data/lib/clucumber/vendor/lift/lift-test.asd +35 -0
- data/lib/clucumber/vendor/lift/lift.asd +77 -0
- data/lib/clucumber/vendor/lift/test/equality-tests.lisp +40 -0
- data/lib/clucumber/vendor/lift/test/finding-tests.lisp +32 -0
- data/lib/clucumber/vendor/lift/test/lift-test.lisp +783 -0
- data/lib/clucumber/vendor/lift/test/order-of-operations.lisp +54 -0
- data/lib/clucumber/vendor/lift/test/packages.lisp +17 -0
- data/lib/clucumber/vendor/lift/test/test-config-files.lisp +20 -0
- data/lib/clucumber/vendor/lift/test/test-dynamic-variables.lisp +57 -0
- data/lib/clucumber/vendor/lift/test/test-maximum-problems.lisp +74 -0
- data/lib/clucumber/vendor/lift/test/test-prototypes.lisp +278 -0
- data/lib/clucumber/vendor/lift/test/test-timeout.lisp +37 -0
- data/lib/clucumber/vendor/lift/test/tests-in-progress.lisp +62 -0
- data/lib/clucumber/vendor/lift/test/testsuite-expects.lisp +60 -0
- data/lib/clucumber/vendor/lift/timeout/package.lisp +13 -0
- data/lib/clucumber/vendor/lift/timeout/with-timeout.lisp +123 -0
- data/lib/clucumber/vendor/lift/website/stuff/Temp.lisp +34 -0
- data/lib/clucumber/vendor/st-json/st-json.asd +3 -0
- data/lib/clucumber/vendor/st-json/st-json.lisp +310 -0
- data/lib/clucumber/vendor/trivial-backtrace/dev/backtrace.lisp +127 -0
- data/lib/clucumber/vendor/trivial-backtrace/dev/fallback.lisp +10 -0
- data/lib/clucumber/vendor/trivial-backtrace/dev/map-backtrace.lisp +103 -0
- data/lib/clucumber/vendor/trivial-backtrace/dev/mucking.lisp +75 -0
- data/lib/clucumber/vendor/trivial-backtrace/dev/packages.lisp +13 -0
- data/lib/clucumber/vendor/trivial-backtrace/dev/utilities.lisp +104 -0
- data/lib/clucumber/vendor/trivial-backtrace/test/packages.lisp +5 -0
- data/lib/clucumber/vendor/trivial-backtrace/test/test-setup.lisp +4 -0
- data/lib/clucumber/vendor/trivial-backtrace/test/tests.lisp +16 -0
- data/lib/clucumber/vendor/trivial-backtrace/trivial-backtrace-test.asd +22 -0
- data/lib/clucumber/vendor/trivial-backtrace/trivial-backtrace.asd +35 -0
- data/lib/clucumber/vendor/usocket/backend/allegro.lisp +199 -0
- data/lib/clucumber/vendor/usocket/backend/armedbear.lisp +491 -0
- data/lib/clucumber/vendor/usocket/backend/clisp.lisp +260 -0
- data/lib/clucumber/vendor/usocket/backend/cmucl.lisp +266 -0
- data/lib/clucumber/vendor/usocket/backend/lispworks.lisp +741 -0
- data/lib/clucumber/vendor/usocket/backend/mcl.lisp +369 -0
- data/lib/clucumber/vendor/usocket/backend/openmcl.lisp +206 -0
- data/lib/clucumber/vendor/usocket/backend/sbcl.lisp +424 -0
- data/lib/clucumber/vendor/usocket/backend/scl.lisp +261 -0
- data/lib/clucumber/vendor/usocket/condition.lisp +227 -0
- data/lib/clucumber/vendor/usocket/package.lisp +82 -0
- data/lib/clucumber/vendor/usocket/server.lisp +45 -0
- data/lib/clucumber/vendor/usocket/test/package.lisp +13 -0
- data/lib/clucumber/vendor/usocket/test/test-usocket.lisp +166 -0
- data/lib/clucumber/vendor/usocket/usocket-test.asd +26 -0
- data/lib/clucumber/vendor/usocket/usocket.asd +37 -0
- data/lib/clucumber/vendor/usocket/usocket.lisp +542 -0
- data/lib/clucumber/vendor/usocket/vendor/kqueue.lisp +1 -0
- data/lib/clucumber/vendor/usocket/vendor/split-sequence.lisp +245 -0
- data/lib/clucumber.rb +29 -7
- metadata +151 -5
@@ -0,0 +1,242 @@
|
|
1
|
+
(in-package #:lift)
|
2
|
+
|
3
|
+
;; stolen from metatilities
|
4
|
+
(defun form-symbol-in-package (package &rest names)
|
5
|
+
"Finds or interns a symbol in package whose name is formed by concatenating the pretty printed representation of the names together."
|
6
|
+
(with-standard-io-syntax
|
7
|
+
(let ((*package* package))
|
8
|
+
(intern (format nil "~{~a~}" names)
|
9
|
+
package))))
|
10
|
+
|
11
|
+
(defun form-symbol (&rest names)
|
12
|
+
"Finds or interns a symbol in the current package whose name is formed by concatenating the pretty printed representation of the names together."
|
13
|
+
(apply #'form-symbol-in-package *package* names))
|
14
|
+
|
15
|
+
(defun form-keyword (&rest names)
|
16
|
+
"Finds or interns a symbol in the current package whose name is formed by concatenating the pretty printed representation of the names together."
|
17
|
+
(apply #'form-symbol-in-package
|
18
|
+
(load-time-value (find-package :keyword)) names))
|
19
|
+
|
20
|
+
;; borrowed from asdf
|
21
|
+
(defun pathname-sans-name+type (pathname)
|
22
|
+
"Returns a new pathname with same HOST, DEVICE, DIRECTORY as PATHNAME,
|
23
|
+
and NIL NAME and TYPE components"
|
24
|
+
(make-pathname :name nil :type nil :defaults pathname))
|
25
|
+
|
26
|
+
(defun pathname-has-device-p (pathname)
|
27
|
+
(and (or (stringp pathname) (pathnamep pathname))
|
28
|
+
(not (member (pathname-device pathname) '(nil :unspecific)))))
|
29
|
+
|
30
|
+
(defun pathname-has-host-p (pathname)
|
31
|
+
(and (or (stringp pathname) (pathnamep pathname))
|
32
|
+
(not (member (pathname-host pathname) '(nil :unspecific)))))
|
33
|
+
|
34
|
+
(defun relative-pathname (relative-to pathname &key name type)
|
35
|
+
(let ((directory (pathname-directory pathname)))
|
36
|
+
(when (eq (car directory) :absolute)
|
37
|
+
(setf directory (copy-list directory)
|
38
|
+
(car directory) :relative))
|
39
|
+
(merge-pathnames
|
40
|
+
(make-pathname :name (or name (pathname-name pathname))
|
41
|
+
:type (or type (pathname-type pathname))
|
42
|
+
:directory directory
|
43
|
+
)
|
44
|
+
relative-to)))
|
45
|
+
|
46
|
+
(defun directory-pathname-p (p)
|
47
|
+
(flet ((component-present-p (value)
|
48
|
+
(and value (not (eql value :unspecific)))))
|
49
|
+
(and
|
50
|
+
(not (component-present-p (pathname-name p)))
|
51
|
+
(not (component-present-p (pathname-type p)))
|
52
|
+
p)))
|
53
|
+
|
54
|
+
(defun directory-p (name)
|
55
|
+
(let ((truename (probe-file name)))
|
56
|
+
(and truename (directory-pathname-p name))))
|
57
|
+
|
58
|
+
(defun containing-pathname (pathspec)
|
59
|
+
"Return the containing pathname of the thing to which
|
60
|
+
pathspac points. For example:
|
61
|
+
|
62
|
+
> \(containing-directory \"/foo/bar/bis.temp\"\)
|
63
|
+
\"/foo/bar/\"
|
64
|
+
> \(containing-directory \"/foo/bar/\"\)
|
65
|
+
\"/foo/\"
|
66
|
+
"
|
67
|
+
(make-pathname
|
68
|
+
:directory `(,@(butlast (pathname-directory pathspec)
|
69
|
+
(if (directory-pathname-p pathspec) 1 0)))
|
70
|
+
:name nil
|
71
|
+
:type nil
|
72
|
+
:defaults pathspec))
|
73
|
+
|
74
|
+
;; FIXME -- abstract and merge with unique-directory
|
75
|
+
(defun unique-filename (pathname &optional (max-count 10000))
|
76
|
+
(let ((date-part (date-stamp)))
|
77
|
+
(loop repeat max-count
|
78
|
+
for index from 1
|
79
|
+
for name =
|
80
|
+
(merge-pathnames
|
81
|
+
(make-pathname
|
82
|
+
:name (format nil "~a-~a-~d"
|
83
|
+
(pathname-name pathname)
|
84
|
+
date-part index))
|
85
|
+
pathname) do
|
86
|
+
(unless (probe-file name)
|
87
|
+
(return-from unique-filename name)))
|
88
|
+
(error "Unable to find unique pathname for ~a; there are already ~:d similar files" pathname max-count)))
|
89
|
+
|
90
|
+
;; FIXME -- abstract and merge with unique-filename
|
91
|
+
(defun unique-directory (pathname)
|
92
|
+
(setf pathname (merge-pathnames pathname))
|
93
|
+
(let* ((date-part (date-stamp))
|
94
|
+
(last-directory (first (last (pathname-directory pathname))))
|
95
|
+
(base-pathname (containing-pathname pathname))
|
96
|
+
(base-name (pathname-name last-directory))
|
97
|
+
(base-type (pathname-type last-directory)))
|
98
|
+
(or (loop repeat 10000
|
99
|
+
for index from 1
|
100
|
+
for name =
|
101
|
+
(merge-pathnames
|
102
|
+
(make-pathname
|
103
|
+
:name nil
|
104
|
+
:type nil
|
105
|
+
:directory `(:relative
|
106
|
+
,(format nil "~@[~a-~]~a-~d~@[.~a~]"
|
107
|
+
base-name date-part index base-type)))
|
108
|
+
base-pathname) do
|
109
|
+
(unless (probe-file name)
|
110
|
+
(return name)))
|
111
|
+
(error "Unable to find unique pathname for ~a" pathname))))
|
112
|
+
|
113
|
+
(defun date-stamp (&key (datetime (get-universal-time)) (include-time? nil))
|
114
|
+
(multiple-value-bind
|
115
|
+
(second minute hour day month year day-of-the-week)
|
116
|
+
(decode-universal-time datetime)
|
117
|
+
(declare (ignore day-of-the-week))
|
118
|
+
(let ((date-part (format nil "~d-~2,'0d-~2,'0d" year month day))
|
119
|
+
(time-part (and include-time?
|
120
|
+
(list (format nil "-~2,'0d-~2,'0d-~2,'0d"
|
121
|
+
hour minute second)))))
|
122
|
+
(apply 'concatenate 'string date-part time-part))))
|
123
|
+
|
124
|
+
|
125
|
+
#+(or)
|
126
|
+
(date-stamp :include-time? t)
|
127
|
+
|
128
|
+
;;; ---------------------------------------------------------------------------
|
129
|
+
;;; shared stuff
|
130
|
+
;;; ---------------------------------------------------------------------------
|
131
|
+
|
132
|
+
(defgeneric get-class (thing &key error?)
|
133
|
+
(:documentation "Returns the class of thing or nil if the class cannot be found. Thing can be a class, an object representing a class or a symbol naming a class. Get-class is like find-class only not as particular.")
|
134
|
+
(:method ((thing symbol) &key error?)
|
135
|
+
(find-class thing error?))
|
136
|
+
(:method ((thing standard-object) &key error?)
|
137
|
+
(declare (ignore error?))
|
138
|
+
(class-of thing))
|
139
|
+
(:method ((thing t) &key error?)
|
140
|
+
(declare (ignore error?))
|
141
|
+
(class-of thing))
|
142
|
+
(:method ((thing class) &key error?)
|
143
|
+
(declare (ignore error?))
|
144
|
+
thing))
|
145
|
+
|
146
|
+
(defun direct-subclasses (thing)
|
147
|
+
"Returns the immediate subclasses of thing. Thing can be a class, object or symbol naming a class."
|
148
|
+
(class-direct-subclasses (get-class thing)))
|
149
|
+
|
150
|
+
(defun map-subclasses (class fn &key proper?)
|
151
|
+
"Applies fn to each subclass of class. If proper? is true, then
|
152
|
+
the class itself is not included in the mapping. Proper? defaults to nil."
|
153
|
+
(let ((mapped (make-hash-table :test #'eq)))
|
154
|
+
(labels ((mapped-p (class)
|
155
|
+
(gethash class mapped))
|
156
|
+
(do-it (class root)
|
157
|
+
(unless (mapped-p class)
|
158
|
+
(setf (gethash class mapped) t)
|
159
|
+
(unless (and proper? root)
|
160
|
+
(funcall fn class))
|
161
|
+
(mapc (lambda (class)
|
162
|
+
(do-it class nil))
|
163
|
+
(direct-subclasses class)))))
|
164
|
+
(do-it (get-class class) t))))
|
165
|
+
|
166
|
+
(defun subclasses (class &key (proper? t))
|
167
|
+
"Returns all of the subclasses of the class including the class itself."
|
168
|
+
(let ((result nil))
|
169
|
+
(map-subclasses class (lambda (class)
|
170
|
+
(push class result))
|
171
|
+
:proper? proper?)
|
172
|
+
(nreverse result)))
|
173
|
+
|
174
|
+
(defun superclasses (thing &key (proper? t))
|
175
|
+
"Returns a list of superclasses of thing. Thing can be a class, object or symbol naming a class. The list of classes returned is 'proper'; it does not include the class itself."
|
176
|
+
(let ((result (class-precedence-list (get-class thing))))
|
177
|
+
(if proper? (rest result) result)))
|
178
|
+
|
179
|
+
#+(or)
|
180
|
+
;;?? remove
|
181
|
+
(defun direct-superclasses (thing)
|
182
|
+
"Returns the immediate superclasses of thing. Thing can be a class, object or symbol naming a class."
|
183
|
+
(class-direct-superclasses (get-class thing)))
|
184
|
+
|
185
|
+
(declaim (inline length-1-list-p))
|
186
|
+
(defun length-1-list-p (x)
|
187
|
+
"Is x a list of length 1?"
|
188
|
+
(and (consp x) (null (cdr x))))
|
189
|
+
|
190
|
+
(defmacro defclass-property (property &optional (default nil default-supplied?))
|
191
|
+
"Create getter and setter methods for 'property' on symbol's property lists."
|
192
|
+
(let ((real-name (intern (format nil "~:@(~A~)" property) :keyword)))
|
193
|
+
`(progn
|
194
|
+
(defgeneric ,property (symbol))
|
195
|
+
(defgeneric (setf ,property) (value symbol))
|
196
|
+
(defmethod ,property ((class-name symbol))
|
197
|
+
(get class-name ,real-name ,@(when default-supplied? (list default))))
|
198
|
+
(defmethod (setf ,property) (value (class-name symbol))
|
199
|
+
(setf (get class-name ,real-name) value)))))
|
200
|
+
|
201
|
+
(defun parse-brief-slot (slot)
|
202
|
+
(let* ((slot-spec
|
203
|
+
(typecase slot
|
204
|
+
(symbol (list slot))
|
205
|
+
(list slot)
|
206
|
+
(t (error "Slot-spec must be a symbol or a list. `~s` is not."
|
207
|
+
slot)))))
|
208
|
+
(unless (null (cddr slot-spec))
|
209
|
+
(error "Slot-spec must be a symbol or a list of length one or two. `~s` has too many elements." slot))
|
210
|
+
`(,(first slot-spec) ,@(when (second slot-spec)
|
211
|
+
`(:initform ,(second slot-spec))))))
|
212
|
+
|
213
|
+
(defun convert-clauses-into-lists (clauses-and-options clauses-to-convert)
|
214
|
+
;; This is useful (for me at least!) for writing macros
|
215
|
+
(let ((parsed-clauses nil))
|
216
|
+
(do* ((clauses clauses-and-options (rest clauses))
|
217
|
+
(clause (first clauses) (first clauses)))
|
218
|
+
((null clauses))
|
219
|
+
(if (and (keywordp clause)
|
220
|
+
(or (null clauses-to-convert) (member clause clauses-to-convert))
|
221
|
+
(not (length-1-list-p clauses)))
|
222
|
+
(progn
|
223
|
+
(setf clauses (rest clauses))
|
224
|
+
(push (list clause (first clauses)) parsed-clauses))
|
225
|
+
(push clause parsed-clauses)))
|
226
|
+
(nreverse parsed-clauses)))
|
227
|
+
|
228
|
+
(defun remove-leading-quote (list)
|
229
|
+
"Removes the first quote from a list if one is there."
|
230
|
+
(if (and (consp list) (eql (first list) 'quote))
|
231
|
+
(first (rest list))
|
232
|
+
list))
|
233
|
+
|
234
|
+
(defun cleanup-parsed-parameter (parameter)
|
235
|
+
(if (length-1-list-p parameter)
|
236
|
+
(first parameter)
|
237
|
+
parameter))
|
238
|
+
|
239
|
+
(defun ensure-string (it)
|
240
|
+
(etypecase it
|
241
|
+
(string it)
|
242
|
+
(symbol (symbol-name it))))
|
@@ -0,0 +1,17 @@
|
|
1
|
+
(in-package #:lift-documentation)
|
2
|
+
|
3
|
+
#+(or)
|
4
|
+
(defmethod additional-markdown-extensions-for-system
|
5
|
+
append ((system (eql (asdf:find-system 'lift-documentation))))
|
6
|
+
'(clcl))
|
7
|
+
|
8
|
+
(defmethod search-locations-for-system
|
9
|
+
append ((system (eql (asdf:find-system 'lift-documentation))))
|
10
|
+
(list (asdf:system-relative-pathname
|
11
|
+
'lift-documentation "website/source/resources/")
|
12
|
+
(asdf:system-relative-pathname
|
13
|
+
'lift-documentation "website/source/")
|
14
|
+
(asdf:system-relative-pathname
|
15
|
+
'lift-documentation "../shared//")
|
16
|
+
))
|
17
|
+
|
@@ -0,0 +1,289 @@
|
|
1
|
+
;;;-*- Mode: Lisp; Package: LIFT -*-
|
2
|
+
|
3
|
+
#| simple-header
|
4
|
+
|
5
|
+
Copyright (c) 2001-2006 Gary Warren King (gwking@cs.umass.edu)
|
6
|
+
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining a
|
8
|
+
copy of this software and associated documentation files (the "Software"),
|
9
|
+
to deal in the Software without restriction, including without limitation
|
10
|
+
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
11
|
+
and/or sell copies of the Software, and to permit persons to whom the
|
12
|
+
Software is furnished to do so, subject to the following conditions:
|
13
|
+
|
14
|
+
The above copyright notice and this permission notice shall be included in
|
15
|
+
all copies or substantial portions of the Software.
|
16
|
+
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
20
|
+
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
22
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
23
|
+
DEALINGS IN THE SOFTWARE.
|
24
|
+
|
25
|
+
|#
|
26
|
+
|
27
|
+
(in-package #:lift)
|
28
|
+
|
29
|
+
;;; ---------------------------------------------------------------------------
|
30
|
+
;;; a simple example
|
31
|
+
;;; ---------------------------------------------------------------------------
|
32
|
+
|
33
|
+
;;; define an empty testsuite
|
34
|
+
(deftestsuite lift-examples-1 () ())
|
35
|
+
;; => #<LIFT-EXAMPLES-1: no tests defined>
|
36
|
+
|
37
|
+
;;; and add a test to it
|
38
|
+
(addtest (lift-examples-1)
|
39
|
+
(ensure-same (+ 1 1) 2))
|
40
|
+
;; => #<Test passed>
|
41
|
+
|
42
|
+
;;; add another test using ensure-error
|
43
|
+
(addtest (lift-examples-1)
|
44
|
+
(ensure-error (let ((x 0)) (/ x))))
|
45
|
+
;; => #<Test passed>
|
46
|
+
|
47
|
+
;;; add another, slightly more specific test
|
48
|
+
(addtest (lift-examples-1)
|
49
|
+
(ensure-condition division-by-zero (let ((x 0)) (/ x))))
|
50
|
+
;; => #<Test passed>
|
51
|
+
|
52
|
+
;;; run all the defined tests
|
53
|
+
(run-tests)
|
54
|
+
;; => #<Results for LIFT-EXAMPLES-1 [3 Successful tests]>
|
55
|
+
|
56
|
+
|
57
|
+
;;; ---------------------------------------------------------------------------
|
58
|
+
;;; a simple example using deftestsuites :tests clause
|
59
|
+
;;; ---------------------------------------------------------------------------
|
60
|
+
|
61
|
+
(deftestsuite lift-examples-2 ()
|
62
|
+
()
|
63
|
+
(:tests
|
64
|
+
((ensure-same (+ 1 1) 2))
|
65
|
+
((ensure-error (let ((x 0)) (/ x))))
|
66
|
+
((ensure-condition division-by-zero (let ((x 0)) (/ x))))))
|
67
|
+
|
68
|
+
|
69
|
+
;;; ---------------------------------------------------------------------------
|
70
|
+
;;; testing a simple function
|
71
|
+
;;; ---------------------------------------------------------------------------
|
72
|
+
|
73
|
+
;; !!! Incorrect definition
|
74
|
+
(defun dotted-pair-p (putative-pair)
|
75
|
+
(and (consp putative-pair)
|
76
|
+
(cdr putative-pair)))
|
77
|
+
|
78
|
+
;;; ---------------------------------------------------------------------------
|
79
|
+
|
80
|
+
(deftestsuite test-dotted-pair-p ()
|
81
|
+
()
|
82
|
+
(:tests
|
83
|
+
((ensure (dotted-pair-p '(a . b))))
|
84
|
+
((ensure (not (dotted-pair-p '(a b)))))
|
85
|
+
((ensure (not (dotted-pair-p :a))))
|
86
|
+
((ensure (not (dotted-pair-p '(a b . c)))))
|
87
|
+
((ensure (not (dotted-pair-p nil))))))
|
88
|
+
;; ==> #<Results for TEST-DOTTED-PAIR-P [5 Tests, 2 Failures]>
|
89
|
+
|
90
|
+
(describe (run-tests))
|
91
|
+
;; ==> (prints)
|
92
|
+
Test Report for TEST-DOTTED-PAIR-P: 5 tests run, 2 Failures.
|
93
|
+
|
94
|
+
Failure: TEST-2
|
95
|
+
Condition: Ensure failed: (NOT (DOTTED-PAIR-P '(A B)))
|
96
|
+
|
97
|
+
Code : ((ENSURE (NOT (DOTTED-PAIR-P '(A B)))))
|
98
|
+
|
99
|
+
Failure: TEST-4
|
100
|
+
Condition: Ensure failed: (NOT (DOTTED-PAIR-P '(A B . C)))
|
101
|
+
|
102
|
+
Code : ((ENSURE (NOT (DOTTED-PAIR-P '(A B . C)))))
|
103
|
+
|
104
|
+
;;; ---------------------------------------------------------------------------
|
105
|
+
|
106
|
+
;; !!! Correct the defintion and run tests again
|
107
|
+
(defun dotted-pair-p (putative-pair)
|
108
|
+
(and (consp putative-pair)
|
109
|
+
(cdr putative-pair)
|
110
|
+
(not (consp (cdr putative-pair)))))
|
111
|
+
|
112
|
+
;;; ---------------------------------------------------------------------------
|
113
|
+
|
114
|
+
(describe (run-tests))
|
115
|
+
;; ==> Prints
|
116
|
+
Test Report for TEST-DOTTED-PAIR-P: 5 tests run, all passed!
|
117
|
+
|
118
|
+
|
119
|
+
;;; ---------------------------------------------------------------------------
|
120
|
+
;;; a test suite using slots
|
121
|
+
;;; ---------------------------------------------------------------------------
|
122
|
+
|
123
|
+
(defun nearly-zero-p (number &optional (tolerance 0.0001))
|
124
|
+
(< (abs number) tolerance))
|
125
|
+
|
126
|
+
(progn
|
127
|
+
(deftestsuite test-nearly-zero-p ()
|
128
|
+
((the-number-zero 0.0)
|
129
|
+
(not-nearly-zero 10000.0)
|
130
|
+
(close-to-zero 0.000000001)
|
131
|
+
(close-but-no-cigar 0.01)))
|
132
|
+
|
133
|
+
(addtest (test-nearly-zero-p)
|
134
|
+
(ensure (nearly-zero-p the-number-zero)))
|
135
|
+
|
136
|
+
(addtest (test-nearly-zero-p)
|
137
|
+
(ensure (not (nearly-zero-p not-nearly-zero))))
|
138
|
+
|
139
|
+
(addtest (test-nearly-zero-p)
|
140
|
+
(ensure (nearly-zero-p close-to-zero)))
|
141
|
+
|
142
|
+
(addtest (test-nearly-zero-p)
|
143
|
+
(ensure (not (nearly-zero-p close-but-no-cigar))))
|
144
|
+
|
145
|
+
(addtest (test-nearly-zero-p)
|
146
|
+
(ensure (nearly-zero-p close-but-no-cigar 0.1))))
|
147
|
+
|
148
|
+
|
149
|
+
(deftestsuite lift-examples () ())
|
150
|
+
|
151
|
+
(addtest (lift-examples)
|
152
|
+
(:documentation "This is the best test of all")
|
153
|
+
(let ((foo 1)
|
154
|
+
(faa 2)
|
155
|
+
(bar 3))
|
156
|
+
(setf foo (+ foo faa bar))
|
157
|
+
(setf foo 2)
|
158
|
+
(ensure (= (+ foo faa bar) (* foo faa bar)))))
|
159
|
+
|
160
|
+
(addtest (lift-examples)
|
161
|
+
(:documentation "This is the best test of all")
|
162
|
+
(let ((foo 1)
|
163
|
+
(faa 2)
|
164
|
+
(bar 3))
|
165
|
+
(setf foo (+ foo faa bar))
|
166
|
+
(setf foo 2)
|
167
|
+
(ensure (= (+ foo faa bar) (* foo far bar)))))
|
168
|
+
|
169
|
+
(addtest (lift-examples)
|
170
|
+
(ensure (= 2 3)))
|
171
|
+
|
172
|
+
(addtest (lift-examples)
|
173
|
+
(ensure (= 2 2)))
|
174
|
+
|
175
|
+
(addtest (lift-examples)
|
176
|
+
test-warning-2
|
177
|
+
(ensure-warning (+ 2 3)))
|
178
|
+
|
179
|
+
(addtest (lift-examples)
|
180
|
+
test-warning
|
181
|
+
(ensure-warning (warn "Help!")))
|
182
|
+
|
183
|
+
(addtest (lift-examples)
|
184
|
+
(:documentation "Testing ensure-same, should pass.")
|
185
|
+
(ensure-same (values "1" "2" "3") (values "1" "2" "3") :test #'string-equal))
|
186
|
+
|
187
|
+
(addtest (lift-examples)
|
188
|
+
(:documentation "Testing ensure-equal, should fail")
|
189
|
+
(ensure-same (values "1" "2" "3") (values "1" "2" "3") :test #'eql))
|
190
|
+
|
191
|
+
(addtest (lift-examples)
|
192
|
+
(ensure-error (warn "This test fails because a warning
|
193
|
+
is not an error.")))
|
194
|
+
|
195
|
+
(addTest (lift-examples)
|
196
|
+
(:documentation "This test will be logged as a
|
197
|
+
failure because no error will be generated.")
|
198
|
+
(ensure-warning (= 2 2)))
|
199
|
+
|
200
|
+
(addTest (lift-examples)
|
201
|
+
(:documentation "This test succeeds!")
|
202
|
+
(ensure-error (let ((x 0)) (print (/ 4 x)))))
|
203
|
+
|
204
|
+
(addTest (lift-examples)
|
205
|
+
(:documentation "This test should fail. Tests a bug where a warning would abort the test with no message.")
|
206
|
+
(warn "A test warning")
|
207
|
+
(ensure-same 1 2))
|
208
|
+
|
209
|
+
(run-tests :suite 'lift-examples)
|
210
|
+
|
211
|
+
;;; ---------------------------------------------------------------------------
|
212
|
+
;;;
|
213
|
+
;;; ---------------------------------------------------------------------------
|
214
|
+
|
215
|
+
(deftestsuite more-lift-examples (lift-examples)
|
216
|
+
((var-1 1))
|
217
|
+
(:documentation "More Examples")
|
218
|
+
(:test (test-initial-slot-value (ensure (= var-1 1))))
|
219
|
+
(:test ((ensure (= (1+ var-1) 2))))
|
220
|
+
(:test ((setf var-1 0) (ensure (= (1+ var-1) 1))))
|
221
|
+
(:test ((setf var-1 0) (ensure-warning (/ var-1))))
|
222
|
+
(:test ((setf var-1 0) (/ var-1) :documentation "Wow")))
|
223
|
+
|
224
|
+
(deftestsuite more-lift-examples (lift-examples)
|
225
|
+
((var-1 1)
|
226
|
+
(var-2 2)))
|
227
|
+
|
228
|
+
(addtest (more-lift-examples)
|
229
|
+
test-initial-slot-value
|
230
|
+
(ensure (= var-1 1)))
|
231
|
+
(remove-test)
|
232
|
+
(addtest (more-lift-examples)
|
233
|
+
(ensure (= (1+ var-1) 2)))
|
234
|
+
(addtest (more-lift-examples)
|
235
|
+
(setf var-1 0)
|
236
|
+
(ensure (= (1+ var-1) 1)))
|
237
|
+
(addtest (more-lift-examples)
|
238
|
+
(setf var-1 0)
|
239
|
+
(ensure-warning (/ var-1)))
|
240
|
+
|
241
|
+
|
242
|
+
(addtest (more-lift-examples)
|
243
|
+
test-initial-slot-value
|
244
|
+
(ensure-same var-1 1))
|
245
|
+
|
246
|
+
(addtest (more-lift-examples)
|
247
|
+
test-initial-slot-value
|
248
|
+
(ensure-same "Hello" (concatenate 'string "he" "ll" "o")))
|
249
|
+
|
250
|
+
(addtest (more-lift-examples)
|
251
|
+
test-initial-slot-value
|
252
|
+
(ensure-same 1.23 1.23))
|
253
|
+
|
254
|
+
(addtest (more-lift-examples)
|
255
|
+
test-initial-slot-value
|
256
|
+
(ensure-same (floor 5/3) (values 1 2/3) :test #'=))
|
257
|
+
|
258
|
+
|
259
|
+
(addtest (more-lift-examples)
|
260
|
+
test-initial-slot-value
|
261
|
+
(ensure-same var-1 2))
|
262
|
+
|
263
|
+
(addtest (more-lift-examples)
|
264
|
+
test-initial-slot-value
|
265
|
+
(ensure-same var-1 1 :report "Var-1 is ~A, not 1." :args (list var-1)))
|
266
|
+
|
267
|
+
(addtest (more-lift-examples)
|
268
|
+
test-initial-slot-value
|
269
|
+
(ensure-same var-1 1 :report (lambda ()
|
270
|
+
(format nil "Var-1 is ~A, not 1." var-1))))
|
271
|
+
|
272
|
+
(addtest (more-lift-examples)
|
273
|
+
test-initial-slot-value
|
274
|
+
(ensure-same var-1 1 :report ("Var-1 is ~A, not 1." var-1)))
|
275
|
+
|
276
|
+
|
277
|
+
;;; ---------------------------------------------------------------------------
|
278
|
+
;;; compare with fiveam
|
279
|
+
;;; ---------------------------------------------------------------------------
|
280
|
+
|
281
|
+
(deftestsuite my-suite ()
|
282
|
+
()
|
283
|
+
(:documentation "My example suite")
|
284
|
+
(:tests
|
285
|
+
((ensure-same 4 (+ 2 2)))
|
286
|
+
((ensure-same 0 (+ -1 1)))
|
287
|
+
((ensure-error (+ 'foo 4)))
|
288
|
+
((ensure-same 0 (+ 1 1) :report "This should fail."))))
|
289
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
(in-package #:lift)
|
2
|
+
|
3
|
+
(deftestsuite integer-math () ())
|
4
|
+
|
5
|
+
(defrandom-instance an-integer nil (- (random 200) 100))
|
6
|
+
|
7
|
+
(addtest (integer-math)
|
8
|
+
commutivity
|
9
|
+
(with-random-cases 10 ((a an-integer) (b an-integer))
|
10
|
+
(format t "~&~a ~a" a b)
|
11
|
+
(ensure-same (+ a b) (+ b a) :test =)))
|
12
|
+
|
13
|
+
(deftestsuite small-positive-integer-math (integer-math)
|
14
|
+
())
|
15
|
+
|
16
|
+
(addtest (small-positive-integer-math)
|
17
|
+
commutivity
|
18
|
+
(with-random-cases 10 ((a an-integer) (b an-integer))
|
19
|
+
(ensure-same (+ a b) (+ b a) :test =)))
|
20
|
+
|
21
|
+
(addtest (small-positive-integer-math)
|
22
|
+
closedness
|
23
|
+
(with-random-cases 10 ((a an-integer) (b an-integer))
|
24
|
+
(ensure (< (+ a b) 15))))
|
25
|
+
|
26
|
+
(defrandom-instance an-integer small-positive-integer-math
|
27
|
+
(1+ (random 10)))
|
28
|
+
|
29
|
+
(deftestsuite small-positive-integer-math (integer-math)
|
30
|
+
()
|
31
|
+
(:random-instance an-integer (1+ (random 10))))
|
32
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
(in-package #:common-lisp-user)
|
2
|
+
|
3
|
+
(defpackage #:lift-documentation-system
|
4
|
+
(:use #:common-lisp #:asdf))
|
5
|
+
(in-package #:lift-documentation-system)
|
6
|
+
|
7
|
+
;; just ignore for now... sigh.
|
8
|
+
(defsystem lift-documentation
|
9
|
+
:author "Gary King <gwking@metabang.com>"
|
10
|
+
:maintainer "Gary Warren King <gwking@metabang.com>"
|
11
|
+
:licence "MIT Style License"
|
12
|
+
:description "Documentation for LIFT"
|
13
|
+
:components (
|
14
|
+
#+(or)
|
15
|
+
(:module "setup"
|
16
|
+
:pathname "docs/"
|
17
|
+
:components ((:file "package")
|
18
|
+
(:file "setup"
|
19
|
+
:depends-on ("package"))))
|
20
|
+
#+(or)
|
21
|
+
(:module
|
22
|
+
"docs"
|
23
|
+
:depends-on ("setup")
|
24
|
+
:pathname "website/source/"
|
25
|
+
:components
|
26
|
+
((:docudown-source "index.md")
|
27
|
+
(:docudown-source "user-guide.md"))))
|
28
|
+
:depends-on (:lift #+(or) :docudown))
|
@@ -0,0 +1,35 @@
|
|
1
|
+
(defpackage #:asdf-lift-test (:use #:asdf #:cl))
|
2
|
+
(in-package #:asdf-lift-test)
|
3
|
+
|
4
|
+
(defsystem lift-test
|
5
|
+
:author "Gary Warren King <gwking@metabang.com>"
|
6
|
+
:maintainer "Gary Warren King <gwking@metabang.com>"
|
7
|
+
:licence "MIT Style License; see file COPYING for details"
|
8
|
+
:description "Tests for LIsp Framework for Testing"
|
9
|
+
:components ((:module
|
10
|
+
"setup"
|
11
|
+
:pathname "test/"
|
12
|
+
:components ((:file "packages")
|
13
|
+
(:file "lift-test"
|
14
|
+
:depends-on ("packages"))))
|
15
|
+
(:module
|
16
|
+
"test"
|
17
|
+
:pathname "test/"
|
18
|
+
:depends-on ("setup")
|
19
|
+
:components ((:file "test-dynamic-variables")
|
20
|
+
(:file "equality-tests")
|
21
|
+
(:file "testsuite-expects")
|
22
|
+
(:file "finding-tests")
|
23
|
+
(:file "order-of-operations")
|
24
|
+
(:file "test-config-files")
|
25
|
+
(:file "test-maximum-problems")
|
26
|
+
#+(or)
|
27
|
+
(:file "test-prototypes"))))
|
28
|
+
:depends-on (:lift))
|
29
|
+
|
30
|
+
(defmethod operation-done-p
|
31
|
+
((o test-op)
|
32
|
+
(c (eql (find-system 'lift-test))))
|
33
|
+
(values nil))
|
34
|
+
|
35
|
+
|