(rontolisp) docs
← Functions

asdf:test-system

(asdf:test-system name)

Loads the named system, follows its :in-order-to ((test-op (test-op ...))) chain (loading and testing each chained system the same way), then runs the system's recorded :perform (test-op (o c) ...) body with the operation parameter bound to nil (there is no operate machinery) and the component parameter bound to the system's metaobject (asdf:find-system's answer). Returns t. A system with no test-op wiring is a no-op, like real ASDF's default perform.

This is the standard entry point fukamachi-style .asds ship:

(defsystem "my-app"
  :components ((:file "main"))
  :in-order-to ((test-op (test-op "my-app/tests"))))

(defsystem "my-app/tests"
  :depends-on ("my-app" "rove")
  :components ((:file "tests/main"))
  :perform (test-op (op c) (symbol-call :rove :run c)))

;; run the tests:
(asdf:test-system "my-app")

The body is recorded as data when the .asd is parsed; its bare symbols resolve the way asdf-user would resolve them (symbol-call is uiop:symbol-call, component-name is asdf:component-name). A :perform with a method qualifier (test-op :after (o c)) or a #. reader macro in its body stays tolerated-and-ignored, as all test-op wiring used to be.

Backend support

Works on all four backends. On the compile paths a literal, top-level (asdf:test-system NAME) splices the system and its test-op chain at compile time (a plain load-system never pulls the tests system in), then runs the recorded bodies at run time; a nested/computed call can only reach systems the program already spliced.