1
0
mirror of https://github.com/tw93/Mole.git synced 2026-03-22 16:45:07 +00:00

Fix cleanup regressions and analyze navigation

Refs #605 #607 #608 #609 #610
This commit is contained in:
Tw93
2026-03-21 13:04:48 +08:00
parent d51e1a621d
commit d6b9d9f3f3
13 changed files with 692 additions and 199 deletions

View File

@@ -645,3 +645,74 @@ EOF
[[ "$output" == *"FOUND: .hidden_dir"* ]]
[[ "$output" == *"FOUND: regular_file.txt"* ]]
}
@test "validate_external_volume_target canonicalizes root before comparing target" {
run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF'
set -euo pipefail
source "$PROJECT_ROOT/lib/core/common.sh"
source "$PROJECT_ROOT/lib/clean/user.sh"
mock_bin="$HOME/bin"
mkdir -p "$mock_bin"
cat > "$mock_bin/diskutil" <<'MOCK'
#!/bin/bash
exit 0
MOCK
chmod +x "$mock_bin/diskutil"
export PATH="$mock_bin:$PATH"
real_root="$(mktemp -d "$HOME/ext-real.XXXXXX")"
link_root="$HOME/ext-link"
ln -s "$real_root" "$link_root"
mkdir -p "$link_root/USB"
export MOLE_EXTERNAL_VOLUMES_ROOT="$link_root"
resolved=$(validate_external_volume_target "$link_root/USB")
echo "RESOLVED=$resolved"
EOF
[ "$status" -eq 0 ]
[[ "$output" == *"RESOLVED="*"/USB"* ]]
[[ "$output" != *"must be under"* ]]
}
@test "clean_app_caches caps precise sandbox size scans when many containers exist" {
run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" DRY_RUN=true MOLE_CONTAINER_CACHE_PRECISE_SIZE_LIMIT=2 bash --noprofile --norc <<'EOF'
set -euo pipefail
source "$PROJECT_ROOT/lib/core/common.sh"
source "$PROJECT_ROOT/lib/clean/user.sh"
start_section_spinner() { :; }
stop_section_spinner() { :; }
safe_clean() { :; }
clean_support_app_data() { :; }
clean_group_container_caches() { :; }
bytes_to_human() { echo "0B"; }
note_activity() { :; }
should_protect_data() { return 1; }
is_critical_system_component() { return 1; }
files_cleaned=0
total_size_cleaned=0
total_items=0
count_file="$HOME/size-count"
get_path_size_kb() {
local count
count=$(cat "$count_file" 2> /dev/null || echo "0")
count=$((count + 1))
echo "$count" > "$count_file"
echo "1"
}
for i in $(seq 1 5); do
mkdir -p "$HOME/Library/Containers/com.example.$i/Data/Library/Caches"
touch "$HOME/Library/Containers/com.example.$i/Data/Library/Caches/file-$i.tmp"
done
clean_app_caches
echo "SIZE_CALLS=$(cat "$count_file")"
EOF
[ "$status" -eq 0 ]
[[ "$output" == *"Sandboxed app caches"* ]]
[[ "$output" == *"SIZE_CALLS=2"* ]]
}

View File

@@ -237,6 +237,34 @@ EOF
[ "$status" -eq 0 ]
}
@test "mo clean --help includes external volume option" {
run env HOME="$HOME" "$PROJECT_ROOT/mole" clean --help
[ "$status" -eq 0 ]
[[ "$output" == *"--external PATH"* ]]
}
@test "mo clean --external accepts canonicalized custom root" {
real_root="$(mktemp -d "$HOME/ext-real.XXXXXX")"
link_root="$HOME/ext-link"
ln -s "$real_root" "$link_root"
mkdir -p "$link_root/USB/.Trashes"
touch "$link_root/USB/.Trashes/cache.tmp"
mock_bin="$HOME/mock-bin"
mkdir -p "$mock_bin"
cat > "$mock_bin/diskutil" <<'EOF'
#!/usr/bin/env bash
exit 0
EOF
chmod +x "$mock_bin/diskutil"
run env HOME="$HOME" PATH="$mock_bin:$PATH" MOLE_EXTERNAL_VOLUMES_ROOT="$link_root" \
MOLE_TEST_NO_AUTH=1 "$PROJECT_ROOT/mole" clean --external "$link_root/USB" --dry-run
[ "$status" -eq 0 ]
[[ "$output" == *"Clean External Volume"* ]]
[[ "$output" == *"External volume cleanup"* ]]
}
@test "touchid status reflects pam file contents" {
pam_file="$HOME/pam_test"
cat >"$pam_file" <<'EOF'

View File

@@ -141,6 +141,54 @@ EOF
[[ "$output" == *"Font cache cleared"* ]]
}
@test "opt_font_cache_rebuild skips when Firefox helpers are running" {
run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF'
set -euo pipefail
source "$PROJECT_ROOT/lib/core/common.sh"
source "$PROJECT_ROOT/lib/optimize/tasks.sh"
pgrep() {
case "$*" in
*"Firefox|org\\.mozilla\\.firefox|firefox .*contentproc|firefox .*plugin-container|firefox .*crashreporter"*)
return 0
;;
*)
return 1
;;
esac
}
export -f pgrep
opt_font_cache_rebuild
EOF
[ "$status" -eq 0 ]
[[ "$output" == *"Skipped font cache rebuild because browsers or helpers are still running: Firefox"* ]]
}
@test "browser_family_is_running does not treat generic renderer helpers as Zen Browser" {
run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" bash --noprofile --norc <<'EOF'
set -euo pipefail
source "$PROJECT_ROOT/lib/core/common.sh"
source "$PROJECT_ROOT/lib/optimize/tasks.sh"
pgrep() {
case "$*" in
*"renderer|gpu"*)
return 0
;;
*)
return 1
;;
esac
}
export -f pgrep
if browser_family_is_running "Zen Browser"; then
echo "MATCHED"
fi
EOF
[ "$status" -eq 0 ]
[[ "$output" != *"MATCHED"* ]]
}
@test "opt_dock_refresh clears cache files" {
run env HOME="$HOME" PROJECT_ROOT="$PROJECT_ROOT" MOLE_DRY_RUN=1 bash --noprofile --norc <<'EOF'
set -euo pipefail