11package main
22
33import (
4- "reflect"
5-
64 "github.com/energye/systray"
75)
86
97// SystrayInterface abstracts systray operations for testing.
108type SystrayInterface interface {
119 ResetMenu ()
12- AddMenuItem (title , tooltip string ) * systray. MenuItem
10+ AddMenuItem (title , tooltip string ) MenuItem
1311 AddSeparator ()
1412 SetTitle (title string )
1513 SetOnClick (fn func (menu systray.IMenu ))
@@ -23,8 +21,9 @@ func (*RealSystray) ResetMenu() {
2321 systray .ResetMenu ()
2422}
2523
26- func (* RealSystray ) AddMenuItem (title , tooltip string ) * systray.MenuItem {
27- return systray .AddMenuItem (title , tooltip )
24+ func (* RealSystray ) AddMenuItem (title , tooltip string ) MenuItem {
25+ item := systray .AddMenuItem (title , tooltip )
26+ return & RealMenuItem {MenuItem : item }
2827}
2928
3029func (* RealSystray ) AddSeparator () {
@@ -53,24 +52,13 @@ func (m *MockSystray) ResetMenu() {
5352 m .menuItems = nil
5453}
5554
56- func (m * MockSystray ) AddMenuItem (title , _ string ) * systray. MenuItem {
55+ func (m * MockSystray ) AddMenuItem (title , tooltip string ) MenuItem {
5756 m .menuItems = append (m .menuItems , title )
58- // Create a MenuItem with initialized internal maps using reflection
59- // This prevents nil map panics when methods are called
60- item := & systray.MenuItem {}
61-
62- // Use reflection to initialize internal maps if they exist
63- // This is a hack but necessary for testing
64- rv := reflect .ValueOf (item ).Elem ()
65- rt := rv .Type ()
66- for i := 0 ; i < rt .NumField (); i ++ {
67- field := rv .Field (i )
68- if field .Kind () == reflect .Map && field .IsNil () && field .CanSet () {
69- field .Set (reflect .MakeMap (field .Type ()))
70- }
57+ // Return a MockMenuItem that won't panic when methods are called
58+ return & MockMenuItem {
59+ title : title ,
60+ tooltip : tooltip ,
7161 }
72-
73- return item
7462}
7563
7664func (m * MockSystray ) AddSeparator () {
0 commit comments