gui/pkg/menu/menu_test.go
Snider 12a612bba0 feat(menu): add Manager with platform abstraction and builder
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 12:15:32 +00:00

94 lines
2 KiB
Go

// pkg/menu/menu_test.go
package menu
import (
"testing"
"github.com/stretchr/testify/assert"
)
func newTestManager() (*Manager, *mockPlatform) {
p := newMockPlatform()
return NewManager(p), p
}
func TestManager_Build_Good(t *testing.T) {
m, p := newTestManager()
items := []MenuItem{
{Label: "File"},
{Label: "Edit"},
}
menu := m.Build(items)
assert.NotNil(t, menu)
assert.Len(t, p.menus, 1)
assert.Len(t, p.menus[0].items, 2)
assert.Equal(t, "File", p.menus[0].items[0].label)
}
func TestManager_Build_Separator_Good(t *testing.T) {
m, p := newTestManager()
items := []MenuItem{
{Label: "Above"},
{Type: "separator"},
{Label: "Below"},
}
m.Build(items)
assert.Len(t, p.menus[0].items, 3)
assert.Equal(t, "---", p.menus[0].items[1].label)
}
func TestManager_Build_Submenu_Good(t *testing.T) {
m, p := newTestManager()
items := []MenuItem{
{Label: "Parent", Children: []MenuItem{
{Label: "Child 1"},
{Label: "Child 2"},
}},
}
m.Build(items)
assert.Len(t, p.menus[0].subs, 1)
assert.Len(t, p.menus[0].subs[0].items, 2)
}
func TestManager_Build_Accelerator_Good(t *testing.T) {
m, p := newTestManager()
items := []MenuItem{
{Label: "Save", Accelerator: "CmdOrCtrl+S"},
}
m.Build(items)
assert.Equal(t, "CmdOrCtrl+S", p.menus[0].items[0].accel)
}
func TestManager_Build_OnClick_Good(t *testing.T) {
m, p := newTestManager()
called := false
items := []MenuItem{
{Label: "Action", OnClick: func() { called = true }},
}
m.Build(items)
p.menus[0].items[0].onClick()
assert.True(t, called)
}
func TestManager_Build_Role_Good(t *testing.T) {
m, p := newTestManager()
appMenu := RoleAppMenu
items := []MenuItem{
{Role: &appMenu},
}
m.Build(items)
assert.Contains(t, p.menus[0].roles, RoleAppMenu)
}
func TestManager_SetApplicationMenu_Good(t *testing.T) {
m, p := newTestManager()
items := []MenuItem{{Label: "Test"}}
m.SetApplicationMenu(items)
assert.NotNil(t, p.appMenu)
}
func TestManager_Build_Empty_Good(t *testing.T) {
m, _ := newTestManager()
menu := m.Build(nil)
assert.NotNil(t, menu)
}