Я пытаюсь использовать функциональность asdf для запуска моего набора тестов из repl, но при использовании quicklisps quickload, если не удается с первой попытки загрузить foo и успешно на второй.
(in-package :cl-user)
(defpackage :foo-system
(:use :cl :asdf))
(in-package :foo-system)
(asdf:defsystem :foo
:components ((:file "foo")))
(asdf:defsystem :foo-tests
:depends-on (:foo)
:components ((:file "foo-tests")))
(defmethod asdf:perform ((op test-op) (system (eql (find-system :foo))))
(asdf:load-system 'foo-tests)
(foo-tests:run-tests))
Это имеет смысл, потому что, когда я компилирую файл asd, ошибка появляется во второй форме метода asdf: perfom def. Ошибка при замене nclack на foo:
../../nclack/nclack.asd:36:27: ошибка чтения: ошибка чтения во время КОМПИЛЯЦИИ-ФАЙЛА:
Package NCLACK-TESTS does not exist. Line: 36, Column: 27, File-Position: 1034 Stream: #<SB-SYS:FD-STREAM for "file /Users/PuercoPop/quicklisp/local-projects/nclack/nclack.asd" {1005DB11A3}>
что соответствует строке (foo-tests: run-tests). Получается, что «загрузка» системы отличается от компиляции ее форм? Или почему пакет не определяется после загрузки системы? Любые идеи? Я в растерянности.
find-system
- это функция в пространстве именasdf
. То же самое и сtest-op
. В противном случае это не должно компилироваться / если только эти символы не были объявлены в пакете, который был актуальным на момент компиляции. - person   schedule 22.08.2013