1
0
mirror of https://github.com/joshuarubin/go-sway synced 2024-11-26 08:43:49 +01:00
go-sway/sway_test.go
2022-02-11 12:11:31 -07:00

165 lines
2.6 KiB
Go

package sway_test
import (
"context"
"encoding/json"
"errors"
"fmt"
"log"
"testing"
"time"
sway "github.com/joshuarubin/go-sway"
)
func printJSON(v interface{}) {
out, _ := json.MarshalIndent(v, "", " ")
fmt.Println(string(out))
}
func TestSocket(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond)
defer cancel()
client, err := sway.New(ctx)
if err != nil {
t.Fatal(err)
}
workspaces, err := client.GetWorkspaces(ctx)
if err != nil {
t.Fatal(err)
}
printJSON(workspaces)
outputs, err := client.GetOutputs(ctx)
if err != nil {
t.Fatal(err)
}
printJSON(outputs)
marks, err := client.GetMarks(ctx)
if err != nil {
t.Fatal(err)
}
printJSON(marks)
barIDs, err := client.GetBarIDs(ctx)
if err != nil {
t.Fatal(err)
}
printJSON(barIDs)
for _, id := range barIDs {
config, err := client.GetBarConfig(ctx, id)
if err != nil {
t.Fatal(err)
}
printJSON(config)
}
version, err := client.GetVersion(ctx)
if err != nil {
t.Fatal(err)
}
printJSON(*version)
bindingModes, err := client.GetBindingModes(ctx)
if err != nil {
t.Fatal(err)
}
printJSON(bindingModes)
config, err := client.GetConfig(ctx)
if err != nil {
t.Fatal(err)
}
printJSON(config)
tick, err := client.SendTick(ctx, "foo")
if err != nil {
t.Fatal(err)
}
printJSON(tick)
inputs, err := client.GetInputs(ctx)
if err != nil {
t.Fatal(err)
}
printJSON(inputs)
seats, err := client.GetSeats(ctx)
if err != nil {
t.Fatal(err)
}
printJSON(seats)
n, err := client.GetTree(ctx)
if err != nil {
t.Fatal(err)
}
processFocus(ctx, client, n.FocusedNode())
th := testHandler{
EventHandler: sway.NoOpEventHandler(),
client: client,
}
if err = sway.Subscribe(ctx, th, sway.EventTypeWindow); err != nil && !errors.Is(err, context.DeadlineExceeded) {
t.Fatal(err)
}
}
type testHandler struct {
sway.EventHandler
client sway.Client
}
func (h testHandler) Window(ctx context.Context, e sway.WindowEvent) {
if e.Change != "focus" {
return
}
processFocus(ctx, h.client, e.Container.FocusedNode())
}
func processFocus(ctx context.Context, client sway.Client, node *sway.Node) {
if node == nil {
return
}
opt := "none"
if node.AppID == nil || *node.AppID != "kitty" {
opt = "altwin:ctrl_win"
}
if _, err := client.RunCommand(ctx, `input '*' xkb_options `+opt); err != nil {
log.Println(err)
}
}
func TestFocused(t *testing.T) {
ctx := context.Background()
client, err := sway.New(ctx)
if err != nil {
t.Error(err)
}
tree, err := client.GetTree(ctx)
if err != nil {
t.Error(err)
}
f := tree.FocusedNode()
printJSON(f)
}