#lang racket/base (require racket/class "media-item.rkt") (provide media-container%) ;; A media container contains media-item% instances. An item can itself be ;; another media-container%, or it can be a track<%>. (define media-container% (class media-item% (init [id #f]) (super-new [id id] [kind 'container]) (abstract get-title get-items get-track-reliver))) (module+ test (require rackunit) (define track-reliver (lambda (track-factory-id track-relive-info) (list track-factory-id track-relive-info))) (define test-container% (class media-container% (super-new [id 'container-id]) (define/override (get-title) "Container") (define/override (get-items) '()) (define/override (get-track-reliver) track-reliver))) (define container (new test-container%)) (check-equal? (send container get-id) 'container-id) (check-equal? (send container get-kind) 'container) (check-eq? (send container get-container) container) (check-false (send container get-track)) (check-equal? (send container get-title) "Container") (check-equal? (send container get-items) '()) (check-eq? (send container get-track-reliver) track-reliver))