;;;; miscellaneous tests of package-related stuff ;;;; This software is part of the SBCL system. See the README file for ;;;; more information. ;;;; ;;;; While most of SBCL is derived from the CMU CL system, the test ;;;; files (like this one) were written from scratch after the fork ;;;; from CMU CL. ;;;; ;;;; This software is in the public domain and is provided with ;;;; absolutely no warranty. See the COPYING and CREDITS files for ;;;; more information. (make-package "FOO") (defvar *foo* (find-package (coerce "FOO" 'base-string))) (rename-package "FOO" (make-array 0 :element-type nil)) (assert (eq *foo* (find-package ""))) (assert (delete-package "")) (handler-case (export :foo) (package-error (c) (princ c)) (:no-error (&rest args) (error "(EXPORT :FOO) returned ~S" args))) (make-package "FOO") (assert (shadow #\a :foo)) (defpackage :PACKAGE-DESIGNATOR-1 (:use #.(find-package :cl))) (defpackage :PACKAGE-DESIGNATOR-2 (:import-from #.(find-package :cl) "+")) (defpackage "EXAMPLE-INDIRECT" (:import-from "CL" "+")) (defpackage "EXAMPLE-PACKAGE" (:shadow "CAR") (:shadowing-import-from "CL" "CAAR") (:use) (:import-from "CL" "CDR") (:import-from "EXAMPLE-INDIRECT" "+") (:export "CAR" "CDR" "EXAMPLE")) (flet ((check-symbol (name expected-status expected-home-name) (multiple-value-bind (symbol status) (find-symbol name "EXAMPLE-PACKAGE") (let ((home (symbol-package symbol)) (expected-home (find-package expected-home-name))) (assert (eql home expected-home)) (assert (eql status expected-status)))))) (check-symbol "CAR" :external "EXAMPLE-PACKAGE") (check-symbol "CDR" :external "CL") (check-symbol "EXAMPLE" :external "EXAMPLE-PACKAGE") (check-symbol "CAAR" :internal "CL") (check-symbol "+" :internal "CL") (check-symbol "CDDR" nil "CL")) (defpackage "TEST-ORIGINAL" (:nicknames "A-NICKNAME")) (assert (raises-error? (defpackage "A-NICKNAME"))) (assert (eql (find-package "A-NICKNAME") (find-package "TEST-ORIGINAL")))