Professional package installer for SUSE family created
This commit is contained in:
parent
3c5b900ac6
commit
99c4a41662
10 changed files with 751 additions and 0 deletions
73
tests/test_list_parsing.sh
Executable file
73
tests/test_list_parsing.sh
Executable file
|
|
@ -0,0 +1,73 @@
|
|||
#!/usr/bin/env bash
|
||||
# Created by John A. Hoeven with the ethical assistance of Claude AI
|
||||
# ---------------------------------------------------------------------------
|
||||
# test_list_parsing.sh
|
||||
# /home/john/projects/suse-professional-package-installer/tests/test_list_parsing.sh
|
||||
# Version: v0.1.0 | Status: DEVELOPMENT
|
||||
# ---------------------------------------------------------------------------
|
||||
# Purpose: Exercises read_package_list() (comments/blank-line handling,
|
||||
# empty-file rejection) without touching zypper or requiring
|
||||
# privilege escalation. Kept separate from installation scripts
|
||||
# per CE OS standard — never merged into main.sh or a subscript.
|
||||
# Target: common (pure bash, no package-manager calls).
|
||||
# Entry: ./test_list_parsing.sh
|
||||
# Depends: lib/ce-common.sh
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# shellcheck disable=SC2016
|
||||
# ^ run_test()'s cmd args are intentionally single-quoted — deferred-eval
|
||||
# expressions, not meant to expand at the call site.
|
||||
|
||||
_SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
|
||||
# shellcheck source=../lib/ce-common.sh
|
||||
source "${_SCRIPT_DIR}/../lib/ce-common.sh"
|
||||
|
||||
_TMP="$(mktemp -d)"
|
||||
register_temp_dir "${_TMP}"
|
||||
|
||||
log_info "=== test_list_parsing ==="
|
||||
|
||||
# ── Comments, blank lines, whitespace ────────────────────────────────────
|
||||
|
||||
cat > "${_TMP}/mixed.list" <<'EOF'
|
||||
# a full-line comment
|
||||
|
||||
foo-pkg
|
||||
bar-pkg # trailing comment
|
||||
baz-pkg
|
||||
|
||||
EOF
|
||||
|
||||
# shellcheck disable=SC2034 # populated via nameref inside read_package_list, read via eval in run_test
|
||||
declare -a parsed
|
||||
read_package_list "${_TMP}/mixed.list" parsed
|
||||
|
||||
run_test "parses exactly 3 packages" '[[ ${#parsed[@]} -eq 3 ]]' fail
|
||||
run_test "first entry is foo-pkg" '[[ "${parsed[0]}" == "foo-pkg" ]]' fail
|
||||
run_test "second entry is bar-pkg (trailing comment stripped)" \
|
||||
'[[ "${parsed[1]}" == "bar-pkg" ]]' fail
|
||||
run_test "third entry is baz-pkg (leading whitespace stripped)" \
|
||||
'[[ "${parsed[2]}" == "baz-pkg" ]]' fail
|
||||
|
||||
# ── Empty / comment-only file is rejected ────────────────────────────────
|
||||
|
||||
cat > "${_TMP}/empty.list" <<'EOF'
|
||||
# nothing but comments
|
||||
|
||||
EOF
|
||||
|
||||
# Functions are inherited into subshells, so a bare subshell (no re-source
|
||||
# needed) is enough to isolate read_package_list()'s own `exit 1` from this
|
||||
# test script's own process.
|
||||
|
||||
run_test "comment-only list exits non-zero" \
|
||||
"! (declare -a x; read_package_list '${_TMP}/empty.list' x) 2>/dev/null" \
|
||||
fail
|
||||
|
||||
# ── Missing file is rejected ─────────────────────────────────────────────
|
||||
|
||||
run_test "missing list file exits non-zero" \
|
||||
"! (declare -a x; read_package_list '${_TMP}/does-not-exist.list' x) 2>/dev/null" \
|
||||
fail
|
||||
|
||||
log_info "=== test_list_parsing: all checks passed ==="
|
||||
Loading…
Add table
Add a link
Reference in a new issue