summaryrefslogtreecommitdiff
path: root/vendor/github.com/getlantern/systray/systray_windows_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/getlantern/systray/systray_windows_test.go')
-rw-r--r--vendor/github.com/getlantern/systray/systray_windows_test.go132
1 files changed, 132 insertions, 0 deletions
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)
+}