A simple example that takes the RT package, which is a rather fragile testing framework, and wraps it inside an ASDF system using the previous ideas I just coded.<br><br>This allows declaring the dependency on the given plug-in, using the new class and relying on the fact that the tests will be automagically recorded in the system.<br>

<br>How this works?<br><br>- The new test class, specialized for RT, wraps new components which are "actions" before and at the end of any LOAD process.<br>- These actions save and restore the values of the variables in the RT package which are responsible for the tests being run.<br>

- When the test system is loaded, RT stores the tests in the variables and the last action saves them all in the ASDF system.<br>- When the test system is first used, the class prepares a new component in the SYSTEM-TESTS fields which is a closure.<br>

<br>The plug-in in asdf-rt.lisp reveals various deficiencies:<br><br>- If we want a purely declarative syntax, without side effects, we have to specify symbols in other packages using strings (see the asdf-rt:rt-test-system) clas below.<br>

- The parsing of DEFSYSTEM currently can not be customized by the class.<br>- Adding components to a module is not done using SHARED-INITIALIZE and this is bad because, once more, additional classes can not extend or process the list of components.<br>

<br>CL-USER> (asdf:test-system :my-package)<br>[...]<br>; loading system definition from<br>; /Users/jjgarcia/devel/asdf/my-package-test.asd into #<PACKAGE "ASDF0"><br>; registering #<RT-TEST-SYSTEM :MY-PACKAGE-TEST {1281F7A1}> as<br>

; MY-PACKAGE-TEST<br>Doing 2 pending tests of 2 tests total.<br>Test MY-PACKAGE-TEST::TEST-001 failed<br>Form: (MY-FUNCTION 0)<br>Expected value: 1.0<br>Actual value: #<UNDEFINED-FUNCTION MY-FUNCTION {120504E9}>.<br>

Test MY-PACKAGE-TEST::TEST-002 failed<br>Form: (HANDLER-CASE (AND (MY-FUNCTION 'MY-PACKAGE-TEST::A) NIL)<br>                    (ERROR (MY-PACKAGE-TEST::C) T))<br>Expected value: NIL<br>Actual value: T.<br>2 out of 2 total tests failed: MY-PACKAGE-TEST::TEST-001, <br>

<br>my-package.asd:<br>
(defsystem :my-package<br>
  :components ((:file "my-package"))<br>
  :tests ((:system :my-package-test)))<br>
<br>
my-package.lisp:<br>
(in-package :cl-user)<br>
<br>
(defun my-function (a)<br>
  (cos a))<br clear="all"><br>my-package-test.asd:<br>(defsystem :my-package-test<br>    :asdf-dependencies (:asdf-rt)<br>    :class "ASDF-RT:RT-TEST-SYSTEM"<br>    :serial t<br>    :components ((:file "my-package-test")))<br>

<br>my-package-test.lisp:<br>(defpackage :my-package-test<br>  (:use #+sbcl :sb-rt #+ecl :rt :cl))<br><br>(in-package :my-package-test)<br>(deftest test-001<br>  (cl-user::my-function 0)<br>  1.0)<br><br>(deftest test-002<br>

  (handler-case (and (cl-user::my-function 'a) nil)<br>    (error (c) t))<br>  nil)<br><br>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br><a href="http://tream.dreamhosters.com">http://tream.dreamhosters.com</a><br>