set variables before executing the "test-op"

Alexey Veretennikov txm.fourier at
Tue Sep 6 19:49:52 UTC 2016


I decided to follow your first advice with some difference:
I've created a file base.lisp with the following contents:

(in-package :cl-user)
(defpackage test.base
  (:use :cl
(in-package :test.base)

;; turn off ansi colors in report output
(setf prove.color:*enable-colors* nil)
;; change type of the reporter to Test Anything Protocol
(setf prove:*default-reporter* :tap)

and added this file to components section of the test asd file:
  :components ((:module "t"
                ((:file "base")
                 (:test-file "pack-test")

I've also added :prove to depends-on section of the test asd file.

This works for me and I don't have to modify all test files.
Is this approach ok or bad(dangerous, bad style etc.)?

Faré <fahree at> writes:

> It's probably wrong to set those settings from your .asd file, since they may be set or reset before your
> project runs, or in between two runs.
> If you actually care about those variables, define a function that sets them,
> and call it at the beginning of those files.
> If you have a lot of files, define a class for those files that does it in its perform method for basic-load-op.
> As for defining accessors before the packages are interned,
> to be executed by a function run *after* they are interned,
> you can use such idioms as:
> (setf (symbol-value (find-symbol* :*enable-colors* :prove.color) nil)
> Note that find-symbol* is defined by uiop, which is :use'd by :asdf-user.
> Alternatively, you could (load-system :prove) in your .asd file,
> but it's ugly.
> —♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics•
> On Tue, Sep 6, 2016 at 6:58 AM, Alexey Veretennikov <txm.fourier at> wrote:
>  Hi all,
>  I am using cl-project to generate project skeleton for the library including separate asd file for unit
>  tests.
>  The test framework I use is the default for cl-project: prove.
>  Using this framework I would like to set some special variables to control test execution _before_
>  running the asdf:test-system
>  i.e.
>  (setf prove.color:*enable-colors* nil)
>  (setf prove:*default-reporter* :tap)
>  But the problem is when I set them directly in .asd file, the CL reader complains what the
>  prove.color and prove packages do not exist (which is true, since the prove dependency is not yet
>  loaded).
>  I could set them in every test file, but I would like to set them globally.
>  How could I set them after the dependency to unit test library (prove) is loaded and therefore
>  package exists?
>  This is what I have in .asd file for tests:
>  :defsystem-depends-on (:prove-asdf) 
>   :perform (test-op :after (op c)  
>   (funcall (intern #.(string :run-test-system) :prove-asdf) c)  
>  (asdf:clear-system c)))
>  Br
>  /Alexey


More information about the asdf-devel mailing list