* Install missing apps when choosing defaults * Restore Chromium through browser installer * Trust default app installer status * Use full conditionals for install paths
275 lines
9.5 KiB
Bash
Executable File
275 lines
9.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
|
|
|
|
test_tmp=$(mktemp -d)
|
|
trap 'rm -rf "$test_tmp"' EXIT
|
|
|
|
mock_bin="$test_tmp/bin"
|
|
test_home="$test_tmp/home"
|
|
installed_dir="$test_tmp/installed"
|
|
install_log="$test_tmp/install-log"
|
|
terminal_log="$test_tmp/terminal-log"
|
|
notification_log="$test_tmp/notification-log"
|
|
setup_log="$test_tmp/setup-log"
|
|
browser_file="$test_tmp/browser"
|
|
mkdir -p "$mock_bin" "$test_home/.config" "$installed_dir"
|
|
|
|
cat >"$mock_bin/omarchy-cmd-missing" <<'SH'
|
|
#!/bin/bash
|
|
[[ ! -e $OMARCHY_TEST_INSTALLED_DIR/$1 ]]
|
|
SH
|
|
|
|
cat >"$mock_bin/omarchy-launch-floating-terminal-with-presentation" <<'SH'
|
|
#!/bin/bash
|
|
printf '%s\0' "$@" >"$OMARCHY_TEST_TERMINAL_LOG"
|
|
SH
|
|
|
|
cat >"$mock_bin/omarchy-notification-send" <<'SH'
|
|
#!/bin/bash
|
|
printf '%s\0' "$@" >>"$OMARCHY_TEST_NOTIFICATION_LOG"
|
|
SH
|
|
|
|
cat >"$mock_bin/omarchy-test-setup-call" <<'SH'
|
|
#!/bin/bash
|
|
printf '%s:%s\n' "${0##*/}" "$*" >>"$OMARCHY_TEST_SETUP_LOG"
|
|
[[ ${OMARCHY_TEST_SETUP_FAIL:-} != "${0##*/}" ]]
|
|
SH
|
|
|
|
cat >"$mock_bin/sudo" <<'SH'
|
|
#!/bin/bash
|
|
printf 'sudo:%s\n' "$*" >>"$OMARCHY_TEST_SETUP_LOG"
|
|
[[ ${OMARCHY_TEST_SETUP_FAIL:-} != "sudo" ]]
|
|
SH
|
|
|
|
cat >"$mock_bin/xdg-settings" <<'SH'
|
|
#!/bin/bash
|
|
case $1 in
|
|
get) [[ -f $OMARCHY_TEST_BROWSER_FILE ]] && cat "$OMARCHY_TEST_BROWSER_FILE" ;;
|
|
set) printf '%s\n' "$3" >"$OMARCHY_TEST_BROWSER_FILE" ;;
|
|
esac
|
|
SH
|
|
|
|
cat >"$mock_bin/omarchy-test-installer" <<'SH'
|
|
#!/bin/bash
|
|
installer=${0##*/}
|
|
|
|
if [[ $installer == "omarchy-install-browser" && ${OMARCHY_TEST_REAL_BROWSER_INSTALL:-false} == "true" ]]; then
|
|
exec "$ROOT/bin/omarchy-install-browser" "$@"
|
|
fi
|
|
|
|
case $installer in
|
|
omarchy-pkg-add)
|
|
package=$1
|
|
printf 'pkg:%s\n' "$package" >>"$OMARCHY_TEST_INSTALL_LOG"
|
|
case $package in
|
|
chromium) command=chromium ;;
|
|
cursor-bin) command=cursor ;;
|
|
sublime-text-4) command=sublime_text ;;
|
|
vim) command=vim ;;
|
|
neovim) command=nvim ;;
|
|
esac
|
|
;;
|
|
omarchy-install-browser)
|
|
selection=$1
|
|
printf 'browser:%s\n' "$selection" >>"$OMARCHY_TEST_INSTALL_LOG"
|
|
case $selection in
|
|
chromium) command=chromium ;;
|
|
chrome) command=google-chrome-stable ;;
|
|
brave) command=brave ;;
|
|
brave-origin) command=brave-origin ;;
|
|
edge) command=microsoft-edge-stable ;;
|
|
firefox) command=firefox ;;
|
|
zen) command=zen-browser ;;
|
|
esac
|
|
;;
|
|
omarchy-install-terminal)
|
|
command=$1
|
|
printf 'terminal:%s\n' "$command" >>"$OMARCHY_TEST_INSTALL_LOG"
|
|
;;
|
|
omarchy-install-editor-*)
|
|
editor=${installer#omarchy-install-editor-}
|
|
printf 'editor:%s\n' "$editor" >>"$OMARCHY_TEST_INSTALL_LOG"
|
|
case $editor in
|
|
vscode) command=code ;;
|
|
zed) command=zeditor ;;
|
|
helix) command=helix ;;
|
|
emacs) command=emacs ;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
[[ ${OMARCHY_TEST_INSTALL_FAIL:-false} != "true" ]] || exit 1
|
|
touch "$OMARCHY_TEST_INSTALLED_DIR/$command"
|
|
SH
|
|
|
|
for installer in \
|
|
omarchy-pkg-add \
|
|
omarchy-install-browser \
|
|
omarchy-install-terminal \
|
|
omarchy-install-editor-vscode \
|
|
omarchy-install-editor-zed \
|
|
omarchy-install-editor-helix \
|
|
omarchy-install-editor-emacs; do
|
|
ln -s omarchy-test-installer "$mock_bin/$installer"
|
|
done
|
|
for setup_command in \
|
|
omarchy-install-chromium-copy-url \
|
|
omarchy-install-chromium-ytdlp \
|
|
omarchy-theme-set-browser; do
|
|
ln -s omarchy-test-setup-call "$mock_bin/$setup_command"
|
|
done
|
|
|
|
chmod +x "$mock_bin"/*
|
|
|
|
export HOME="$test_home"
|
|
export PATH="$mock_bin:$ROOT/bin:$PATH"
|
|
export OMARCHY_PATH="$ROOT"
|
|
export OMARCHY_TEST_INSTALLED_DIR="$installed_dir"
|
|
export OMARCHY_TEST_INSTALL_LOG="$install_log"
|
|
export OMARCHY_TEST_TERMINAL_LOG="$terminal_log"
|
|
export OMARCHY_TEST_NOTIFICATION_LOG="$notification_log"
|
|
export OMARCHY_TEST_SETUP_LOG="$setup_log"
|
|
export OMARCHY_TEST_BROWSER_FILE="$browser_file"
|
|
|
|
assert_missing_opens_installer() {
|
|
local type=$1
|
|
local selection=$2
|
|
|
|
: >"$terminal_log"
|
|
"omarchy-default-$type" "$selection"
|
|
mapfile -d '' -t terminal_args <"$terminal_log"
|
|
[[ ${terminal_args[*]} == "omarchy-default-$type --install $selection" ]] ||
|
|
fail "missing $selection opens its default installer in a terminal"
|
|
}
|
|
|
|
browser_cases=(
|
|
'chromium chromium browser:chromium'
|
|
'chrome google-chrome-stable browser:chrome'
|
|
'brave brave browser:brave'
|
|
'brave-origin brave-origin browser:brave-origin'
|
|
'edge microsoft-edge-stable browser:edge'
|
|
'firefox firefox browser:firefox'
|
|
'zen zen-browser browser:zen'
|
|
)
|
|
|
|
terminal_cases=(
|
|
'alacritty Alacritty.desktop'
|
|
'foot foot.desktop'
|
|
'ghostty com.mitchellh.ghostty.desktop'
|
|
'kitty kitty.desktop'
|
|
)
|
|
|
|
editor_cases=(
|
|
'code code editor:vscode'
|
|
'cursor cursor pkg:cursor-bin'
|
|
'zed zeditor editor:zed'
|
|
'sublime_text sublime_text pkg:sublime-text-4'
|
|
'helix helix editor:helix'
|
|
'vim vim pkg:vim'
|
|
'emacs emacs editor:emacs'
|
|
'nvim nvim pkg:neovim'
|
|
)
|
|
|
|
for entry in "${browser_cases[@]}"; do
|
|
read -r selection command installer <<<"$entry"
|
|
assert_missing_opens_installer browser "$selection"
|
|
done
|
|
for entry in "${terminal_cases[@]}"; do
|
|
read -r selection desktop_id <<<"$entry"
|
|
assert_missing_opens_installer terminal "$selection"
|
|
done
|
|
for entry in "${editor_cases[@]}"; do
|
|
read -r selection command installer <<<"$entry"
|
|
assert_missing_opens_installer editor "$selection"
|
|
done
|
|
pass "missing defaults open visible installers for every supported app"
|
|
|
|
for entry in "${browser_cases[@]}"; do
|
|
read -r selection command installer <<<"$entry"
|
|
rm -f "$installed_dir/$command"
|
|
: >"$install_log"
|
|
omarchy-default-browser --install "$selection"
|
|
[[ $(<"$install_log") == "$installer" ]] || fail "$selection uses its browser installer"
|
|
[[ $(omarchy-default-browser) == "$selection" ]] || fail "$selection becomes the default browser after installation"
|
|
done
|
|
pass "browser defaults install every missing browser before selection"
|
|
|
|
: >"$install_log"
|
|
: >"$setup_log"
|
|
rm -f "$installed_dir/chromium"
|
|
OMARCHY_TEST_REAL_BROWSER_INSTALL=true omarchy-default-browser --install chromium >/dev/null
|
|
[[ $(<"$install_log") == "pkg:chromium" ]] || fail "Chromium browser installer installs the package"
|
|
[[ $(omarchy-default-browser) == "chromium" ]] || fail "Chromium becomes the default after its full installer succeeds"
|
|
cmp -s "$ROOT/config/chromium-flags.conf" "$test_home/.config/chromium-flags.conf" ||
|
|
fail "Chromium browser installer copies the default flags"
|
|
grep -Fxq 'sudo:mkdir -p /etc/chromium/policies/managed' "$setup_log" ||
|
|
fail "Chromium browser installer creates its policy directory"
|
|
grep -Fxq 'sudo:chmod a+rw /etc/chromium/policies/managed' "$setup_log" ||
|
|
fail "Chromium browser installer makes its policy directory writable"
|
|
grep -Fxq 'omarchy-install-chromium-copy-url:' "$setup_log" ||
|
|
fail "Chromium browser installer registers the Copy URL host"
|
|
grep -Fxq 'omarchy-install-chromium-ytdlp:' "$setup_log" ||
|
|
fail "Chromium browser installer registers the yt-dlp host"
|
|
grep -Fxq 'omarchy-theme-set-browser:' "$setup_log" ||
|
|
fail "Chromium browser installer applies the current theme"
|
|
pass "Chromium browser installer restores the complete Omarchy setup"
|
|
|
|
omarchy-default-browser zen
|
|
rm -f "$installed_dir/chromium"
|
|
if OMARCHY_TEST_REAL_BROWSER_INSTALL=true OMARCHY_TEST_INSTALL_FAIL=true \
|
|
omarchy-default-browser --install chromium >"$test_tmp/browser-package-failure" 2>&1; then
|
|
fail "failed Chromium package installation returns an error"
|
|
fi
|
|
[[ $(omarchy-default-browser) == "zen" ]] || fail "failed Chromium package installation preserves the default browser"
|
|
[[ ! -e $installed_dir/chromium ]] || fail "failed Chromium package installation does not mark it installed"
|
|
pass "failed Chromium package installation preserves the current default"
|
|
|
|
if OMARCHY_TEST_REAL_BROWSER_INSTALL=true OMARCHY_TEST_SETUP_FAIL=sudo \
|
|
omarchy-default-browser --install chromium >"$test_tmp/browser-install-failure" 2>&1; then
|
|
fail "failed Chromium setup returns an error"
|
|
fi
|
|
[[ $(omarchy-default-browser) == "zen" ]] || fail "failed Chromium setup preserves the default browser"
|
|
grep -Fq 'Installing Chromium' "$test_tmp/browser-install-failure" ||
|
|
fail "failed Chromium setup keeps progress visible in the terminal"
|
|
pass "failed Chromium setup preserves the current default"
|
|
|
|
for entry in "${terminal_cases[@]}"; do
|
|
read -r selection desktop_id <<<"$entry"
|
|
rm -f "$installed_dir/$selection"
|
|
: >"$install_log"
|
|
omarchy-default-terminal --install "$selection"
|
|
[[ $(<"$install_log") == "terminal:$selection" ]] || fail "$selection uses the terminal installer"
|
|
[[ $(tail -n 1 "$test_home/.config/xdg-terminals.list") == "$desktop_id" ]] ||
|
|
fail "$selection becomes the default terminal after installation"
|
|
done
|
|
pass "terminal defaults install every missing terminal before selection"
|
|
|
|
for entry in "${editor_cases[@]}"; do
|
|
read -r selection command installer <<<"$entry"
|
|
rm -f "$installed_dir/$command"
|
|
: >"$install_log"
|
|
omarchy-default-editor --install "$selection"
|
|
[[ $(<"$install_log") == "$installer" ]] || fail "$selection uses its editor installer"
|
|
[[ $(omarchy-default-editor) == "$command" ]] || fail "$selection becomes the default editor after installation"
|
|
done
|
|
pass "editor defaults install every missing editor before selection"
|
|
|
|
: >"$install_log"
|
|
: >"$terminal_log"
|
|
omarchy-default-browser zen
|
|
omarchy-default-terminal kitty
|
|
omarchy-default-editor nvim
|
|
[[ ! -s $install_log && ! -s $terminal_log ]] || fail "installed defaults skip installation"
|
|
pass "installed defaults are selected immediately"
|
|
|
|
previous_editor=$(omarchy-default-editor)
|
|
rm -f "$installed_dir/vim"
|
|
if OMARCHY_TEST_INSTALL_FAIL=true omarchy-default-editor --install vim >"$test_tmp/install-failure" 2>&1; then
|
|
fail "failed default installation returns an error"
|
|
fi
|
|
[[ $(omarchy-default-editor) == "$previous_editor" ]] || fail "failed installation preserves the default"
|
|
pass "failed installation preserves the current default"
|