X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fpprint.impure.lisp;h=4f10bd01c1e91b00058203c84cd2cad846d31660;hb=56b6d13d2758753d18a7413aa14ea25d025cf13e;hp=06c0c0868b3555b6887647e167bbd0bea1f2feeb;hpb=70afa48b26b8242b39a57d55996fc0e0f41c06af;p=sbcl.git diff --git a/tests/pprint.impure.lisp b/tests/pprint.impure.lisp index 06c0c08..4f10bd0 100644 --- a/tests/pprint.impure.lisp +++ b/tests/pprint.impure.lisp @@ -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)) @@ -113,7 +113,7 @@ ;;; 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)) @@ -172,7 +172,7 @@ (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))) @@ -212,7 +212,7 @@ ;;; 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)))) @@ -235,5 +235,73 @@ (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 "#" + (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)"))) + ;;; success