1package skills
2
3import (
4 "testing"
5
6 "github.com/stretchr/testify/require"
7)
8
9func TestApproxTokenCount(t *testing.T) {
10 t.Parallel()
11
12 require.Equal(t, 0, ApproxTokenCount(""))
13 require.Equal(t, 1, ApproxTokenCount("a"))
14 require.Equal(t, 1, ApproxTokenCount("abcd"))
15 require.Equal(t, 2, ApproxTokenCount("abcde"))
16 // 12 chars → 3 tokens.
17 require.Equal(t, 3, ApproxTokenCount("abcdefghijkl"))
18}
19
20func TestTracker_LoadedNamesAndCount(t *testing.T) {
21 t.Parallel()
22
23 active := []*Skill{{Name: "b"}, {Name: "a"}, {Name: "c"}}
24 tr := NewTracker(active)
25 require.Equal(t, 0, tr.LoadedCount())
26 require.Empty(t, tr.LoadedNames())
27
28 tr.MarkLoaded("b")
29 tr.MarkLoaded("a")
30 require.Equal(t, 2, tr.LoadedCount())
31 require.Equal(t, []string{"a", "b"}, tr.LoadedNames())
32
33 // Nil safety.
34 var nilTr *Tracker
35 require.Equal(t, 0, nilTr.LoadedCount())
36 require.Nil(t, nilTr.LoadedNames())
37}
38
39func TestDiscoverBuiltinWithStates(t *testing.T) {
40 t.Parallel()
41
42 skills, states := DiscoverBuiltinWithStates()
43 require.NotEmpty(t, skills)
44 require.NotEmpty(t, states)
45
46 // Every returned skill should have a corresponding StateNormal entry.
47 ok := 0
48 for _, s := range states {
49 if s.State == StateNormal {
50 ok++
51 }
52 }
53 require.Equal(t, len(skills), ok)
54}
55
56func TestDiscoverWithStates_MissingPath(t *testing.T) {
57 t.Parallel()
58
59 // A clearly nonexistent path should not panic; it may log an error.
60 skills, _ := DiscoverWithStates([]string{"/nonexistent/crush/skills/path"})
61 require.Empty(t, skills)
62}