40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
package shortcutui
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestNativeShortcutListOpensAndClosesFromKeyboard(t *testing.T) {
|
|
if os.Getenv("CTHULHU_NATIVE_X11") != "1" {
|
|
t.Skip("requires isolated X11 display")
|
|
}
|
|
finished := make(chan error, 1)
|
|
go func() {
|
|
deadline := time.Now().Add(4 * time.Second)
|
|
for time.Now().Before(deadline) {
|
|
if output, err := exec.Command("xdotool", "search", "--onlyvisible", "--name", "^Cthulhu Shortcut Test$").Output(); err == nil && len(strings.TrimSpace(string(output))) != 0 {
|
|
window := strings.Fields(string(output))[0]
|
|
if err := exec.Command("xdotool", "windowfocus", window).Run(); err != nil {
|
|
finished <- err
|
|
return
|
|
}
|
|
finished <- exec.Command("xdotool", "key", "Escape").Run()
|
|
return
|
|
}
|
|
time.Sleep(20 * time.Millisecond)
|
|
}
|
|
finished <- os.ErrDeadlineExceeded
|
|
}()
|
|
data := `{"title":"Cthulhu Shortcut Test","rows":[{"group":"Default","label":"Quit Cthulhu.","keys":"Cthulhu+q"}]}`
|
|
if err := Run(strings.NewReader(data)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := <-finished; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|