diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test-video-audio-recording--get-available-mics.el | 18 | ||||
| -rw-r--r-- | tests/test-video-audio-recording--get-available-sinks.el | 16 | ||||
| -rw-r--r-- | tests/test-video-audio-recording-quick-setup.el | 174 |
3 files changed, 86 insertions, 122 deletions
diff --git a/tests/test-video-audio-recording--get-available-mics.el b/tests/test-video-audio-recording--get-available-mics.el index 2fea0d7a..de9335af 100644 --- a/tests/test-video-audio-recording--get-available-mics.el +++ b/tests/test-video-audio-recording--get-available-mics.el @@ -6,6 +6,7 @@ ;; - Monitor sources are excluded (they capture output, not input) ;; - Muted sources are excluded ;; - Friendly descriptions from PulseAudio are used +;; - PulseAudio state is included ;;; Code: @@ -38,7 +39,7 @@ Each source is (name description mute state)." ("alsa_output.usb-Jabra.monitor" "Monitor of Jabra" "no" "SUSPENDED")))))) (let ((mics (cj/recording--get-available-mics))) (should (= 1 (length mics))) - (should (equal "alsa_input.usb-Jabra.mono" (car (car mics))))))) + (should (equal "alsa_input.usb-Jabra.mono" (nth 0 (car mics))))))) (ert-deftest test-video-audio-recording--get-available-mics-normal-filters-muted () "Test that muted sources are excluded from mic list." @@ -49,16 +50,25 @@ Each source is (name description mute state)." ("muted-mic" "Muted Mic" "yes" "SUSPENDED")))))) (let ((mics (cj/recording--get-available-mics))) (should (= 1 (length mics))) - (should (equal "active-mic" (car (car mics))))))) + (should (equal "active-mic" (nth 0 (car mics))))))) (ert-deftest test-video-audio-recording--get-available-mics-normal-uses-descriptions () - "Test that friendly descriptions are returned as cdr." + "Test that friendly descriptions are returned as second element." (cl-letf (((symbol-function 'shell-command-to-string) (lambda (_cmd) (test-mics--make-pactl-output '(("raw-device-name" "Friendly Device Name" "no" "IDLE")))))) (let ((mics (cj/recording--get-available-mics))) - (should (equal "Friendly Device Name" (cdr (car mics))))))) + (should (equal "Friendly Device Name" (nth 1 (car mics))))))) + +(ert-deftest test-video-audio-recording--get-available-mics-normal-includes-state () + "Test that PulseAudio state is returned as third element." + (cl-letf (((symbol-function 'shell-command-to-string) + (lambda (_cmd) + (test-mics--make-pactl-output + '(("mic-a" "Mic A" "no" "RUNNING")))))) + (let ((mics (cj/recording--get-available-mics))) + (should (equal "RUNNING" (nth 2 (car mics))))))) (ert-deftest test-video-audio-recording--get-available-mics-normal-multiple-mics () "Test that multiple non-muted, non-monitor mics are returned." diff --git a/tests/test-video-audio-recording--get-available-sinks.el b/tests/test-video-audio-recording--get-available-sinks.el index 540c4f0f..a8e7ad6a 100644 --- a/tests/test-video-audio-recording--get-available-sinks.el +++ b/tests/test-video-audio-recording--get-available-sinks.el @@ -5,6 +5,7 @@ ;; Verifies that available sinks are discovered correctly: ;; - Muted sinks are excluded ;; - Friendly descriptions from PulseAudio are used +;; - PulseAudio state is included ;;; Code: @@ -37,16 +38,25 @@ Each sink is (name description mute state)." ("muted-sink" "Muted Sink" "yes" "SUSPENDED")))))) (let ((sinks (cj/recording--get-available-sinks))) (should (= 1 (length sinks))) - (should (equal "active-sink" (car (car sinks))))))) + (should (equal "active-sink" (nth 0 (car sinks))))))) (ert-deftest test-get-available-sinks-normal-uses-descriptions () - "Test that friendly descriptions are returned as cdr." + "Test that friendly descriptions are returned as second element." (cl-letf (((symbol-function 'shell-command-to-string) (lambda (_cmd) (test-sinks--make-pactl-output '(("raw-sink-name" "Friendly Sink Name" "no" "IDLE")))))) (let ((sinks (cj/recording--get-available-sinks))) - (should (equal "Friendly Sink Name" (cdr (car sinks))))))) + (should (equal "Friendly Sink Name" (nth 1 (car sinks))))))) + +(ert-deftest test-get-available-sinks-normal-includes-state () + "Test that PulseAudio state is returned as third element." + (cl-letf (((symbol-function 'shell-command-to-string) + (lambda (_cmd) + (test-sinks--make-pactl-output + '(("sink-a" "Sink A" "no" "RUNNING")))))) + (let ((sinks (cj/recording--get-available-sinks))) + (should (equal "RUNNING" (nth 2 (car sinks))))))) (ert-deftest test-get-available-sinks-normal-multiple-sinks () "Test that multiple non-muted sinks are returned." diff --git a/tests/test-video-audio-recording-quick-setup.el b/tests/test-video-audio-recording-quick-setup.el index f082f86a..23314bd5 100644 --- a/tests/test-video-audio-recording-quick-setup.el +++ b/tests/test-video-audio-recording-quick-setup.el @@ -3,8 +3,10 @@ ;;; Commentary: ;; Unit tests for cj/recording-quick-setup function. ;; The quick setup is a two-step flow: -;; Step 1: Pick a microphone (with active/inactive indicators) -;; Step 2: Pick an audio output (sink) with active/inactive indicators +;; Step 1: Pick a microphone (with state labels) +;; Step 2: Pick an audio output (sink) with state labels +;; Both steps show [active - running], [active - idle], or +;; [inactive - suspended] after the device description. ;; The chosen sink's .monitor source is set as the system audio device. ;;; Code: @@ -37,14 +39,10 @@ (test-quick-setup-setup) (unwind-protect (cl-letf (((symbol-function 'cj/recording--get-available-mics) - (lambda () '(("jabra-input" . "Jabra SPEAK 510 Mono") - ("builtin-input" . "Built-in Analog")))) - ((symbol-function 'cj/recording--mic-active-p) - (lambda (_name) nil)) + (lambda () '(("jabra-input" "Jabra SPEAK 510 Mono" "SUSPENDED") + ("builtin-input" "Built-in Analog" "SUSPENDED")))) ((symbol-function 'cj/recording--get-available-sinks) - (lambda () '(("jds-labs" . "JDS Labs Element IV")))) - ((symbol-function 'cj/recording--sink-active-p) - (lambda (_name) nil)) + (lambda () '(("jds-labs" "JDS Labs Element IV" "RUNNING")))) ((symbol-function 'completing-read) (lambda (_prompt table &rest _args) (car (all-completions "" table))))) @@ -57,13 +55,9 @@ (test-quick-setup-setup) (unwind-protect (cl-letf (((symbol-function 'cj/recording--get-available-mics) - (lambda () '(("jabra-input" . "Jabra SPEAK 510 Mono")))) - ((symbol-function 'cj/recording--mic-active-p) - (lambda (_name) nil)) + (lambda () '(("jabra-input" "Jabra SPEAK 510 Mono" "SUSPENDED")))) ((symbol-function 'cj/recording--get-available-sinks) - (lambda () '(("alsa_output.usb-JDS_Labs-00.analog-stereo" . "JDS Labs Element IV")))) - ((symbol-function 'cj/recording--sink-active-p) - (lambda (_name) nil)) + (lambda () '(("alsa_output.usb-JDS_Labs-00.analog-stereo" "JDS Labs Element IV" "RUNNING")))) ((symbol-function 'completing-read) (lambda (_prompt table &rest _args) (car (all-completions "" table))))) @@ -78,13 +72,9 @@ (unwind-protect (let ((call-count 0)) (cl-letf (((symbol-function 'cj/recording--get-available-mics) - (lambda () '(("mic-1" . "Mic One")))) - ((symbol-function 'cj/recording--mic-active-p) - (lambda (_name) nil)) + (lambda () '(("mic-1" "Mic One" "SUSPENDED")))) ((symbol-function 'cj/recording--get-available-sinks) - (lambda () '(("sink-1" . "Sink One")))) - ((symbol-function 'cj/recording--sink-active-p) - (lambda (_name) nil)) + (lambda () '(("sink-1" "Sink One" "SUSPENDED")))) ((symbol-function 'completing-read) (lambda (_prompt table &rest _args) (setq call-count (1+ call-count)) @@ -93,21 +83,16 @@ (should (= 2 call-count)))) (test-quick-setup-teardown))) -(ert-deftest test-video-audio-recording-quick-setup-normal-active-mic-indicator () - "Test that active mics get the green mic icon in their label." +(ert-deftest test-video-audio-recording-quick-setup-normal-running-label () + "Test that RUNNING devices show [active - running] label." (test-quick-setup-setup) (unwind-protect (let ((mic-candidates nil) (call-count 0)) (cl-letf (((symbol-function 'cj/recording--get-available-mics) - (lambda () '(("active-mic" . "Active Mic") - ("idle-mic" . "Idle Mic")))) - ((symbol-function 'cj/recording--mic-active-p) - (lambda (name) (equal name "active-mic"))) + (lambda () '(("mic-1" "Running Mic" "RUNNING")))) ((symbol-function 'cj/recording--get-available-sinks) - (lambda () '(("sink-1" . "Sink One")))) - ((symbol-function 'cj/recording--sink-active-p) - (lambda (_name) nil)) + (lambda () '(("sink-1" "Sink One" "SUSPENDED")))) ((symbol-function 'completing-read) (lambda (_prompt table &rest _args) (setq call-count (1+ call-count)) @@ -116,99 +101,78 @@ (setq mic-candidates candidates)) (car candidates))))) (cj/recording-quick-setup) - ;; Both should have icon - (should (cl-some (lambda (c) (and (string-match-p "Active Mic" c) - (string-match-p "" c))) - mic-candidates)) - (should (cl-some (lambda (c) (and (string-match-p "Idle Mic" c) - (string-match-p "" c))) + (should (cl-some (lambda (c) (string-match-p "\\[active - running\\]" c)) mic-candidates)))) (test-quick-setup-teardown))) -(ert-deftest test-video-audio-recording-quick-setup-normal-active-mic-sorted-first () - "Test that active mics are sorted to the top of the list." +(ert-deftest test-video-audio-recording-quick-setup-normal-idle-label () + "Test that IDLE devices show [active - idle] label." (test-quick-setup-setup) (unwind-protect - (let ((mic-candidates nil) + (let ((sink-candidates nil) (call-count 0)) (cl-letf (((symbol-function 'cj/recording--get-available-mics) - (lambda () '(("idle-mic" . "Idle Mic") - ("active-mic" . "Active Mic")))) - ((symbol-function 'cj/recording--mic-active-p) - (lambda (name) (equal name "active-mic"))) + (lambda () '(("mic-1" "Mic One" "SUSPENDED")))) ((symbol-function 'cj/recording--get-available-sinks) - (lambda () '(("sink-1" . "Sink One")))) - ((symbol-function 'cj/recording--sink-active-p) - (lambda (_name) nil)) + (lambda () '(("sink-1" "Idle Sink" "IDLE")))) ((symbol-function 'completing-read) (lambda (_prompt table &rest _args) (setq call-count (1+ call-count)) (let ((candidates (all-completions "" table))) - (when (= call-count 1) - (setq mic-candidates candidates)) + (when (= call-count 2) + (setq sink-candidates candidates)) (car candidates))))) (cj/recording-quick-setup) - ;; First candidate should be the active mic - (should (string-match-p "Active Mic" (car mic-candidates))))) + (should (cl-some (lambda (c) (string-match-p "\\[active - idle\\]" c)) + sink-candidates)))) (test-quick-setup-teardown))) -(ert-deftest test-video-audio-recording-quick-setup-normal-active-sink-indicator () - "Test that active sinks get and inactive sinks get ." +(ert-deftest test-video-audio-recording-quick-setup-normal-suspended-label () + "Test that SUSPENDED devices show [inactive - suspended] label." (test-quick-setup-setup) (unwind-protect - (let ((sink-candidates nil) + (let ((mic-candidates nil) (call-count 0)) (cl-letf (((symbol-function 'cj/recording--get-available-mics) - (lambda () '(("mic-1" . "Mic One")))) - ((symbol-function 'cj/recording--mic-active-p) - (lambda (_name) nil)) + (lambda () '(("mic-1" "Suspended Mic" "SUSPENDED")))) ((symbol-function 'cj/recording--get-available-sinks) - (lambda () '(("active-sink" . "Active Sink") - ("inactive-sink" . "Inactive Sink")))) - ((symbol-function 'cj/recording--sink-active-p) - (lambda (name) (equal name "active-sink"))) + (lambda () '(("sink-1" "Sink One" "SUSPENDED")))) ((symbol-function 'completing-read) (lambda (_prompt table &rest _args) (setq call-count (1+ call-count)) (let ((candidates (all-completions "" table))) - (when (= call-count 2) - (setq sink-candidates candidates)) + (when (= call-count 1) + (setq mic-candidates candidates)) (car candidates))))) (cj/recording-quick-setup) - ;; Active sink should have icon - (should (cl-some (lambda (c) (and (string-match-p "Active Sink" c) - (string-match-p "" c))) - sink-candidates)) - ;; Inactive sink should have icon - (should (cl-some (lambda (c) (and (string-match-p "Inactive Sink" c) - (string-match-p "" c))) - sink-candidates)))) + (should (cl-some (lambda (c) (string-match-p "\\[inactive - suspended\\]" c)) + mic-candidates)))) (test-quick-setup-teardown))) -(ert-deftest test-video-audio-recording-quick-setup-normal-active-sorted-first () - "Test that active sinks are sorted to the top of the list." +(ert-deftest test-video-audio-recording-quick-setup-normal-sorted-by-state () + "Test that devices are sorted running → idle → suspended." (test-quick-setup-setup) (unwind-protect - (let ((sink-candidates nil)) + (let ((mic-candidates nil) + (call-count 0)) (cl-letf (((symbol-function 'cj/recording--get-available-mics) - (lambda () '(("mic-1" . "Mic One")))) - ((symbol-function 'cj/recording--mic-active-p) - (lambda (_name) nil)) + (lambda () '(("suspended-mic" "Suspended Mic" "SUSPENDED") + ("running-mic" "Running Mic" "RUNNING") + ("idle-mic" "Idle Mic" "IDLE")))) ((symbol-function 'cj/recording--get-available-sinks) - (lambda () '(("inactive-sink" . "Inactive Sink") - ("active-sink" . "Active Sink")))) - ((symbol-function 'cj/recording--sink-active-p) - (lambda (name) (equal name "active-sink"))) + (lambda () '(("sink-1" "Sink One" "SUSPENDED")))) ((symbol-function 'completing-read) (lambda (_prompt table &rest _args) + (setq call-count (1+ call-count)) (let ((candidates (all-completions "" table))) - (when (cl-some (lambda (c) (string-match-p "Sink" c)) candidates) - (setq sink-candidates candidates)) + (when (= call-count 1) + (setq mic-candidates candidates)) (car candidates))))) (cj/recording-quick-setup) - ;; First non-Cancel candidate should be the active sink - (let ((first-sink (car sink-candidates))) - (should (string-match-p "Active Sink" first-sink))))) + ;; First should be running, then idle, then suspended + (should (string-match-p "Running Mic" (nth 0 mic-candidates))) + (should (string-match-p "Idle Mic" (nth 1 mic-candidates))) + (should (string-match-p "Suspended Mic" (nth 2 mic-candidates))))) (test-quick-setup-teardown))) (ert-deftest test-video-audio-recording-quick-setup-normal-confirmation-message () @@ -217,13 +181,9 @@ (unwind-protect (let ((message-text nil)) (cl-letf (((symbol-function 'cj/recording--get-available-mics) - (lambda () '(("jabra-input" . "Jabra SPEAK 510 Mono")))) - ((symbol-function 'cj/recording--mic-active-p) - (lambda (_name) nil)) + (lambda () '(("jabra-input" "Jabra SPEAK 510 Mono" "RUNNING")))) ((symbol-function 'cj/recording--get-available-sinks) - (lambda () '(("jds-labs.analog-stereo" . "JDS Labs Element IV")))) - ((symbol-function 'cj/recording--sink-active-p) - (lambda (_name) nil)) + (lambda () '(("jds-labs.analog-stereo" "JDS Labs Element IV" "RUNNING")))) ((symbol-function 'completing-read) (lambda (_prompt table &rest _args) (car (all-completions "" table)))) @@ -243,13 +203,9 @@ (unwind-protect (let ((read-called 0)) (cl-letf (((symbol-function 'cj/recording--get-available-mics) - (lambda () '(("sole-mic" . "Only Mic Available")))) - ((symbol-function 'cj/recording--mic-active-p) - (lambda (_name) nil)) + (lambda () '(("sole-mic" "Only Mic Available" "SUSPENDED")))) ((symbol-function 'cj/recording--get-available-sinks) - (lambda () '(("sole-sink" . "Only Sink")))) - ((symbol-function 'cj/recording--sink-active-p) - (lambda (_name) nil)) + (lambda () '(("sole-sink" "Only Sink" "SUSPENDED")))) ((symbol-function 'completing-read) (lambda (_prompt table &rest _args) (setq read-called (1+ read-called)) @@ -266,13 +222,9 @@ (test-quick-setup-setup) (unwind-protect (cl-letf (((symbol-function 'cj/recording--get-available-mics) - (lambda () '(("jabra-input" . "Jabra SPEAK 510 Mono")))) - ((symbol-function 'cj/recording--mic-active-p) - (lambda (_name) nil)) + (lambda () '(("jabra-input" "Jabra SPEAK 510 Mono" "SUSPENDED")))) ((symbol-function 'cj/recording--get-available-sinks) - (lambda () '(("sink-1" . "Sink One")))) - ((symbol-function 'cj/recording--sink-active-p) - (lambda (_name) nil)) + (lambda () '(("sink-1" "Sink One" "SUSPENDED")))) ((symbol-function 'completing-read) (lambda (_prompt _choices &rest _args) "Cancel"))) @@ -287,13 +239,9 @@ (unwind-protect (let ((call-count 0)) (cl-letf (((symbol-function 'cj/recording--get-available-mics) - (lambda () '(("jabra-input" . "Jabra SPEAK 510 Mono")))) - ((symbol-function 'cj/recording--mic-active-p) - (lambda (_name) nil)) + (lambda () '(("jabra-input" "Jabra SPEAK 510 Mono" "SUSPENDED")))) ((symbol-function 'cj/recording--get-available-sinks) - (lambda () '(("sink-1" . "Sink One")))) - ((symbol-function 'cj/recording--sink-active-p) - (lambda (_name) nil)) + (lambda () '(("sink-1" "Sink One" "SUSPENDED")))) ((symbol-function 'completing-read) (lambda (_prompt table &rest _args) (setq call-count (1+ call-count)) @@ -311,9 +259,7 @@ (test-quick-setup-setup) (unwind-protect (cl-letf (((symbol-function 'cj/recording--get-available-mics) - (lambda () nil)) - ((symbol-function 'cj/recording--mic-active-p) - (lambda (_name) nil))) + (lambda () nil))) (should-error (cj/recording-quick-setup) :type 'user-error)) (test-quick-setup-teardown))) @@ -322,9 +268,7 @@ (test-quick-setup-setup) (unwind-protect (cl-letf (((symbol-function 'cj/recording--get-available-mics) - (lambda () nil)) - ((symbol-function 'cj/recording--mic-active-p) - (lambda (_name) nil))) + (lambda () nil))) (condition-case err (cj/recording-quick-setup) (user-error |
