159 lines
5.6 KiB
Bash
159 lines
5.6 KiB
Bash
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
source "$(dirname "$0")/base-test.sh"
|
|
|
|
tmp_dir=$(mktemp -d)
|
|
trap 'rm -rf "$tmp_dir"' EXIT
|
|
|
|
stub_bin="$tmp_dir/bin"
|
|
mkdir -p "$stub_bin"
|
|
|
|
cat >"$stub_bin/v4l2-ctl" <<'SH'
|
|
#!/bin/bash
|
|
|
|
printf '%s\n' "Built-in Webcam: Integrated Camera"
|
|
printf '\t%s\n' "/dev/video0"
|
|
printf '\t%s\n' "/dev/video1"
|
|
printf '\n'
|
|
printf '%s\n' "USB Capture Card: External Camera"
|
|
printf '\t%s\n' "/dev/video2"
|
|
SH
|
|
|
|
cat >"$stub_bin/omarchy-menu-select" <<'SH'
|
|
#!/bin/bash
|
|
|
|
printf '%s\n' "$@" >"$OMARCHY_TEST_MENU_ARGS"
|
|
printf '%s\n' "$3"
|
|
SH
|
|
|
|
cat >"$stub_bin/omarchy-capture-screenrecording" <<'SH'
|
|
#!/bin/bash
|
|
|
|
printf '%s\n' "$@" >"$OMARCHY_TEST_RECORDER_ARGS"
|
|
SH
|
|
|
|
cat >"$stub_bin/omarchy-notification-send" <<'SH'
|
|
#!/bin/bash
|
|
|
|
printf '%s\n' "$@" >"$OMARCHY_TEST_NOTIFICATION_ARGS"
|
|
SH
|
|
|
|
chmod +x "$stub_bin"/*
|
|
|
|
export PATH="$stub_bin:$ROOT/bin:$PATH"
|
|
export OMARCHY_TEST_MENU_ARGS="$tmp_dir/menu-args"
|
|
export OMARCHY_TEST_RECORDER_ARGS="$tmp_dir/recorder-args"
|
|
export OMARCHY_TEST_NOTIFICATION_ARGS="$tmp_dir/notification-args"
|
|
|
|
"$ROOT/bin/omarchy-capture-screenrecording-with-webcam"
|
|
|
|
expected_menu_args="$tmp_dir/expected-menu-args"
|
|
printf '%s\n' \
|
|
"Select Webcam" \
|
|
"/dev/video0 Built-in Webcam: Integrated Camera" \
|
|
"/dev/video2 USB Capture Card: External Camera" \
|
|
"--" \
|
|
"--width" \
|
|
"520" \
|
|
"--maxheight" \
|
|
"520" >"$expected_menu_args"
|
|
|
|
if ! cmp -s "$OMARCHY_TEST_MENU_ARGS" "$expected_menu_args"; then
|
|
fail "screenrecording webcam picker passes each webcam as a menu option" "$(diff -u "$expected_menu_args" "$OMARCHY_TEST_MENU_ARGS")"
|
|
fi
|
|
pass "screenrecording webcam picker passes each webcam as a menu option"
|
|
|
|
expected_recorder_args="$tmp_dir/expected-recorder-args"
|
|
printf '%s\n' \
|
|
"--with-desktop-audio" \
|
|
"--with-microphone-audio" \
|
|
"--with-webcam" \
|
|
"--webcam-device=/dev/video2" >"$expected_recorder_args"
|
|
|
|
if ! cmp -s "$OMARCHY_TEST_RECORDER_ARGS" "$expected_recorder_args"; then
|
|
fail "screenrecording webcam picker starts recording with selected device" "$(diff -u "$expected_recorder_args" "$OMARCHY_TEST_RECORDER_ARGS")"
|
|
fi
|
|
pass "screenrecording webcam picker starts recording with selected device"
|
|
|
|
cat >"$stub_bin/hyprctl" <<'SH'
|
|
#!/bin/bash
|
|
|
|
case $1 in
|
|
clients)
|
|
printf '[{"address":"0xabc","title":"%s","size":[%s,%s],"monitor":2}]\n' \
|
|
"${OMARCHY_TEST_CLIENT_TITLE:-WebcamOverlay}" \
|
|
"${OMARCHY_TEST_CLIENT_WIDTH:-178}" \
|
|
"${OMARCHY_TEST_CLIENT_HEIGHT:-200}"
|
|
;;
|
|
monitors)
|
|
printf '[{"id":2,"x":1280,"y":-100,"width":%s,"height":%s,"scale":%s}]\n' \
|
|
"${OMARCHY_TEST_MONITOR_WIDTH:-2560}" \
|
|
"${OMARCHY_TEST_MONITOR_HEIGHT:-1600}" \
|
|
"${OMARCHY_TEST_MONITOR_SCALE:-2}"
|
|
;;
|
|
dispatch)
|
|
printf '%s\n' "$*" >>"$OMARCHY_TEST_HYPRCTL_ARGS"
|
|
;;
|
|
esac
|
|
SH
|
|
chmod +x "$stub_bin/hyprctl"
|
|
|
|
export OMARCHY_TEST_HYPRCTL_ARGS="$tmp_dir/hyprctl-args"
|
|
|
|
"$ROOT/bin/omarchy-capture-webcam-resize" smaller
|
|
|
|
expected_hyprctl_args="$tmp_dir/expected-hyprctl-args"
|
|
printf '%s\n' \
|
|
'dispatch hl.dsp.window.resize({ window = "address:0xabc", x = 128, y = 144 })' \
|
|
'dispatch hl.dsp.window.move({ window = "address:0xabc", x = 2392, y = 516 })' >"$expected_hyprctl_args"
|
|
|
|
if ! cmp -s "$OMARCHY_TEST_HYPRCTL_ARGS" "$expected_hyprctl_args"; then
|
|
fail "webcam resize preserves its aspect ratio and corner anchor" "$(diff -u "$expected_hyprctl_args" "$OMARCHY_TEST_HYPRCTL_ARGS")"
|
|
fi
|
|
pass "webcam resize preserves its aspect ratio and corner anchor"
|
|
|
|
: >"$OMARCHY_TEST_HYPRCTL_ARGS"
|
|
OMARCHY_TEST_MONITOR_WIDTH=1920 \
|
|
OMARCHY_TEST_MONITOR_HEIGHT=1080 \
|
|
OMARCHY_TEST_MONITOR_SCALE=1 \
|
|
OMARCHY_TEST_CLIENT_WIDTH=128 \
|
|
OMARCHY_TEST_CLIENT_HEIGHT=144 \
|
|
"$ROOT/bin/omarchy-capture-webcam-resize" reset
|
|
|
|
printf '%s\n' \
|
|
'dispatch hl.dsp.window.resize({ window = "address:0xabc", x = 240, y = 270 })' \
|
|
'dispatch hl.dsp.window.move({ window = "address:0xabc", x = 2920, y = 670 })' >"$expected_hyprctl_args"
|
|
|
|
if ! cmp -s "$OMARCHY_TEST_HYPRCTL_ARGS" "$expected_hyprctl_args"; then
|
|
fail "webcam default size adapts to monitor resolution" "$(diff -u "$expected_hyprctl_args" "$OMARCHY_TEST_HYPRCTL_ARGS")"
|
|
fi
|
|
pass "webcam default size adapts to monitor resolution"
|
|
|
|
: >"$OMARCHY_TEST_HYPRCTL_ARGS"
|
|
OMARCHY_TEST_CLIENT_TITLE="Other Window" "$ROOT/bin/omarchy-capture-webcam-resize" larger
|
|
|
|
if [[ -s $OMARCHY_TEST_HYPRCTL_ARGS ]]; then
|
|
fail "webcam resize ignores other windows" "$(cat "$OMARCHY_TEST_HYPRCTL_ARGS")"
|
|
fi
|
|
pass "webcam resize ignores other windows"
|
|
|
|
grep -F 'o.bind("SUPER + ALT + code:34", "Make webcam overlay smaller", "omarchy-capture-webcam-resize smaller")' \
|
|
"$ROOT/default/hypr/bindings/utilities.lua" >/dev/null || fail "webcam smaller hotkey is configured"
|
|
grep -F 'o.bind("SUPER + ALT + code:35", "Make webcam overlay larger", "omarchy-capture-webcam-resize larger")' \
|
|
"$ROOT/default/hypr/bindings/utilities.lua" >/dev/null || fail "webcam larger hotkey is configured"
|
|
pass "webcam resize hotkeys are configured"
|
|
|
|
grep -F -- '--wayland-app-id="WebcamOverlay-$WEBCAM_SIZE"' \
|
|
"$ROOT/bin/omarchy-capture-screenrecording" >/dev/null || fail "webcam uses a dedicated size-specific app id"
|
|
|
|
webcam_rules="$ROOT/default/hypr/apps/webcam-overlay.lua"
|
|
grep -F 'move = { "(monitor_w-monitor_h*4/25-40)", "(monitor_h-monitor_h*9/50-40)" }' "$webcam_rules" >/dev/null || \
|
|
fail "small webcam starts at its final corner position"
|
|
grep -F 'move = { "(monitor_w-monitor_h*2/9-40)", "(monitor_h-monitor_h/4-40)" }' "$webcam_rules" >/dev/null || \
|
|
fail "medium webcam starts at its final corner position"
|
|
grep -F 'move = { "(monitor_w-monitor_h*3/10-40)", "(monitor_h-monitor_h*27/80-40)" }' "$webcam_rules" >/dev/null || \
|
|
fail "large webcam starts at its final corner position"
|
|
pass "webcam size rules place the initial window in its final corner"
|