source: branches/1.3.0/test/lisp/abcl/package-local-nicknames-tests.lisp

Last change on this file was 14431, checked in by rschlatte, 12 years ago

Make add-package-local-nicknames errors continuable

File size: 6.7 KB
Line 
1;;; package-local-nicknames-tests.lisp
2;;;
3;;; Copyright (C) 2013 Nikodemus Siivola, Rudolf Schlatte
4;;; $Id$
5;;;
6;;; This program is free software; you can redistribute it and/or
7;;; modify it under the terms of the GNU General Public License
8;;; as published by the Free Software Foundation; either version 2
9;;; of the License, or (at your option) any later version.
10;;;
11;;; This program is distributed in the hope that it will be useful,
12;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
13;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14;;; GNU General Public License for more details.
15;;;
16;;; You should have received a copy of the GNU General Public License
17;;; along with this program; if not, write to the Free Software
18;;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19
20;;; Most of these tests are adapted from the SBCL test suite.
21
22(in-package #:abcl.test.lisp)
23
24(defmacro with-tmp-packages (bindings &body body)
25  `(let ,(mapcar #'car bindings)
26     (unwind-protect
27          (progn
28            (setf ,@(apply #'append bindings))
29            ,@body)
30       ,@(mapcar (lambda (p)
31                   `(when ,p (delete-package ,p)))
32                 (mapcar #'car bindings)))))
33
34(defpackage :package-local-nicknames-test-1
35           (:local-nicknames (:l :cl) (:e :ext)))
36
37(defpackage :package-local-nicknames-test-2
38           (:export "CONS"))
39
40(deftest pln-introspect
41    (let ((alist (ext:package-local-nicknames :package-local-nicknames-test-1)))
42      (values
43       (equal (cons "L" (find-package "CL")) (assoc "L" alist :test 'string=))
44       (equal (cons "E" (find-package "EXT")) (assoc "E" alist :test 'string=))
45       (eql 2 (length alist))))
46  t
47  t
48  t)
49
50(deftest pln-usage
51    (let ((*package* (find-package :package-local-nicknames-test-1)))
52      (let ((cons0 (read-from-string "L:CONS"))
53            (exit0 (read-from-string "E:EXIT"))
54            (cons1 (find-symbol "CONS" :l))
55            (exit1 (find-symbol "EXIT" :e))
56            (cl (find-package :l))
57            (ext (find-package :e)))
58        (values
59         (eq 'cons cons0)
60         (eq 'cons cons1)
61         (equal "L:CONS" (prin1-to-string cons0))
62         (eq 'ext:exit exit0)
63         (eq 'ext:exit exit1)
64         (equal "E:EXIT" (prin1-to-string exit0))
65         (eq cl (find-package :common-lisp))
66         (eq ext (find-package :ext)))))
67  T
68  T
69  T
70  T
71  T
72  T
73  T
74  T)
75
76(deftest pln-add-nickname-twice
77    (handler-case
78        (ext:add-package-local-nickname :l :package-local-nicknames-test-2
79                                        :package-local-nicknames-test-1)
80      (error ()
81        :oopsie))
82  :oopsie)
83
84(deftest pln-add-same-nickname
85    (progn (ext:add-package-local-nickname :l :cl
86                                           :package-local-nicknames-test-1)
87           :okay)
88  :okay)
89
90(deftest pln-remove-local-nickname
91    (progn
92      (assert (ext:remove-package-local-nickname :l :package-local-nicknames-test-1))
93      (assert (not (ext:remove-package-local-nickname :l :package-local-nicknames-test-1)))
94      (let ((*package* (find-package :package-local-nicknames-test-1)))
95        (let ((exit0 (read-from-string "E:EXIT"))
96              (exit1 (find-symbol "EXIT" :e))
97              (e (find-package :e)))
98          (assert (eq 'ext:exit exit0))
99          (assert (eq 'ext:exit exit1))
100          (assert (equal "E:EXIT" (prin1-to-string exit0)))
101          (assert (eq e (find-package :ext)))
102          (assert (not (find-package :l)))))
103      (assert (eq (find-package :package-local-nicknames-test-1)
104                  (ext:add-package-local-nickname :l :package-local-nicknames-test-2
105                                              :package-local-nicknames-test-1)))
106      (let ((*package* (find-package :package-local-nicknames-test-1)))
107        (let ((cons0 (read-from-string "L:CONS"))
108              (exit0 (read-from-string "E:EXIT"))
109              (cons1 (find-symbol "CONS" :l))
110              (exit1 (find-symbol "EXIT" :e))
111              (cl (find-package :l))
112              (e (find-package :e)))
113          (assert (eq cons0 cons1))
114          (assert (not (eq 'cons cons0)))
115          (assert (eq (find-symbol "CONS" :package-local-nicknames-test-2)
116                      cons0))
117          (assert (equal "L:CONS" (prin1-to-string cons0)))
118          (assert (eq 'ext:exit exit0))
119          (assert (eq 'ext:exit exit1))
120          (assert (equal "E:EXIT" (prin1-to-string exit0)))
121          (assert (eq cl (find-package :package-local-nicknames-test-2)))
122          (assert (eq e (find-package :ext)))))
123      :success)
124  :success)
125
126(deftest pln-delete-locally-nicknaming-package
127    (with-tmp-packages ((p1 (make-package "LOCALLY-NICKNAMES-OTHERS"))
128                        (p2 (make-package "LOCALLY-NICKNAMED-BY-OTHERS")))
129      (ext:add-package-local-nickname :foo p2 p1)
130      (assert (equal (list p1) (ext:package-locally-nicknamed-by-list p2)))
131      (delete-package p1)
132      (assert (null (ext:package-locally-nicknamed-by-list p2)))
133      :success)
134  :success)
135
136(deftest pln-delete-locally-nicknamed-package
137    (with-tmp-packages ((p1 (make-package "LOCALLY-NICKNAMES-OTHERS"))
138                        (p2 (make-package "LOCALLY-NICKNAMED-BY-OTHERS")))
139      (ext:add-package-local-nickname :foo p2 p1)
140      (assert (ext:package-local-nicknames p1))
141      (delete-package p2)
142      (assert (null (ext:package-local-nicknames p1)))
143      :success)
144  :success)
145
146(deftest pln-own-name-as-local-nickname
147    (with-tmp-packages ((p1 (make-package "OWN-NAME-AS-NICKNAME1"))
148                        (p2 (make-package "OWN-NAME-AS-NICKNAME2")))
149      (assert (eq :oops
150                  (handler-case
151                      (ext:add-package-local-nickname :own-name-as-nickname1 p2 p1)
152                    (error ()
153                      :oops))))
154      (handler-bind ((error #'continue))
155        (ext:add-package-local-nickname :own-name-as-nickname1 p2 p1))
156      (assert (eq (intern "FOO" p2)
157                  (let ((*package* p1))
158                    (intern "FOO" :own-name-as-nickname1))))
159      :success)
160  :success)
161
162
163
164(deftest pln-own-nickname-as-local-nickname
165    (with-tmp-packages ((p1 (make-package "OWN-NICKNAME-AS-NICKNAME1"
166                                          :nicknames '("OWN-NICKNAME")))
167                        (p2 (make-package "OWN-NICKNAME-AS-NICKNAME2")))
168      (assert (eq :oops
169                  (handler-case
170                      (ext:add-package-local-nickname :own-nickname p2 p1)
171                    (error ()
172                      :oops))))
173      (handler-bind ((error #'continue))
174        (ext:add-package-local-nickname :own-nickname p2 p1))
175      (assert (eq (intern "FOO" p2)
176                  (let ((*package* p1))
177                    (intern "FOO" :own-nickname))))
178      :success)
179  :success)
Note: See TracBrowser for help on using the repository browser.