default method for test-system?
Robert P. Goldman
rpgoldman at sift.net
Sat Apr 25 20:52:23 UTC 2015
Faré wrote:
> Dear ASDF users,
>
> what about this default method (or something similar) for test-op?
>
> (defmethod perform ((o test-op) (s system))
> (loop :with name = (coerce-name s)
> :for suffix :in '("" "/test" "-test")
> :for test-system-name = (strcat name suffix)
> :for test-system = (find-system test-system-name nil)
> :when test-system :do
> (load-system test-system)
> ;; Would be string-upcase, if not to accommodate for "modern" syntax.
> ;; UIOP probably needs to offer a standard way to abstract over
> ;; the string-upcase vs string-downcase vs neither default.
> (flet ((symbol-namify (x) (string (safe-read-from-string x))))
> (if-let (test-suite (find-symbol* '#:test-suite
> (symbol-namify test-system-name) nil))
> (return (funcall test-suite))))
> :finally (error "No tests found for system ~A" name)))
>
I like this, but I'd like a clear statement of its objective. I believe
I can reconstruct it as follows:
By default, look for a test system with the name <system-name>/test or
<system-name>-text. Load that system, and then look for a function
called "test-suite" in the package with the same name as the test system.
I'd like to suggest a modification to the above, that teases things apart.
1. Look for the test system as you do, but add "-tests" and "/tests".
2. Do not try to do the PERFORM on the main system, but instead delegate
it to the test system. I.e., do the equivalent of
(in-order-to (test-op system) (test-op test-system))
3. Add a new class: TEST-SYSTEM, and make the code that does TEST-SUITE
be the default TEST-OP method on TEST-SYSTEM.
4. We could additionally allow the users to specify the TEST-SYSTEM
corresponding to any system for themselves, and use that name in place
of the auto-search when it's available.
A slight variation would be to make the invocation of an appropriately
named TEST-SUITE function be the default TEST-OP for *all* systems.
We could also have the TEST-SYSTEM class have an optional TEST-PACKAGE
initarg that would allow users to specify where to look for TEST-SUITE.
I would bump the version numbering of ASDF to either 3.2 or 4 and add a
#+ to allow users to easily add this to their systems without breakage.
Best,
r
More information about the asdf-devel
mailing list