X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fclos.impure.lisp;h=b183624b3976a6c3c13bf6301938e66d18a4aa0f;hb=4ed3f0d08c3a57a6762018d9622f253ab9d0f2b6;hp=da5e1aa94c64303356e3c1be5964d7d3a62eb39f;hpb=3abdab003d4cdb02d7386dcd4bc8d9ac4dafb359;p=sbcl.git diff --git a/tests/clos.impure.lisp b/tests/clos.impure.lisp index da5e1aa..b183624 100644 --- a/tests/clos.impure.lisp +++ b/tests/clos.impure.lisp @@ -700,5 +700,37 @@ (declare (notinline slot-value)) a)) +;;; from CLHS 7.6.5.1 +(defclass character-class () ((char :initarg :char))) +(defclass picture-class () ((glyph :initarg :glyph))) +(defclass character-picture-class (character-class picture-class) ()) + +(defmethod width ((c character-class) &key font) font) +(defmethod width ((p picture-class) &key pixel-size) pixel-size) + +(assert (raises-error? + (width (make-instance 'character-class :char #\Q) + :font 'baskerville :pixel-size 10) + program-error)) +(assert (raises-error? + (width (make-instance 'picture-class :glyph #\Q) + :font 'baskerville :pixel-size 10) + program-error)) +(assert (eq (width (make-instance 'character-picture-class :char #\Q) + :font 'baskerville :pixel-size 10) + 'baskerville)) + +;;; class redefinition shouldn't give any warnings, in the usual case +(defclass about-to-be-redefined () ((some-slot :accessor some-slot))) +(handler-bind ((warning #'error)) + (defclass about-to-be-redefined () ((some-slot :accessor some-slot)))) + +;;; attempts to add accessorish methods to generic functions with more +;;; complex lambda lists should fail +(defgeneric accessoroid (object &key &allow-other-keys)) +(assert (raises-error? + (defclass accessoroid-class () ((slot :accessor accessoroid))) + program-error)) + ;;;; success (sb-ext:quit :unix-status 104)