Fix make-array transforms.
[sbcl.git] / tests / pprint.impure.lisp
index 06c0c08..4f10bd0 100644 (file)
@@ -53,7 +53,7 @@
                :done))
            "#1=(1 2 3 . #1#)")))
 
-(with-test (:name :pprint :bug-99)
+(with-test (:name (:pprint :bug-99))
   (assert (equal
            (with-output-to-string (*standard-output*)
              (let* ((*print-circle* t))
 
 ;;; bug reported by Paul Dietz on sbcl-devel: unquoted lambda lists
 ;;; were leaking the SB-IMPL::BACKQ-COMMA implementation.
-(with-test (:name :pprint :leaking-backq-comma)
+(with-test (:name :pprint-leaking-backq-comma)
   (assert (equal
            (with-output-to-string (s)
              (write '`(foo ,x) :stream s :pretty t :readably t))
 (defun ppd-function-name (s o)
   (print (length o) s))
 
-(with-test (:name :set-pprint-dispatch :no-function-coerce))
+(with-test (:name (:set-pprint-dispatch :no-function-coerce)))
 (let ((s (with-output-to-string (s)
            (pprint '(frob a b) s))))
   (assert (position #\3 s)))
 
 ;;; Printing malformed defpackage forms without errors.
 (with-test (:name :pprint-defpackage)
-  (with-open-stream (null (make-broadcast-stream))
+  (let ((*standard-output* (make-broadcast-stream)))
     (pprint '(defpackage :foo nil))
     (pprint '(defpackage :foo 42))))
 
     (assert (equal "(DEFMETHOD FOO :AFTER (FUNCTION CONS) FUNCTION)"
                    (to-string `(defmethod foo :after (function cons) function))))))
 
+(defclass frob () ())
+
+(defmethod print-object ((obj frob) stream)
+  (print-unreadable-object (obj stream :type nil :identity nil)
+    (format stream "FRABOTZICATOR")))
+
+;;; SBCL < 1.0.38 printed #<\nFRABOTIZICATOR>
+(with-test (:name (:pprint-unreadable-object :no-ugliness-when-type=nil))
+  (assert (equal "#<FRABOTZICATOR>"
+                 (let ((*print-right-margin* 5)
+                       (*print-pretty* t))
+                   (format nil "~@<~S~:>" (make-instance 'frob))))))
+
+(with-test (:name :pprint-logical-block-code-deletion-node)
+  (handler-case
+      (compile nil
+               `(lambda (words &key a b c)
+                  (pprint-logical-block (nil words :per-line-prefix (or a b c))
+                    (pprint-fill *standard-output* (sort (copy-seq words) #'string<) nil))))
+    ((or sb-ext:compiler-note warning) (c)
+      (error e))))
+
+(with-test (:name :pprint-logical-block-multiple-per-line-prefix-eval)
+  (funcall (compile nil
+                    `(lambda ()
+                       (let ((n 0))
+                         (with-output-to-string (s)
+                           (pprint-logical-block (s nil :per-line-prefix (if (eql 1 (incf n))
+                                                                             "; "
+                                                                             (error "oops")))
+                             (pprint-newline :mandatory s)
+                             (pprint-newline :mandatory s)))
+                         n)))))
+
+(with-test (:name :can-restore-orig-pprint-dispatch-table)
+  (let* ((orig (pprint-dispatch 'some-symbol))
+         (alt (lambda (&rest args) (apply orig args))))
+    (set-pprint-dispatch 'symbol alt)
+    (assert (eq alt (pprint-dispatch 'some-symbol)))
+    (setf *print-pprint-dispatch* (copy-pprint-dispatch nil))
+    (assert (eq orig (pprint-dispatch 'some-symbol)))
+    (assert (not (eq alt orig)))))
+
+(with-test (:name :pprint-improper-list)
+  (let* ((max-length 10)
+         (stream (make-broadcast-stream))
+         (errors
+           (loop for symbol being the symbol in :cl
+                 nconc
+                 (loop for i from 1 below max-length
+                       for list = (cons symbol 10) then (cons symbol list)
+                       when (nth-value 1 (ignore-errors (pprint list stream)))
+                       collect (format nil "(~{~a ~}~a . 10)" (butlast list) symbol)))))
+    (when errors
+      (error "Can't PPRINT imporper lists: ~a" errors))))
+
+(with-test (:name :pprint-circular-backq-comma)
+  ;; LP 1161218 reported by James M. Lawrence
+  (let ((string (write-to-string '(let ((#1=#:var '(99)))
+                                   `(progn ,@(identity #1#)))
+                                 :circle t :pretty t)))
+    (assert (not (search "#2#" string)))))
+
+(with-test (:name :pprint-dotted-setf)
+  (let ((*print-pretty* t))
+    (equal (format nil "~a" '(setf . a))
+           "(SETF . A)")))
+
 \f
 ;;; success