From 9fcec4c21ff3befcb27aa9b0f20f00c65401c589 Mon Sep 17 00:00:00 2001 From: "Robert P. Goldman" <rpgoldman@real-time.com> Date: Thu, 15 Apr 2010 17:30:01 -0500 Subject: [PATCH] Added new test for missing source files. When trying to explore the behavior of ASDF2 in connection with rewriting that involves Lisp files, I was testing to verify that ASDF will notice if we lose a .lisp file. It does. This test checks that. --- test/test-missing-lisp-file.asd | 5 +++ test/test-missing-lisp-file.script | 49 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 test/test-missing-lisp-file.asd create mode 100644 test/test-missing-lisp-file.script diff --git a/test/test-missing-lisp-file.asd b/test/test-missing-lisp-file.asd new file mode 100644 index 00000000..5c32bb8f --- /dev/null +++ b/test/test-missing-lisp-file.asd @@ -0,0 +1,5 @@ +;;; -*- Lisp -*- +(asdf:defsystem test-missing-lisp-file + :components ((:file "file2" :in-order-to ((compile-op (load-op "fileMissing")))) + (:file "fileMissing"))) + diff --git a/test/test-missing-lisp-file.script b/test/test-missing-lisp-file.script new file mode 100644 index 00000000..acb4580c --- /dev/null +++ b/test/test-missing-lisp-file.script @@ -0,0 +1,49 @@ +;;; -*- Lisp -*- + +;;;--------------------------------------------------------------------------- +;;; This is supposed to verify that if a lisp file is lost, then any attempt to +;;; make the system will fail. I.e., we verify that we won't just load a stale +;;; fasl when the source file is lost. +;;;--------------------------------------------------------------------------- + +(load "script-support") +(load-asdf) + +(quit-on-error + (setf asdf:*central-registry* '(*default-pathname-defaults*)) + (let ((missing-name (namestring + (make-pathname :name "fileMissing" + :type "lisp" + :defaults + *default-pathname-defaults*))) + (template-file (namestring + (make-pathname :name "file1" + :type "lisp" + :defaults + *default-pathname-defaults*)))) + (asdf::run-shell-command + (format nil "cp ~a ~a" template-file missing-name)) + (unless (probe-file missing-name) + (format t "File copy failed.~%")) + (asdf:operate 'asdf:load-op 'test-missing-lisp-file) + ;; test that it compiled + (let* ((file1 (asdf:compile-file-pathname* "file2")) + (file2 (asdf:compile-file-pathname* "fileMissing")) + (file1-date (file-write-date file1))) + + (assert file1-date) + (assert (file-write-date file2)) + + ;; and loaded + (assert (symbol-value (find-symbol (symbol-name :*file1*) :test-package))) + + ;; now remove the lisp file we created, and wait for an error + (sleep 1) ; mtime has 1-second granularity, so pause here for fast machines + + (asdf::run-shell-command (format nil "rm -f ~A" missing-name)) + ;; we shouldn't be able to find the input-file for the compile-op, and that + ;; should be an error. + (multiple-value-bind (retval err) + (ignore-errors + (asdf:operate 'asdf:load-op 'test-missing-lisp-file)) + (assert err))))) -- GitLab