1.0.11.2: defer package creation of defpackage
[sbcl.git] / tests / packages.impure.lisp
index b7e22b0..ce498d6 100644 (file)
@@ -6,7 +6,7 @@
 ;;;; 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.
   (package-error (c) (princ c))
   (:no-error (&rest args) (error "(EXPORT :FOO) returned ~S" args)))
 
-(sb-ext:quit :unix-status 104)
+(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")))
+