;;;; 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.
(assert (eq *foo* (find-package "")))
(assert (delete-package ""))
-(sb-ext:quit :unix-status 104)
+(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")))
+