diff --git a/test/test-try-refinding.script b/test/test-try-refinding.script index 615631aca186ecabff19fb5c506bce2a248a8a52..4983e18c5873369a99afb1a547fc6b6cc62aa89d 100644 --- a/test/test-try-refinding.script +++ b/test/test-try-refinding.script @@ -10,9 +10,12 @@ ;;(terpri) (assert (asdf:find-system "test-asdf/force1")) +(defun clear-caches-and-search () + (setf asdf:*central-registry* nil) + (asdf/find-system:clear-defined-system "test-asdf/force1")) + (DBG "Clearing the caches and finding.") -(setf asdf:*central-registry* nil) -(asdf/find-system:clear-defined-system "test-asdf/force1") +(clear-caches-and-search) (assert (not (asdf:find-system "test-asdf/force1" nil))) (let (tried-once) (handler-bind @@ -33,3 +36,27 @@ ;; avoid infinite looping (error c))))) (asdf:find-system "test-asdf/force1"))) + +(DBG "Refinding test successful.") + +(DBG "Now trying LOAD-SYSTEM with refinding.") +(clear-caches-and-search) +(let (tried-once) + (handler-bind + ((asdf:missing-dependency-of-version + (lambda (c) + ;; Nothing Quicklisp can do to recover from this, so + ;; just resignal + (error c))) + (asdf:missing-dependency + (lambda (c) + (if (not tried-once) + (let ((missing (asdf::missing-requires c))) + (assert (equal missing "test-asdf/force1")) + (setf tried-once t) + (DBG "Trying to reset the central registry and retry.") + (setf asdf:*central-registry* *old-registry*) + (asdf:load-system missing)) + ;; avoid infinite looping + (error c))))) + (asdf:load-system "test-asdf/force1")))