Files
lime/test/x11-session-settings.lisp
2026-10-02 14:14:47 -05:00

51 lines
3.3 KiB
Common Lisp

(in-package #:lime.x11.test)
(in-suite lime-x11-suite)
(test cursor-resource-edits-preserve-unrelated-records
(let* ((original (format nil "! comment~%Xft.dpi: 96~% Xcursor.theme : Adwaita~%st.value: foo\\~%Xcursor.size: not-a-resource~%last: no newline"))
(next (lime.x11::%replace-cursor-resource original "Xcursor.theme"
(list (format nil "Xcursor.theme: Bibata~%"))))
(state (lime.x11::make-cursor-session-settings
:resources-before original :resources-last next :resources-owned-p t)))
(is (= 5 (length (lime.x11::%cursor-resource-records original))))
(is (null (lime.x11::%cursor-resource-entries original "Xcursor.size")))
(is (search (format nil "st.value: foo\\~%Xcursor.size: not-a-resource~%") next))
(is (equal original (lime.x11::%unpublished-cursor-resources state next)))
(let ((external (concatenate 'string next (format nil "Other.setting: changed~%"))))
(is (search "Other.setting: changed" (lime.x11::%unpublished-cursor-resources state external)))
(is (equal (lime.x11::%cursor-resource-entries original "Xcursor.theme")
(lime.x11::%cursor-resource-entries
(lime.x11::%unpublished-cursor-resources state external) "Xcursor.theme"))))
(let ((external (lime.x11::%replace-cursor-resource next "Xcursor.theme"
(list (format nil "Xcursor.theme: Other~%")))))
(is (equal external (lime.x11::%unpublished-cursor-resources state external))))
(is (equal "" (lime.x11::%replace-cursor-resource nil "Xcursor.theme" nil)))
(is (null (lime.x11::%unpublished-cursor-resources
(lime.x11::make-cursor-session-settings :resources-before nil :resources-last next
:resources-owned-p t) next)))))
(test cursor-settings-wire-encoding
(let ((bytes (lime.x11::%xsettings-cursor-bytes "Ice" 24 #x12345678)))
(is (equalp #(0 0 0 0 120 86 52 18 2 0 0 0 1 0 19 0) (subseq bytes 0 16)))
(is (equalp #(71 116 107 47 67 117 114 115 111 114 84 104 101 109 101 78 97 109 101 0)
(subseq bytes 16 36)))
(is (equalp #(120 86 52 18 3 0 0 0 73 99 101 0 0 0 19 0) (subseq bytes 36 52)))
(is (equalp #(120 86 52 18 24 0 0 0) (subseq bytes 72 80))))
(is (= 12 (length (lime.x11::%xsettings-cursor-bytes nil nil 1))))
(is (= 48 (length (lime.x11::%xsettings-cursor-bytes "氷" nil 1))))
(dolist (bad (list (format nil "Ice~%Xft.dpi: 999") (format nil "Ice~C" #\Return)))
(signals invalid-transition
(lime.x11::%validate-ui-cursor-style (make-ui-cursor-style :theme bad)))))
(test cursor-child-environment-is-an-argument-vector
(let* ((backend (lime.x11::%make-x11-backend))
(argv '("program" "argument with spaces" "$no-shell-expansion")))
(unwind-protect
(progn
(is (eq argv (lime.x11::%cursor-session-launch-argv backend argv)))
(setf (gethash backend lime.x11::*cursor-session-settings*)
(lime.x11::make-cursor-session-settings :theme "A theme" :size 32))
(is (equal (append '("env" "XCURSOR_THEME=A theme" "XCURSOR_SIZE=32") argv)
(lime.x11::%cursor-session-launch-argv backend argv))))
(remhash backend lime.x11::*cursor-session-settings*))))