mirror of
https://github.com/tw93/Mole.git
synced 2026-02-14 15:52:29 +00:00
Automated test optimization increased to 132
This commit is contained in:
169
tests/regression_bugs.bats
Normal file
169
tests/regression_bugs.bats
Normal file
@@ -0,0 +1,169 @@
|
||||
#!/usr/bin/env bats
|
||||
# Regression tests for previously fixed bugs
|
||||
# Ensures历史bug不再复现
|
||||
|
||||
setup() {
|
||||
PROJECT_ROOT="$(cd "${BATS_TEST_DIRNAME}/.." && pwd)"
|
||||
export PROJECT_ROOT
|
||||
export HOME="$BATS_TEST_TMPDIR/home"
|
||||
mkdir -p "$HOME/.config/mole"
|
||||
}
|
||||
|
||||
# =================================================================
|
||||
# 退出问题回归测试 (bb21bb1, 4b6c436, d75c34d)
|
||||
# =================================================================
|
||||
|
||||
@test "find with non-existent directory doesn't cause script exit (pipefail bug)" {
|
||||
# 这个模式曾导致 lib/clean/user.sh 在 pipefail 模式下意外退出
|
||||
result=$(bash -c '
|
||||
set -euo pipefail
|
||||
find /non/existent/dir -name "*.cache" 2>/dev/null || true
|
||||
echo "survived"
|
||||
')
|
||||
[[ "$result" == "survived" ]]
|
||||
}
|
||||
|
||||
@test "browser directory check pattern is safe when directories don't exist" {
|
||||
# 修复模式:先检查目录是否存在
|
||||
result=$(bash -c '
|
||||
set -euo pipefail
|
||||
search_dirs=()
|
||||
[[ -d "/non/existent/chrome" ]] && search_dirs+=("/non/existent/chrome")
|
||||
[[ -d "/tmp" ]] && search_dirs+=("/tmp")
|
||||
|
||||
if [[ ${#search_dirs[@]} -gt 0 ]]; then
|
||||
find "${search_dirs[@]}" -maxdepth 1 -type f 2>/dev/null || true
|
||||
fi
|
||||
echo "survived"
|
||||
')
|
||||
[[ "$result" == "survived" ]]
|
||||
}
|
||||
|
||||
@test "empty array doesn't cause unbound variable error" {
|
||||
result=$(bash -c '
|
||||
set -euo pipefail
|
||||
search_dirs=()
|
||||
|
||||
# 这不应该执行且不应该报错
|
||||
if [[ ${#search_dirs[@]} -gt 0 ]]; then
|
||||
echo "should not reach here"
|
||||
fi
|
||||
echo "survived"
|
||||
')
|
||||
[[ "$result" == "survived" ]]
|
||||
}
|
||||
|
||||
# ===============================================================
|
||||
# 更新检查回归测试 (260254f, b61b3f7, 2a64cae, 7a9c946)
|
||||
# ===============================================================
|
||||
|
||||
@test "version comparison works correctly" {
|
||||
result=$(bash -c '
|
||||
v1="1.11.8"
|
||||
v2="1.11.9"
|
||||
if [[ "$(printf "%s\n" "$v1" "$v2" | sort -V | head -1)" == "$v1" && "$v1" != "$v2" ]]; then
|
||||
echo "update_needed"
|
||||
fi
|
||||
')
|
||||
[[ "$result" == "update_needed" ]]
|
||||
}
|
||||
|
||||
@test "version comparison with same versions" {
|
||||
result=$(bash -c '
|
||||
v1="1.11.8"
|
||||
v2="1.11.8"
|
||||
if [[ "$(printf "%s\n" "$v1" "$v2" | sort -V | head -1)" == "$v1" && "$v1" != "$v2" ]]; then
|
||||
echo "update_needed"
|
||||
else
|
||||
echo "up_to_date"
|
||||
fi
|
||||
')
|
||||
[[ "$result" == "up_to_date" ]]
|
||||
}
|
||||
|
||||
@test "version prefix v/V is stripped correctly" {
|
||||
result=$(bash -c '
|
||||
version="v1.11.9"
|
||||
clean=${version#v}
|
||||
clean=${clean#V}
|
||||
echo "$clean"
|
||||
')
|
||||
[[ "$result" == "1.11.9" ]]
|
||||
}
|
||||
|
||||
@test "network timeout prevents hanging (simulated)" {
|
||||
# curl 超时参数应该生效
|
||||
# shellcheck disable=SC2016
|
||||
result=$(timeout 5 bash -c '
|
||||
result=$(curl -fsSL --connect-timeout 1 --max-time 2 "http://192.0.2.1:12345/test" 2>/dev/null || echo "failed")
|
||||
if [[ "$result" == "failed" ]]; then
|
||||
echo "timeout_works"
|
||||
fi
|
||||
')
|
||||
[[ "$result" == "timeout_works" ]]
|
||||
}
|
||||
|
||||
@test "empty version string is handled gracefully" {
|
||||
result=$(bash -c '
|
||||
latest=""
|
||||
if [[ -z "$latest" ]]; then
|
||||
echo "handled"
|
||||
fi
|
||||
')
|
||||
[[ "$result" == "handled" ]]
|
||||
}
|
||||
|
||||
# ===============================================================
|
||||
# Pipefail 模式安全模式测试
|
||||
# ===============================================================
|
||||
|
||||
@test "grep with no match doesn't cause exit in pipefail mode" {
|
||||
result=$(bash -c '
|
||||
set -euo pipefail
|
||||
echo "test" | grep "nonexistent" || true
|
||||
echo "survived"
|
||||
')
|
||||
[[ "$result" == "survived" ]]
|
||||
}
|
||||
|
||||
@test "command substitution failure is handled with || true" {
|
||||
result=$(bash -c '
|
||||
set -euo pipefail
|
||||
output=$(false) || true
|
||||
echo "survived"
|
||||
')
|
||||
[[ "$result" == "survived" ]]
|
||||
}
|
||||
|
||||
@test "arithmetic on zero doesn't cause exit" {
|
||||
result=$(bash -c '
|
||||
set -euo pipefail
|
||||
count=0
|
||||
((count++)) || true
|
||||
echo "$count"
|
||||
')
|
||||
[[ "$result" == "1" ]]
|
||||
}
|
||||
|
||||
# ===============================================================
|
||||
# 实际场景回归测试
|
||||
# ===============================================================
|
||||
|
||||
@test "safe_remove pattern doesn't fail on non-existent path" {
|
||||
result=$(bash -c "
|
||||
set -euo pipefail
|
||||
source '$PROJECT_ROOT/lib/core/common.sh'
|
||||
safe_remove '$HOME/non/existent/path' true > /dev/null 2>&1 || true
|
||||
echo 'survived'
|
||||
")
|
||||
[[ "$result" == "survived" ]]
|
||||
}
|
||||
|
||||
@test "module loading doesn't fail" {
|
||||
result=$(bash -c "
|
||||
set -euo pipefail
|
||||
source '$PROJECT_ROOT/lib/core/common.sh'
|
||||
echo 'loaded'
|
||||
")
|
||||
[[ "$result" == "loaded" ]]
|
||||
}
|
||||
Reference in New Issue
Block a user