Moved unstable/cce/class to unstable/class.
This commit is contained in:
parent
584fac8419
commit
86a3c3ed18
94
collects/tests/unstable/class.rkt
Normal file
94
collects/tests/unstable/class.rkt
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
#lang racket
|
||||||
|
|
||||||
|
(require rackunit rackunit/text-ui unstable/class "helpers.rkt")
|
||||||
|
|
||||||
|
(run-tests
|
||||||
|
(test-suite "class.ss"
|
||||||
|
|
||||||
|
(test-suite "Predicates and Contracts"
|
||||||
|
|
||||||
|
(test-suite "class-or-interface/c"
|
||||||
|
(test (check-ok (with/c class-or-interface/c object%)))
|
||||||
|
(test (check-ok (with/c class-or-interface/c (interface ()))))
|
||||||
|
(test (check-bad (with/c class-or-interface/c (new object%)))))
|
||||||
|
|
||||||
|
(test-suite "object-provides/c"
|
||||||
|
(test-ok (with/c (object-provides/c) (new object%)))
|
||||||
|
(test-ok (define c% (class object% (super-new)))
|
||||||
|
(with/c (object-provides/c c%) (new c%)))
|
||||||
|
(test-ok (define i<%> (interface ()))
|
||||||
|
(define c% (class* object% (i<%>) (super-new)))
|
||||||
|
(with/c (object-provides/c i<%>) (new c%)))
|
||||||
|
(test-bad (define c% (class object% (super-new)))
|
||||||
|
(with/c (object-provides/c c%) (new object%)))
|
||||||
|
(test-bad (define i<%> (interface ()))
|
||||||
|
(with/c (object-provides/c i<%>) (new object%)))
|
||||||
|
(test-bad (with/c (object-provides/c) object%)))
|
||||||
|
|
||||||
|
(test-suite "class-provides/c"
|
||||||
|
(test-ok (with/c (class-provides/c) object%))
|
||||||
|
(test-ok (define c% (class object% (super-new)))
|
||||||
|
(with/c (class-provides/c c%) c%))
|
||||||
|
(test-ok (define c% (class object% (super-new)))
|
||||||
|
(with/c (class-provides/c object%) c%))
|
||||||
|
(test-ok (define i<%> (interface ()))
|
||||||
|
(define c% (class* object% (i<%>) (super-new)))
|
||||||
|
(with/c (class-provides/c i<%>) c%))
|
||||||
|
(test-bad (define c% (class object% (super-new)))
|
||||||
|
(with/c (class-provides/c c%) object%))
|
||||||
|
(test-bad (define i<%> (interface ()))
|
||||||
|
(with/c (class-provides/c i<%>) object%)))
|
||||||
|
|
||||||
|
(test-suite "mixin-provides/c"
|
||||||
|
(test-ok ((with/c (mixin-provides/c [] []) values) object%))
|
||||||
|
(test-bad (define i<%> (interface ()))
|
||||||
|
((with/c (mixin-provides/c [i<%>] []) values) object%))
|
||||||
|
(test-bad (define i<%> (interface ()))
|
||||||
|
((with/c (mixin-provides/c [i<%>] []) values) object%))))
|
||||||
|
|
||||||
|
(test-suite "Mixins"
|
||||||
|
|
||||||
|
(test-suite "ensure-interface"
|
||||||
|
(test-case "implementation unchanged"
|
||||||
|
(let* ([i<%> (interface ())]
|
||||||
|
[c% (class* object% (i<%>) (super-new))]
|
||||||
|
[mx (lambda (parent%) (class* parent% (i<%>) (super-new)))])
|
||||||
|
(check-eq? (ensure-interface i<%> mx c%) c%)))
|
||||||
|
(test-case "non-implementation subclassed"
|
||||||
|
(let* ([i<%> (interface ())]
|
||||||
|
[c% (class object% (super-new))]
|
||||||
|
[mx (lambda (parent%) (class* parent% (i<%>) (super-new)))]
|
||||||
|
[result (ensure-interface i<%> mx c%)])
|
||||||
|
(check-pred class? result)
|
||||||
|
(check subclass? result c%)
|
||||||
|
(check implementation? result i<%>)))))
|
||||||
|
|
||||||
|
(test-suite "Messages"
|
||||||
|
|
||||||
|
(test-suite "send+"
|
||||||
|
(test-case "no messages"
|
||||||
|
(let* ([o (new object%)])
|
||||||
|
(check-eq? (send+ o) o)))
|
||||||
|
(test-case "multiple messages"
|
||||||
|
(let* ([c% (class object%
|
||||||
|
(super-new)
|
||||||
|
(init-field count)
|
||||||
|
(define/public (add n) (set! count (+ count n)))
|
||||||
|
(define/public (get) count))]
|
||||||
|
[o (new c% [count 0])])
|
||||||
|
(check-eq? (send+ o [add 1] [add 2]) o)
|
||||||
|
(check = (send o get) 3))))
|
||||||
|
|
||||||
|
(test-suite "send-each"
|
||||||
|
(test-case "counter"
|
||||||
|
(let* ([c% (class object%
|
||||||
|
(super-new)
|
||||||
|
(init-field count)
|
||||||
|
(define/public (add n) (set! count (+ count n)))
|
||||||
|
(define/public (get) count))]
|
||||||
|
[o1 (new c% [count 1])]
|
||||||
|
[o2 (new c% [count 2])]
|
||||||
|
[o3 (new c% [count 3])])
|
||||||
|
(send-each (list o1 o2 o3) add 3)
|
||||||
|
(check-equal? (list (send o1 get) (send o2 get) (send o3 get))
|
||||||
|
(list 4 5 6))))))))
|
|
@ -16,8 +16,6 @@
|
||||||
@include-section["syntax.scrbl"]
|
@include-section["syntax.scrbl"]
|
||||||
@include-section["define.scrbl"]
|
@include-section["define.scrbl"]
|
||||||
|
|
||||||
@include-section["class.scrbl"]
|
|
||||||
|
|
||||||
@include-section["require-provide.scrbl"]
|
@include-section["require-provide.scrbl"]
|
||||||
@include-section["planet.scrbl"]
|
@include-section["planet.scrbl"]
|
||||||
|
|
||||||
|
|
|
@ -1,97 +0,0 @@
|
||||||
#lang scheme
|
|
||||||
|
|
||||||
(require "checks.ss"
|
|
||||||
"../class.ss")
|
|
||||||
|
|
||||||
(provide class-suite)
|
|
||||||
|
|
||||||
(define class-suite
|
|
||||||
(test-suite "class.ss"
|
|
||||||
|
|
||||||
(test-suite "Predicates and Contracts"
|
|
||||||
|
|
||||||
(test-suite "class-or-interface/c"
|
|
||||||
(test (check-ok (with/c class-or-interface/c object%)))
|
|
||||||
(test (check-ok (with/c class-or-interface/c (interface ()))))
|
|
||||||
(test (check-bad (with/c class-or-interface/c (new object%)))))
|
|
||||||
|
|
||||||
(test-suite "object-provides/c"
|
|
||||||
(test-ok (with/c (object-provides/c) (new object%)))
|
|
||||||
(test-ok (define c% (class object% (super-new)))
|
|
||||||
(with/c (object-provides/c c%) (new c%)))
|
|
||||||
(test-ok (define i<%> (interface ()))
|
|
||||||
(define c% (class* object% (i<%>) (super-new)))
|
|
||||||
(with/c (object-provides/c i<%>) (new c%)))
|
|
||||||
(test-bad (define c% (class object% (super-new)))
|
|
||||||
(with/c (object-provides/c c%) (new object%)))
|
|
||||||
(test-bad (define i<%> (interface ()))
|
|
||||||
(with/c (object-provides/c i<%>) (new object%)))
|
|
||||||
(test-bad (with/c (object-provides/c) object%)))
|
|
||||||
|
|
||||||
(test-suite "class-provides/c"
|
|
||||||
(test-ok (with/c (class-provides/c) object%))
|
|
||||||
(test-ok (define c% (class object% (super-new)))
|
|
||||||
(with/c (class-provides/c c%) c%))
|
|
||||||
(test-ok (define c% (class object% (super-new)))
|
|
||||||
(with/c (class-provides/c object%) c%))
|
|
||||||
(test-ok (define i<%> (interface ()))
|
|
||||||
(define c% (class* object% (i<%>) (super-new)))
|
|
||||||
(with/c (class-provides/c i<%>) c%))
|
|
||||||
(test-bad (define c% (class object% (super-new)))
|
|
||||||
(with/c (class-provides/c c%) object%))
|
|
||||||
(test-bad (define i<%> (interface ()))
|
|
||||||
(with/c (class-provides/c i<%>) object%)))
|
|
||||||
|
|
||||||
(test-suite "mixin-provides/c"
|
|
||||||
(test-ok ((with/c (mixin-provides/c [] []) values) object%))
|
|
||||||
(test-bad (define i<%> (interface ()))
|
|
||||||
((with/c (mixin-provides/c [i<%>] []) values) object%))
|
|
||||||
(test-bad (define i<%> (interface ()))
|
|
||||||
((with/c (mixin-provides/c [i<%>] []) values) object%))))
|
|
||||||
|
|
||||||
(test-suite "Mixins"
|
|
||||||
|
|
||||||
(test-suite "ensure-interface"
|
|
||||||
(test-case "implementation unchanged"
|
|
||||||
(let* ([i<%> (interface ())]
|
|
||||||
[c% (class* object% (i<%>) (super-new))]
|
|
||||||
[mx (lambda (parent%) (class* parent% (i<%>) (super-new)))])
|
|
||||||
(check-eq? (ensure-interface i<%> mx c%) c%)))
|
|
||||||
(test-case "non-implementation subclassed"
|
|
||||||
(let* ([i<%> (interface ())]
|
|
||||||
[c% (class object% (super-new))]
|
|
||||||
[mx (lambda (parent%) (class* parent% (i<%>) (super-new)))]
|
|
||||||
[result (ensure-interface i<%> mx c%)])
|
|
||||||
(check-pred class? result)
|
|
||||||
(check subclass? result c%)
|
|
||||||
(check implementation? result i<%>)))))
|
|
||||||
|
|
||||||
(test-suite "Messages"
|
|
||||||
|
|
||||||
(test-suite "send+"
|
|
||||||
(test-case "no messages"
|
|
||||||
(let* ([o (new object%)])
|
|
||||||
(check-eq? (send+ o) o)))
|
|
||||||
(test-case "multiple messages"
|
|
||||||
(let* ([c% (class object%
|
|
||||||
(super-new)
|
|
||||||
(init-field count)
|
|
||||||
(define/public (add n) (set! count (+ count n)))
|
|
||||||
(define/public (get) count))]
|
|
||||||
[o (new c% [count 0])])
|
|
||||||
(check-eq? (send+ o [add 1] [add 2]) o)
|
|
||||||
(check = (send o get) 3))))
|
|
||||||
|
|
||||||
(test-suite "send-each"
|
|
||||||
(test-case "counter"
|
|
||||||
(let* ([c% (class object%
|
|
||||||
(super-new)
|
|
||||||
(init-field count)
|
|
||||||
(define/public (add n) (set! count (+ count n)))
|
|
||||||
(define/public (get) count))]
|
|
||||||
[o1 (new c% [count 1])]
|
|
||||||
[o2 (new c% [count 2])]
|
|
||||||
[o3 (new c% [count 3])])
|
|
||||||
(send-each (list o1 o2 o3) add 3)
|
|
||||||
(check-equal? (list (send o1 get) (send o2 get) (send o3 get))
|
|
||||||
(list 4 5 6))))))))
|
|
|
@ -1,7 +1,6 @@
|
||||||
#lang scheme
|
#lang scheme
|
||||||
|
|
||||||
(require "checks.ss"
|
(require "checks.ss"
|
||||||
"test-class.ss"
|
|
||||||
"test-debug.ss"
|
"test-debug.ss"
|
||||||
"test-define.ss"
|
"test-define.ss"
|
||||||
"test-dict.ss"
|
"test-dict.ss"
|
||||||
|
@ -13,7 +12,6 @@
|
||||||
|
|
||||||
(run-tests
|
(run-tests
|
||||||
(test-suite "scheme.plt"
|
(test-suite "scheme.plt"
|
||||||
class-suite
|
|
||||||
debug-suite
|
debug-suite
|
||||||
define-suite
|
define-suite
|
||||||
dict-suite
|
dict-suite
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#lang scheme/base
|
#lang racket/base
|
||||||
(require scheme/contract scheme/class
|
(require racket/contract racket/class
|
||||||
(for-syntax scheme/base))
|
(for-syntax racket/base))
|
||||||
|
|
||||||
(define class-or-interface/c (or/c class? interface?))
|
(define class-or-interface/c (or/c class? interface?))
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
#lang scribble/doc
|
#lang scribble/manual
|
||||||
@(require scribble/manual
|
@(require scribble/eval "utils.rkt" (for-label racket unstable/class))
|
||||||
scribble/eval
|
|
||||||
"../scribble.ss"
|
|
||||||
"eval.ss")
|
|
||||||
@(require (for-label scheme unstable/cce/class))
|
|
||||||
|
|
||||||
@title[#:style 'quiet #:tag "cce-class"]{Classes and Objects}
|
@title{Classes and Objects}
|
||||||
|
|
||||||
@defmodule[unstable/cce/class]
|
@defmodule[unstable/class]
|
||||||
|
|
||||||
|
@unstable[@author+email["Carl Eastlund" "cce@racket-lang.org"]]
|
||||||
|
|
||||||
This module provides tools for classes, objects, and mixins.
|
This module provides tools for classes, objects, and mixins.
|
||||||
|
|
||||||
|
@ -59,7 +57,7 @@ Returns @scheme[c%] if it implements @scheme[i<%>]; otherwise, returns
|
||||||
Sends each message (with arguments) to @scheme[obj], then returns @scheme[obj].
|
Sends each message (with arguments) to @scheme[obj], then returns @scheme[obj].
|
||||||
|
|
||||||
@defexamples[
|
@defexamples[
|
||||||
#:eval (evaluator 'unstable/cce/class)
|
#:eval (eval/require 'racket/class 'unstable/class)
|
||||||
(define c%
|
(define c%
|
||||||
(class object%
|
(class object%
|
||||||
(super-new)
|
(super-new)
|
||||||
|
@ -75,7 +73,7 @@ Sends the message to each object in the list @scheme[objs], returning
|
||||||
@scheme[(void)].
|
@scheme[(void)].
|
||||||
|
|
||||||
@defexamples[
|
@defexamples[
|
||||||
#:eval (evaluator 'unstable/cce/class)
|
#:eval (eval/require 'racket/class 'unstable/class)
|
||||||
(define c%
|
(define c%
|
||||||
(class object%
|
(class object%
|
||||||
(super-new)
|
(super-new)
|
|
@ -72,6 +72,7 @@ Keep documentation and tests up to date.
|
||||||
}
|
}
|
||||||
|
|
||||||
@include-section["bytes.scrbl"]
|
@include-section["bytes.scrbl"]
|
||||||
|
@include-section["class.scrbl"]
|
||||||
@include-section["contract.scrbl"]
|
@include-section["contract.scrbl"]
|
||||||
@include-section["dirs.scrbl"]
|
@include-section["dirs.scrbl"]
|
||||||
@include-section["exn.scrbl"]
|
@include-section["exn.scrbl"]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user