| (xref:OP_IS[`is`] (`PREDICATE` `EXPECTED` `ACTUAL`)) | check that, according to `PREDICATE` our `ACTUAL` is the same as our `EXPECTED`
| (xref:OP_IS[`is-true`] VALUE) | check that a value is non-NIL
| (xref:OP_RUN![`run!`] TEST-NAME) | run one (or more) tests and print the results
-| (xref:OP_RUN![`!`]) | rerun the most recently run test.
|================================
See the xref:API_REFERENCE[api] for details.
Lather, rinse, repeat:
--------------------------------
-CL-USER> (!)
+CL-USER> (run!)
..
Did 2 checks.
Pass: 2 (100%)
Where `TEST-NAME` is either a test object (as returned by `get-test`)
or a symbol naming a single test or a test suite.
-=== Re-running Tests ===
-
-The `run!` function stores its arguments in a set of variables and,
-via the functions `!`, `!!` and `!!!` will rerun those named
-tests. Note that we're deliberatly talking about names, and not test
-objects, `!` will take the last argument passed to `run!` and call
-`run!` with that again, looking up the test again if the argument was
-a symbol.
-
-This ensures that `!` will always run the current definition of a
-test, even if the test has been redefined since the last time `run!`
-was called.
-
=== Running Tests at Test Definition Time ===
Often enough, especially when fixing regression bugs, we'll always
reasons you have to set this variable manually after having loaded
your test suite.
-[NOTE]
-Setting `*run-test-when-defined*` will cause `run!` to get called far
-more often than normal. `!` and `!!` and `!!!` don't know that they're
-getting called semi-automatically and will therefore tend to all
-reduce to the same test (which still isn't totally useless behaviour).
-
=== Debugging failures and errors ===
`*debug-on-error*`::
include::docstrings/OP_RUN.txt[]
================================
-=== ! / !! / !!! ===
-
-================================
-----
-(!)
-----
-
-include::docstrings/OP_-EPOINT-.txt[]
-================================
-
-================================
-----
-(!!)
-----
-
-include::docstrings/OP_-EPOINT--EPOINT-.txt[]
-================================
-
-================================
-----
-(!!!)
-----
-
-include::docstrings/OP_-EPOINT--EPOINT--EPOINT-.txt[]
-================================
-
[[OP_DEF-FIXTURE]]
=== DEF-FIXTURE ===
;;;; on this one (even if the dependency is not circular) will be
;;;; skipped.
-;;;; The functions RUN!, !, !! and !!! are convenient wrappers around
-;;;; RUN and EXPLAIN.
+;;;; The functions RUN! is a convenient wrapper around RUN and
+;;;; EXPLAIN.
(defparameter *debug-on-error* nil
"T if we should drop into a debugger on error, NIL otherwise.")
performed by the !, !! and !!! functions."
(run-and-bind-result-list (lambda () (%run test-spec))))
-(defun ! ()
- "Rerun the most recently run test and explain the results."
- (explain! (funcall *!*)))
-
-(defun !! ()
- "Rerun the second most recently run test and explain the results."
- (explain! (funcall *!!*)))
-
-(defun !!! ()
- "Rerun the third most recently run test and explain the results."
- (explain! (funcall *!!!*)))
-
(defun run-all-tests ()
"Run all tests in arbitrary order."
(run-and-bind-result-list