Harden menu builder against nil handles
This commit is contained in:
parent
99cfa72fa1
commit
6f9285a48d
2 changed files with 33 additions and 0 deletions
|
|
@ -42,6 +42,9 @@ func (m *Manager) Build(items []MenuItem) PlatformMenu {
|
|||
}
|
||||
|
||||
func (m *Manager) buildItems(menu PlatformMenu, items []MenuItem) {
|
||||
if m == nil || menu == nil {
|
||||
return
|
||||
}
|
||||
for _, item := range items {
|
||||
if item.Role != nil {
|
||||
menu.AddRole(*item.Role)
|
||||
|
|
@ -53,10 +56,16 @@ func (m *Manager) buildItems(menu PlatformMenu, items []MenuItem) {
|
|||
}
|
||||
if len(item.Children) > 0 {
|
||||
sub := menu.AddSubmenu(item.Label)
|
||||
if sub == nil {
|
||||
continue
|
||||
}
|
||||
m.buildItems(sub, item.Children)
|
||||
continue
|
||||
}
|
||||
mi := menu.Add(item.Label)
|
||||
if mi == nil {
|
||||
continue
|
||||
}
|
||||
if item.Accelerator != "" {
|
||||
mi.SetAccelerator(item.Accelerator)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -104,3 +104,27 @@ func TestManager_SetApplicationMenu_NilReceiver_Good(t *testing.T) {
|
|||
m.SetApplicationMenu([]MenuItem{{Label: "Test"}})
|
||||
})
|
||||
}
|
||||
|
||||
type nilMenuPlatform struct{}
|
||||
|
||||
func (p *nilMenuPlatform) NewMenu() PlatformMenu { return &nilMenu{} }
|
||||
func (p *nilMenuPlatform) SetApplicationMenu(menu PlatformMenu) {}
|
||||
|
||||
type nilMenu struct{}
|
||||
|
||||
func (m *nilMenu) Add(label string) PlatformMenuItem { return nil }
|
||||
func (m *nilMenu) AddSeparator() {}
|
||||
func (m *nilMenu) AddSubmenu(label string) PlatformMenu {
|
||||
return nil
|
||||
}
|
||||
func (m *nilMenu) AddRole(role MenuRole) {}
|
||||
|
||||
func TestManager_Build_NilMenuHandles_Good(t *testing.T) {
|
||||
m := NewManager(&nilMenuPlatform{})
|
||||
assert.NotPanics(t, func() {
|
||||
assert.NotNil(t, m.Build([]MenuItem{
|
||||
{Label: "File"},
|
||||
{Label: "Parent", Children: []MenuItem{{Label: "Child"}}},
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue