Skip to content
Snippets Groups Projects
Forked from asdf / asdf
1881 commits behind the upstream repository.
test-xach-update-bug.script 2.29 KiB
;;; -*- Lisp -*-

(setf asdf/cache:*asdf-cache* nil) ;; disable cache between those two very different compilations.

(defparameter foo :test-asdf-location-change)

(DBG "load foo. Should load from xach-foo-1/")
(setf *central-registry* (list (subpathname *test-directory* "xach-foo-1/")))
(defparameter foo1 (find-system foo))
(assert-pathname-equal
 (subpathname *test-directory* "xach-foo-1/test-asdf-location-change.asd")
 (system-source-file foo1))
(assert-equal (mapcar 'component-name (component-children foo1)) '("a"))
(assert-pathname-equal
 (subpathname *test-directory* "xach-foo-1/a.lisp")
 (component-pathname (find-component foo1 "a")))
(assert-equal nil (find-component foo1 "b"))
(load-system foo)
(defparameter loaded (find-symbol* :loaded :first-version))
(assert-equal (symbol-value loaded) t)

(DBG "load foo again. Should not do anything -- already loaded")
(setf (symbol-value loaded) :test-that-we-dont-reload)
(load-system foo)
(assert-equal (symbol-value loaded) :test-that-we-dont-reload)
(assert (not (find-package :second-version)))

(DBG "Now, change registry so foo is found from xach-foo-2/")
(setf *central-registry* (list (subpathname *test-directory* "xach-foo-2/")))
(defparameter foo2 (find-system foo))
(assert (eq foo1 foo2)) ;; the object should be the same
(assert-equal (mapcar 'component-name (component-children foo2)) '("a" "b"))
(assert-pathname-equal
 (subpathname *test-directory* "xach-foo-2/test-asdf-location-change.asd")
 (system-source-file foo2))
(assert-pathname-equal
 (subpathname *test-directory* "xach-foo-2/a.lisp")
 (component-pathname (find-component foo2 "a")))
(assert-pathname-equal
 (subpathname *test-directory* "xach-foo-2/b.lisp")
 (component-pathname (find-component foo2 "b")))
(DBG "load foo yet again. It should see the pathname has changed and load it anew")
;;; ECL bug: this fails if we use load-fasl-op instead of load-op:
;;; the test-asdf-location-change.fasb is linked and loaded,
;;; but that fails to create the :second-version package;
;;; loading the same .fasb in another ecl works fine, and defined (second-version:wtf). WTF?
;;; Test it by replacing load-op below by load-bundle-op, and trace load* and other functions.
(operate 'load-op foo)
(assert (symbol-value (find-symbol* :loaded :second-version)))
(assert-equal 42 (symbol-call :second-version :wtf))