From e090ea1a2da8c4ff5e98fb09e37d51042e380b0a Mon Sep 17 00:00:00 2001 From: "Kali Kaneko (leap communications)" Date: Wed, 14 Nov 2018 20:45:46 +0100 Subject: [pkg] add temporary vendoring of getlantern/systray to fix win bug this adds upstream PR #74 --- .../getlantern/systray/systray_windows_test.go | 132 +++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 vendor/github.com/getlantern/systray/systray_windows_test.go (limited to 'vendor/github.com/getlantern/systray/systray_windows_test.go') diff --git a/vendor/github.com/getlantern/systray/systray_windows_test.go b/vendor/github.com/getlantern/systray/systray_windows_test.go new file mode 100644 index 0000000..7cb6c75 --- /dev/null +++ b/vendor/github.com/getlantern/systray/systray_windows_test.go @@ -0,0 +1,132 @@ +// +build windows + +package systray + +import ( + "io/ioutil" + "runtime" + "sync/atomic" + "testing" + "time" + "unsafe" + + "golang.org/x/sys/windows" +) + +const iconFilePath = "example/icon/iconwin.ico" + +func TestBaseWindowsTray(t *testing.T) { + systrayReady = func() {} + systrayExit = func() {} + + runtime.LockOSThread() + + if err := wt.initInstance(); err != nil { + t.Fatalf("initInstance failed: %s", err) + } + + if err := wt.createMenu(); err != nil { + t.Fatalf("createMenu failed: %s", err) + } + + defer func() { + pDestroyWindow.Call(uintptr(wt.window)) + wt.wcex.unregister() + }() + + if err := wt.setIcon(iconFilePath); err != nil { + t.Errorf("SetIcon failed: %s", err) + } + + if err := wt.setTooltip("Cyrillic tooltip тест:)"); err != nil { + t.Errorf("SetIcon failed: %s", err) + } + + var id int32 = 0 + err := wt.addOrUpdateMenuItem(atomic.AddInt32(&id, 1), "Simple enabled", false, false) + if err != nil { + t.Errorf("mergeMenuItem failed: %s", err) + } + err = wt.addOrUpdateMenuItem(atomic.AddInt32(&id, 1), "Simple disabled", true, false) + if err != nil { + t.Errorf("mergeMenuItem failed: %s", err) + } + err = wt.addSeparatorMenuItem(atomic.AddInt32(&id, 1)) + if err != nil { + t.Errorf("addSeparatorMenuItem failed: %s", err) + } + err = wt.addOrUpdateMenuItem(atomic.AddInt32(&id, 1), "Simple checked enabled", false, true) + if err != nil { + t.Errorf("mergeMenuItem failed: %s", err) + } + err = wt.addOrUpdateMenuItem(atomic.AddInt32(&id, 1), "Simple checked disabled", true, true) + if err != nil { + t.Errorf("mergeMenuItem failed: %s", err) + } + + err = wt.hideMenuItem(1) + if err != nil { + t.Errorf("hideMenuItem failed: %s", err) + } + + err = wt.hideMenuItem(100) + if err == nil { + t.Error("hideMenuItem failed: must return error on invalid item id") + } + + err = wt.addOrUpdateMenuItem(2, "Simple disabled update", true, false) + if err != nil { + t.Errorf("mergeMenuItem failed: %s", err) + } + + time.AfterFunc(1*time.Second, quit) + + m := struct { + WindowHandle windows.Handle + Message uint32 + Wparam uintptr + Lparam uintptr + Time uint32 + Pt point + }{} + for { + ret, _, err := pGetMessage.Call(uintptr(unsafe.Pointer(&m)), 0, 0, 0) + res := int32(ret) + if res == -1 { + t.Errorf("win32 GetMessage failed: %v", err) + return + } else if res == 0 { + break + } + pTranslateMessage.Call(uintptr(unsafe.Pointer(&m))) + pDispatchMessage.Call(uintptr(unsafe.Pointer(&m))) + } +} + +func TestWindowsRun(t *testing.T) { + onReady := func() { + b, err := ioutil.ReadFile(iconFilePath) + if err != nil { + t.Fatalf("Can't load icon file: %v", err) + } + SetIcon(b) + SetTitle("Test title с кириллицей") + + bSomeBtn := AddMenuItem("Йа кнопко", "") + bSomeBtn.Check() + AddSeparator() + bQuit := AddMenuItem("Quit", "Quit the whole app") + go func() { + <-bQuit.ClickedCh + t.Log("Quit reqested") + Quit() + }() + time.AfterFunc(1*time.Second, Quit) + } + + onExit := func() { + t.Log("Exit success") + } + + Run(onReady, onExit) +} -- cgit v1.2.3