121 lines
4.1 KiB
Bash
121 lines
4.1 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
repoRoot="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
testRoot="$(mktemp -d)"
|
|
trap 'rm -rf "$testRoot"' EXIT
|
|
|
|
export HOME="${testRoot}/home"
|
|
export XDG_DATA_HOME="${HOME}/.local/share"
|
|
export XDG_CONFIG_HOME="${HOME}/.config"
|
|
export XDG_CACHE_HOME="${HOME}/.cache"
|
|
export DISPLAY=""
|
|
export cache="${XDG_CACHE_HOME}/audiogame-manager"
|
|
export configFile="${XDG_CONFIG_HOME}/storm-games/audiogame-manager/games.conf"
|
|
export game="Shadow Line"
|
|
export scriptDir="$repoRoot"
|
|
mkdir -p "$cache" "${configFile%/*}" "${testRoot}/bin"
|
|
touch "$configFile"
|
|
|
|
cat > "${testRoot}/bin/umu-run" <<'STUB'
|
|
#!/usr/bin/env bash
|
|
printf '%s|%s|%s|%s\n' "$WINEPREFIX" "$GAMEID" "${STORE:-}" "$*" >> "$UMU_STUB_LOG"
|
|
if [[ "${1:-}" == "" ]]; then
|
|
mkdir -p "$WINEPREFIX/drive_c"
|
|
fi
|
|
STUB
|
|
chmod +x "${testRoot}/bin/umu-run"
|
|
|
|
cat > "${testRoot}/bin/wine" <<'STUB'
|
|
#!/usr/bin/env bash
|
|
if [[ "${1:-}" == "winepath" || "${1:-}" == "winepath.exe" ]]; then
|
|
shift
|
|
fi
|
|
if [[ "${1:-}" == "-u" ]]; then
|
|
input="$2"
|
|
path="${input#c:\\}"
|
|
path="${path//\\//}"
|
|
printf '%s/drive_c/%s\n' "$WINEPREFIX" "$path"
|
|
exit 0
|
|
fi
|
|
printf 'wine %s\n' "$*" >> "$WINE_STUB_LOG"
|
|
STUB
|
|
chmod +x "${testRoot}/bin/wine"
|
|
|
|
cat > "${testRoot}/bin/wineserver" <<'STUB'
|
|
#!/usr/bin/env bash
|
|
printf 'wineserver %s\n' "$*" >> "$WINE_STUB_LOG"
|
|
STUB
|
|
chmod +x "${testRoot}/bin/wineserver"
|
|
|
|
export PATH="${testRoot}/bin:$PATH"
|
|
export UMU_STUB_LOG="${testRoot}/umu.log"
|
|
export WINE_STUB_LOG="${testRoot}/wine.log"
|
|
|
|
# shellcheck source=.includes/proton.sh
|
|
source "${repoRoot}/.includes/proton.sh"
|
|
|
|
assert_equals() {
|
|
local expected="$1"
|
|
local actual="$2"
|
|
local message="$3"
|
|
if [[ "$expected" != "$actual" ]]; then
|
|
printf 'FAIL: %s\nexpected: %s\nactual: %s\n' "$message" "$expected" "$actual" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
assert_file_contains() {
|
|
local file="$1"
|
|
local pattern="$2"
|
|
local message="$3"
|
|
if ! grep -Fq "$pattern" "$file"; then
|
|
printf 'FAIL: %s\nmissing pattern: %s\nfile contents:\n' "$message" "$pattern" >&2
|
|
cat "$file" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
test_get_umu_bottle_sets_environment() {
|
|
get_umu_bottle "shadow-line"
|
|
assert_equals "${XDG_DATA_HOME}/audiogame-manager/protonBottles/shadow-line" "$WINEPREFIX" "WINEPREFIX points at AGM proton bottle"
|
|
assert_equals "shadow-line" "$GAMEID" "GAMEID is exported"
|
|
assert_equals "none" "$STORE" "STORE defaults to none"
|
|
assert_equals ":0" "$DISPLAY" "DISPLAY defaults to :0"
|
|
}
|
|
|
|
test_add_umu_launcher_records_backend_and_game_id() {
|
|
get_umu_bottle "shadow-line"
|
|
add_umu_launcher "shadow-line" 'c:\Program Files (x86)\GalaxyLaboratory\ShadowRine_FullVoice\play_sr.exe'
|
|
assert_file_contains "$configFile" 'umu|c:\Program Files (x86)\GalaxyLaboratory\ShadowRine_FullVoice\play_sr.exe|Shadow Line|export umuGameId=shadow-line' "UMU launcher entry is recorded"
|
|
}
|
|
|
|
test_run_umu_game_uses_converted_path() {
|
|
get_umu_bottle "shadow-line"
|
|
mkdir -p "${WINEPREFIX}/drive_c/Program Files (x86)/GalaxyLaboratory/ShadowRine_FullVoice"
|
|
touch "${WINEPREFIX}/drive_c/Program Files (x86)/GalaxyLaboratory/ShadowRine_FullVoice/play_sr.exe"
|
|
run_umu_game 'c:\Program Files (x86)\GalaxyLaboratory\ShadowRine_FullVoice\play_sr.exe'
|
|
assert_file_contains "$UMU_STUB_LOG" "${WINEPREFIX}|shadow-line|none|${WINEPREFIX}/drive_c/Program Files (x86)/GalaxyLaboratory/ShadowRine_FullVoice/play_sr.exe" "UMU launches converted exe path"
|
|
}
|
|
|
|
test_install_crlf_file_normalizes_line_endings() {
|
|
local sourceFile="${testRoot}/language_en.dat"
|
|
local destFile="${testRoot}/installed/language_en.dat"
|
|
local expectedFile="${testRoot}/expected-language_en.dat"
|
|
printf 'line one\nline two\n' > "$sourceFile"
|
|
printf 'line one\r\nline two\r\n' > "$expectedFile"
|
|
|
|
install_crlf_file "$sourceFile" "$destFile"
|
|
|
|
if ! cmp -s "$expectedFile" "$destFile"; then
|
|
printf 'FAIL: Translation file is installed with CRLF line endings\n' >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
test_get_umu_bottle_sets_environment
|
|
test_add_umu_launcher_records_backend_and_game_id
|
|
test_run_umu_game_uses_converted_path
|
|
test_install_crlf_file_normalizes_line_endings
|
|
printf 'UMU backend tests passed\n'
|