Files
iris-context/tests/core/lookup_test.go
T
2026-05-09 23:18:08 +07:00

74 lines
1.7 KiB
Go

package core_test
import (
"testing"
"github.com/versenilvis/iris/commands/core"
"github.com/versenilvis/iris/integration/shell"
)
type mockAdapter struct {
shell.BashAdapter
}
func (m *mockAdapter) ScanAliases() map[string]string {
return map[string]string{
"gca": "git commit -a",
"ta": "tmux a -t",
}
}
func TestLookup(t *testing.T) {
// Use mock adapter
shell.Current = &mockAdapter{}
core.Register(&core.Spec{
Name: "git",
Description: "git command",
Subcommands: []core.Subcommand{
{Name: "commit", Description: "commit changes"},
{Name: "remote", Description: "manage remotes", Subcommands: []core.Subcommand{
{Name: "add", Description: "add remote"},
}},
},
Options: []core.Option{
{Name: "--verbose", Description: "verbose output"},
},
})
tests := []struct {
name string
input string
minCount int
checkCmd string
}{
{"Top-level suggestions", "gi", 1, "git"},
{"Subcommand suggestions", "git ", 2, "git commit"},
{"Alias expansion", "gca", 1, "git commit -a"},
{"Deep subcommand", "git remote ", 1, "git remote add"},
{"Option dedup", "git --verbose -", 0, ""},
{"Flag with value ignore", "git --output=json ", 2, "git --output=json commit"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
results := core.Lookup(tt.input)
if len(results) < tt.minCount {
t.Errorf("Lookup(%q) returned %d results; want at least %d", tt.input, len(results), tt.minCount)
}
if tt.checkCmd != "" {
found := false
for _, r := range results {
if r.Cmd == tt.checkCmd {
found = true
break
}
}
if !found {
t.Errorf("Lookup(%q) did not suggest %q", tt.input, tt.checkCmd)
}
}
})
}
}