(defpackage :cl-tty-mouse-test (:use :cl :cl-tty.mouse :fiveam)) (in-package :cl-tty-mouse-test) (def-suite mouse-suite :description "Mouse tests") (in-suite mouse-suite) (def-test mouse-mixin-create () (let ((m (make-instance 'mouse-mixin))) (is-true (typep m 'mouse-mixin)))) (def-test mouse-hit-test-point () "hit-test returns nil when no component has position slots bound" (let ((obj (make-instance 'mouse-mixin))) (is-false (hit-test obj 0 0)) (is-false (hit-test obj 100 100)))) (def-test selection-set-and-get () (setf cl-tty.mouse::*selection* (make-selection :text "hello")) (is (equal "hello" (get-selection)))) ;; ── Selection tracking ────────────────────────────────────── (def-test start-selection-initializes-state () (start-selection 5 10) (is-true (selection-active-p)) (is (equal '(5 . 10) cl-tty.mouse::*selection-start*)) (is (equal '(5 . 10) cl-tty.mouse::*selection-end*)) (setf cl-tty.mouse::*selection-active* nil cl-tty.mouse::*selection-start* nil cl-tty.mouse::*selection-end* nil)) (def-test update-selection-moves-end () (start-selection 0 0) (update-selection 3 7) (is (equal '(3 . 7) cl-tty.mouse::*selection-end*)) (setf cl-tty.mouse::*selection-active* nil cl-tty.mouse::*selection-start* nil cl-tty.mouse::*selection-end* nil)) (def-test finalize-selection-extracts-text () (let* ((fb-be (cl-tty.rendering:make-framebuffer-backend)) (fb (cl-tty.rendering:fb-framebuffer fb-be))) (cl-tty.backend:draw-text fb-be 0 0 "hello" nil nil) (cl-tty.backend:draw-text fb-be 0 1 "world" nil nil) (start-selection 0 0) (update-selection 4 1) (let ((text (finalize-selection fb))) (is (equal "hello world" text))))) (defpackage :cl-tty-mouse-test (:use :cl :cl-tty.mouse :fiveam)) (in-package :cl-tty-mouse-test) (def-suite mouse-suite :description "Mouse tests") (in-suite mouse-suite) (def-test mouse-mixin-create () (let ((m (make-instance 'mouse-mixin))) (is-true (typep m 'mouse-mixin)))) (def-test mouse-hit-test-point () "hit-test returns nil when no component has position slots bound" (let ((obj (make-instance 'mouse-mixin))) (is-false (hit-test obj 0 0)) (is-false (hit-test obj 100 100)))) (def-test selection-set-and-get () (setf cl-tty.mouse::*selection* (make-selection :text "hello")) (is (equal "hello" (get-selection)))) ;; ── Selection tracking ────────────────────────────────────── (def-test start-selection-initializes-state () (start-selection 5 10) (is-true (selection-active-p)) (is (equal '(5 . 10) cl-tty.mouse::*selection-start*)) (is (equal '(5 . 10) cl-tty.mouse::*selection-end*)) (setf cl-tty.mouse::*selection-active* nil cl-tty.mouse::*selection-start* nil cl-tty.mouse::*selection-end* nil)) (def-test update-selection-moves-end () (start-selection 0 0) (update-selection 3 7) (is (equal '(3 . 7) cl-tty.mouse::*selection-end*)) (setf cl-tty.mouse::*selection-active* nil cl-tty.mouse::*selection-start* nil cl-tty.mouse::*selection-end* nil)) (def-test finalize-selection-extracts-text () (let* ((fb-be (cl-tty.rendering:make-framebuffer-backend)) (fb (cl-tty.rendering:fb-framebuffer fb-be))) (cl-tty.backend:draw-text fb-be 0 0 "hello" nil nil) (cl-tty.backend:draw-text fb-be 0 1 "world" nil nil) (start-selection 0 0) (update-selection 4 1) (let ((text (finalize-selection fb))) (is (equal "hello world" text))))) (defpackage :cl-tty-mouse-test (:use :cl :cl-tty.mouse :fiveam)) (in-package :cl-tty-mouse-test) (def-suite mouse-suite :description "Mouse tests") (in-suite mouse-suite) (def-test mouse-mixin-create () (let ((m (make-instance 'mouse-mixin))) (is-true (typep m 'mouse-mixin)))) (def-test mouse-hit-test-point () "hit-test returns nil when no component has position slots bound" (let ((obj (make-instance 'mouse-mixin))) (is-false (hit-test obj 0 0)) (is-false (hit-test obj 100 100)))) (def-test selection-set-and-get () (setf cl-tty.mouse::*selection* (make-selection :text "hello")) (is (equal "hello" (get-selection)))) ;; ── Selection tracking ────────────────────────────────────── (def-test start-selection-initializes-state () (start-selection 5 10) (is-true (selection-active-p)) (is (equal '(5 . 10) cl-tty.mouse::*selection-start*)) (is (equal '(5 . 10) cl-tty.mouse::*selection-end*)) (setf cl-tty.mouse::*selection-active* nil cl-tty.mouse::*selection-start* nil cl-tty.mouse::*selection-end* nil)) (def-test update-selection-moves-end () (start-selection 0 0) (update-selection 3 7) (is (equal '(3 . 7) cl-tty.mouse::*selection-end*)) (setf cl-tty.mouse::*selection-active* nil cl-tty.mouse::*selection-start* nil cl-tty.mouse::*selection-end* nil)) (def-test finalize-selection-extracts-text () (let* ((fb-be (cl-tty.rendering:make-framebuffer-backend)) (fb (cl-tty.rendering:fb-framebuffer fb-be))) (cl-tty.backend:draw-text fb-be 0 0 "hello" nil nil) (cl-tty.backend:draw-text fb-be 0 1 "world" nil nil) (start-selection 0 0) (update-selection 4 1) (let ((text (finalize-selection fb))) (is (equal "hello world" text)))))