On 9/6/16 Sep 6 -8:03 AM, Stelian Ionescu wrote:
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.
This sounds like a good moment to come up with an interface between test-system and the test suite runner, so that you can pass arguments to the test runner directly through asdf:test-system. Using dynamic variables for this use case is a bad idea.
Offhand, I don't see how this is possible. If a test library decides to use dynamic variables to control its function, how can ASDF fix that?
Mostly I try to handle this by writing methods on
PERFORM :around ((op test-op) (system (eql (find-system ...))))
Actually, Alexey's case looks more complex, since it involves some call to CLEAR-SYSTEM.
This suggests that there's some setup and teardown that isn't being handled by the test library itself.
What I have done in my work on testing with 5AM is to add special error classes for test-failures, an unexpected number of tests (we had problems once where due to a bug tests were not run, which didn't yield errors but.... wasn't working, either), and unexpected test passes.
That addresses the problem of ASDF not returning values from its operations.
Best, r