1
0
mirror of https://github.com/tw93/Mole.git synced 2026-03-22 17:55:08 +00:00

fix(ui): use system sleep for inline spinner

This commit is contained in:
Tw93
2026-03-19 00:24:28 +08:00
parent 821a824d81
commit 3b46b4ade6
2 changed files with 23 additions and 3 deletions

View File

@@ -342,7 +342,7 @@ start_inline_spinner() {
# Output to stderr to avoid interfering with stdout # Output to stderr to avoid interfering with stdout
printf "\r${MOLE_SPINNER_PREFIX:-}${BLUE}%s${NC} %s" "$c" "$display_message" >&2 || break printf "\r${MOLE_SPINNER_PREFIX:-}${BLUE}%s${NC} %s" "$c" "$display_message" >&2 || break
i=$((i + 1)) i=$((i + 1))
sleep 0.05 /bin/sleep 0.05
done done
# Clean up stop file before exiting # Clean up stop file before exiting
@@ -366,7 +366,7 @@ stop_inline_spinner() {
# Wait briefly for cooperative exit # Wait briefly for cooperative exit
local wait_count=0 local wait_count=0
while kill -0 "$INLINE_SPINNER_PID" 2> /dev/null && [[ $wait_count -lt 5 ]]; do while kill -0 "$INLINE_SPINNER_PID" 2> /dev/null && [[ $wait_count -lt 5 ]]; do
sleep 0.05 2> /dev/null || true /bin/sleep 0.05 2> /dev/null || true
wait_count=$((wait_count + 1)) wait_count=$((wait_count + 1))
done done

View File

@@ -204,10 +204,30 @@ sleep 0.1
stop_inline_spinner stop_inline_spinner
echo "done" echo "done"
EOF EOF
) )
[[ "$result" == *"done"* ]] [[ "$result" == *"done"* ]]
} }
@test "start_inline_spinner ignores PATH-provided sleep in TTY mode" {
local fake_bin="$HOME/fake-bin"
local marker="$HOME/fake-sleep.marker"
mkdir -p "$fake_bin"
cat > "$fake_bin/sleep" <<EOF
#!/bin/bash
echo "fake" >> "$marker"
exec /bin/sleep "\$@"
EOF
chmod +x "$fake_bin/sleep"
PATH="$fake_bin:$PATH" PROJECT_ROOT="$PROJECT_ROOT" HOME="$HOME" \
/usr/bin/script -q /dev/null /bin/bash --noprofile --norc -c \
'source "$PROJECT_ROOT/lib/core/common.sh"; start_inline_spinner "Testing..."; /bin/sleep 0.15; stop_inline_spinner' \
> /dev/null 2>&1
[ ! -f "$marker" ]
}
@test "read_key maps j/k/h/l to navigation" { @test "read_key maps j/k/h/l to navigation" {
run bash -c "export MOLE_BASE_LOADED=1; source '$PROJECT_ROOT/lib/core/ui.sh'; echo -n 'j' | read_key" run bash -c "export MOLE_BASE_LOADED=1; source '$PROJECT_ROOT/lib/core/ui.sh'; echo -n 'j' | read_key"
[ "$output" = "DOWN" ] [ "$output" = "DOWN" ]