+
+(with-test (:name :pprint-defmethod-lambda-list-function)
+ (flet ((to-string (form)
+ (let ((string (with-output-to-string (s) (pprint form s))))
+ (assert (eql #\newline (char string 0)))
+ (subseq string 1))))
+ (assert (equal "(DEFMETHOD FOO ((FUNCTION CONS)) FUNCTION)"
+ (to-string `(defmethod foo ((function cons)) function))))
+ (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)))))
+