(define-module (tests scene) #:use-module (catbird mode) #:use-module (catbird node) #:use-module (catbird scene) #:use-module (oop goops) #:use-module (srfi srfi-64) #:use-module (tests utils)) (define-class ()) (with-tests "scene" (test-group "$" (let ((scene (make ))) (test-eq "no arguments" (with-scene scene ($)) scene)) (let ((scene (make )) (node (make #:name 'foo))) (test-eq "one argument" (with-scene scene (attach-to scene node) ($ foo)) node))) (let ((scene (make )) (node (make #:name 'foo))) (test-eq "add-to-scene" (with-scene scene (add-to-scene node) (child-ref scene 'foo)) node)) (test-eq "initial major mode" (class-of (major-mode (make ))) ) (test-group "replace-major-mode" (test-eq "replacing does not add to the mode stack" (let ((scene (make ))) (replace-major-mode scene (make )) (pop-major-mode scene) (class-of (major-mode scene))) ) (test-assert "exits previous mode, enters new one" (let ((scene (make )) (entered? #f) (exited? #f)) (define-class ()) (define-class ()) (define-method (on-exit (mode )) (set! exited? #t)) (define-method (on-enter (mode )) (set! entered? #t)) (replace-major-mode scene (make )) (replace-major-mode scene (make )) (and entered? exited?)))) (test-group "push-major-mode" (test-eq "adds previous mode to the mode stack so it can be restored" (let ((scene (make ))) (push-major-mode scene (make )) (pop-major-mode scene) (class-of (major-mode scene))) ) (test-assert "pauses the previous mode, enters new one" (let ((scene (make )) (paused? #f) (entered? #f)) (define-class ()) (define-class ()) (define-method (on-pause (mode )) (set! paused? #t)) (define-method (on-enter (mode )) (set! entered? #t)) (push-major-mode scene (make )) (push-major-mode scene (make )) (and paused? entered?)))) (test-group "pop-major-mode" (test-eq "does nothing when there is no previous major mode" (let ((scene (make ))) (pop-major-mode scene) (class-of (major-mode scene))) ) (test-assert "returns to previous major mode" (let ((scene (make ))) (push-major-mode scene (make )) (and (eq? (class-of (major-mode scene)) ) (begin (pop-major-mode scene) (eq? (class-of (major-mode scene)) )))))))