1package lsp
2
3import (
4 "testing"
5 "time"
6
7 "github.com/charmbracelet/crush/internal/csync"
8 "github.com/stretchr/testify/require"
9)
10
11func TestUnavailableBackoff(t *testing.T) {
12 t.Parallel()
13
14 base := time.Date(2026, 3, 26, 0, 0, 0, 0, time.UTC)
15 now := base
16
17 manager := &Manager{
18 unavailable: csync.NewMap[string, time.Time](),
19 now: func() time.Time { return now },
20 }
21
22 require.False(t, manager.recentlyUnavailable("gopls"))
23
24 manager.markUnavailable("gopls")
25 require.True(t, manager.recentlyUnavailable("gopls"))
26
27 now = now.Add(unavailableRetryDelay + time.Second)
28 require.False(t, manager.recentlyUnavailable("gopls"))
29 _, exists := manager.unavailable.Get("gopls")
30 require.False(t, exists)
31
32 manager.markUnavailable("gopls")
33 manager.clearUnavailable("gopls")
34 require.False(t, manager.recentlyUnavailable("gopls"))
35}