100 lines
3.6 KiB
Common Lisp
100 lines
3.6 KiB
Common Lisp
(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)))))
|