;;;; goops.test --- test suite for GOOPS -*- scheme -*- ;;;; ;;;; Copyright (C) 2001, 2003 Free Software Foundation, Inc. ;;;; ;;;; This program is free software; you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by ;;;; the Free Software Foundation; either version 2, or (at your option) ;;;; any later version. ;;;; ;;;; This program is distributed in the hope that it will be useful, ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;;; GNU General Public License for more details. ;;;; ;;;; You should have received a copy of the GNU General Public License ;;;; along with this software; see the file COPYING. If not, write to ;;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330, ;;;; Boston, MA 02111-1307 USA (use-modules (test-suite lib)) (pass-if "GOOPS loads" (false-if-exception (begin (resolve-module '(oop goops)) #t))) (use-modules (oop goops)) ;;; more tests here... (with-test-prefix "basic classes" (with-test-prefix "" (pass-if "instance?" (instance? )) (pass-if "class-of" (eq? (class-of ) )) (pass-if "is a class?" (is-a? )) (pass-if "class-name" (eq? (class-name ) ')) (pass-if "direct superclasses" (equal? (class-direct-supers ) '())) (pass-if "superclasses" (equal? (class-precedence-list ) (list ))) (pass-if "direct slots" (equal? (class-direct-slots ) '())) (pass-if "slots" (equal? (class-slots ) '()))) (with-test-prefix "" (pass-if "instance?" (instance? )) (pass-if "class-of" (eq? (class-of ) )) (pass-if "is a class?" (is-a? )) (pass-if "class-name" (eq? (class-name ) ')) (pass-if "direct superclasses" (equal? (class-direct-supers ) (list ))) (pass-if "superclasses" (equal? (class-precedence-list ) (list ))) (pass-if "direct slots" (equal? (class-direct-slots ) '())) (pass-if "slots" (equal? (class-slots ) '()))) (with-test-prefix "" (pass-if "instance?" (instance? )) (pass-if "class-of" (eq? (class-of ) )) (pass-if "is a class?" (is-a? )) (pass-if "class-name" (eq? (class-name ) ')) (pass-if "direct superclass" (equal? (class-direct-supers ) (list ))))) (with-test-prefix "defining classes" (with-test-prefix "define-class" (pass-if "creating a new binding" (eval '(define #f) (current-module)) (eval '(undefine ) (current-module)) (eval '(define-class ()) (current-module)) (eval '(is-a? ) (current-module))) (pass-if "overwriting a binding to a non-class" (eval '(define #f) (current-module)) (eval '(define-class ()) (current-module)) (eval '(is-a? ) (current-module))))) (with-test-prefix "defining generics" (with-test-prefix "define-generic" (pass-if "creating a new top-level binding" (eval '(define foo #f) (current-module)) (eval '(undefine foo) (current-module)) (eval '(define-generic foo) (current-module)) (eval '(and (is-a? foo ) (null? (generic-function-methods foo))) (current-module))) (pass-if "overwriting a top-level binding to a non-generic" (eval '(define (foo) #f) (current-module)) (eval '(define-generic foo) (current-module)) (eval '(and (is-a? foo ) (= 1 (length (generic-function-methods foo)))) (current-module))) (pass-if "overwriting a top-level binding to a generic" (eval '(define (foo) #f) (current-module)) (eval '(define-generic foo) (current-module)) (eval '(define-generic foo) (current-module)) (eval '(and (is-a? foo ) (null? (generic-function-methods foo))) (current-module))))) (with-test-prefix "defining accessors" (with-test-prefix "define-accessor" (pass-if "creating a new top-level binding" (eval '(define foo #f) (current-module)) (eval '(undefine foo) (current-module)) (eval '(define-accessor foo) (current-module)) (eval '(and (is-a? foo ) (null? (generic-function-methods foo))) (current-module))) (pass-if "overwriting a top-level binding to a non-accessor" (eval '(define (foo) #f) (current-module)) (eval '(define-accessor foo) (current-module)) (eval '(and (is-a? foo ) (= 1 (length (generic-function-methods foo)))) (current-module))) (pass-if "overwriting a top-level binding to an accessor" (eval '(define (foo) #f) (current-module)) (eval '(define-accessor foo) (current-module)) (eval '(define-accessor foo) (current-module)) (eval '(and (is-a? foo ) (null? (generic-function-methods foo))) (current-module))))) (with-test-prefix "object update" (pass-if "defining class" (eval '(define-class () (x #:accessor x #:init-value 123) (z #:accessor z #:init-value 789)) (current-module)) (eval '(is-a? ) (current-module))) (pass-if "making instance" (eval '(define foo (make )) (current-module)) (eval '(and (is-a? foo ) (= (x foo) 123)) (current-module))) (pass-if "redefining class" (eval '(define-class () (x #:accessor x #:init-value 123) (y #:accessor y #:init-value 456) (z #:accessor z #:init-value 789)) (current-module)) (eval '(and (= (y foo) 456) (= (z foo) 789)) (current-module)))) (use-modules (oop goops active-slot)) (with-test-prefix "active-slot" (pass-if "defining class with active slot" (eval '(begin (define z '()) (define-class () (x #:accessor x #:init-value 1 #:allocation #:active #:before-slot-ref (lambda (o) (set! z (cons 'before-ref z)) #t) #:after-slot-ref (lambda (o) (set! z (cons 'after-ref z))) #:before-slot-set! (lambda (o v) (set! z (cons* v 'before-set! z))) #:after-slot-set! (lambda (o v) (set! z (cons* v (x o) 'after-set! z)))) #:metaclass ) (define bar (make )) (x bar) (set! (x bar) 2) (equal? (reverse z) '(before-ref before-set! 1 before-ref after-ref after-set! 1 1 before-ref after-ref before-set! 2 before-ref after-ref after-set! 2 2))) (current-module))))