1.0.43.63: storing function documentation under names as well
[sbcl.git] / tests / interface.impure.lisp
index cdec390..cbb9ae3 100644 (file)
   (let ((s (with-output-to-string (s)
              (write-char #\x s)
              (describe i s))))
-    (unless (and (char= #\x (char s 0))
-                 ;; one leading #\NEWLINE from FRESH-LINE or the like, no more
-                 (char= #\newline (char s 1))
-                 (char/= #\newline (char s 2))
-                 ;; one trailing #\NEWLINE from TERPRI or the like, no more
-                 (let ((n (length s)))
-                   (and (char= #\newline (char s (- n 1)))
-                        (char/= #\newline (char s (- n 2))))))
-      (error "misbehavior in DESCRIBE of ~S" i))))
+    (macrolet ((check (form)
+                 `(or ,form
+                      (error "misbehavior in DESCRIBE of ~S:~%   ~S" i ',form))))
+      (check (char= #\x (char s 0)))
+      ;; one leading #\NEWLINE from FRESH-LINE or the like, no more
+      (check (char= #\newline (char s 1)))
+      (check (char/= #\newline (char s 2)))
+      ;; one trailing #\NEWLINE from TERPRI or the like, no more
+      (let ((n (length s)))
+        (check (char= #\newline (char s (- n 1))))
+        (check (char/= #\newline (char s (- n 2))))))))
 
 \f
 ;;; Tests of documentation on types and classes
   (assert (string= (documentation #'docfoo t) "bar"))
   (assert (string= (setf (documentation 'docfoo 'function) "baz") "baz"))
   (assert (string= (documentation 'docfoo 'function) "baz"))
-  (assert (string= (documentation #'docfoo t) "baz")))
+  (assert (string= (documentation #'docfoo t) "bar"))
+  (assert (string= (setf (documentation #'docfoo t) "zot") "zot"))
+  (assert (string= (documentation #'docfoo t) "zot"))
+  (assert (string= (documentation 'docfoo 'function) "baz"))
+  (assert (not (setf (documentation 'docfoo 'function) nil)))
+  (assert (string= (documentation 'docfoo 'function) "zot")))
 
 #+sb-doc
 (with-test (:name (documentation built-in-macro))
 #+sb-doc
 (with-test (:name (documentation built-in-function))
   (assert (documentation 'cons 'function)))
+
+(with-test (:name :describe-generic-function-with-assumed-type)
+  ;; Signalled an error at one point
+  (flet ((zoo () (gogo)))
+    (defmethod gogo () nil)
+    (describe 'gogo)))
+
+(defmacro bug-643958-test ()
+  "foo"
+  :ding!)
+
+(with-test (:name :bug-643958)
+  (assert (equal "foo" (documentation 'bug-643958-test 'function)))
+  (setf (documentation 'bug-643958-test 'function) "bar")
+  (assert (equal "bar" (documentation 'bug-643958-test 'function))))
 \f
 ;;;; success