1package wayland
2
3import (
4 "encoding/binary"
5 "slices"
6 "testing"
7
8 "github.com/bnema/go-wayland-bindings/server/xdgshell"
9 "github.com/bnema/neferwl/internal/ports"
10)
11
12func TestToplevelStates(t *testing.T) {
13 tiled := []xdgshell.ToplevelState{xdgshell.ToplevelStateTiledLeft, xdgshell.ToplevelStateTiledRight, xdgshell.ToplevelStateTiledTop, xdgshell.ToplevelStateTiledBottom}
14 tests := []struct {
15 name string
16 c ports.ConfigureWindow
17 version int32
18 want []xdgshell.ToplevelState
19 }{
20 {"tiled", ports.ConfigureWindow{Activated: true, Visible: true}, 2, append([]xdgshell.ToplevelState{xdgshell.ToplevelStateActivated, xdgshell.ToplevelStateMaximized}, tiled...)},
21 {"tiled v1", ports.ConfigureWindow{Visible: true}, 1, []xdgshell.ToplevelState{xdgshell.ToplevelStateMaximized}},
22 {"floating", ports.ConfigureWindow{Floating: true, Activated: true, Visible: true}, 6, []xdgshell.ToplevelState{xdgshell.ToplevelStateActivated}},
23 {"fullscreen", ports.ConfigureWindow{Fullscreen: true, Visible: true}, 6, []xdgshell.ToplevelState{xdgshell.ToplevelStateFullscreen}},
24 {"hidden tiled v6", ports.ConfigureWindow{}, 6, append([]xdgshell.ToplevelState{xdgshell.ToplevelStateSuspended, xdgshell.ToplevelStateMaximized}, tiled...)},
25 {"hidden fullscreen v6", ports.ConfigureWindow{Fullscreen: true}, 6, []xdgshell.ToplevelState{xdgshell.ToplevelStateFullscreen, xdgshell.ToplevelStateSuspended}},
26 {"captured hidden tiled v6", ports.ConfigureWindow{Captured: true}, 6, append([]xdgshell.ToplevelState{xdgshell.ToplevelStateMaximized}, tiled...)},
27 {"hidden floating v5", ports.ConfigureWindow{Floating: true}, 5, nil},
28 }
29 for _, tt := range tests {
30 t.Run(tt.name, func(t *testing.T) {
31 raw := toplevelStates(tt.c, tt.version)
32 var got []xdgshell.ToplevelState
33 for i := 0; i+4 <= len(raw); i += 4 {
34 got = append(got, xdgshell.ToplevelState(binary.LittleEndian.Uint32(raw[i:])))
35 }
36 if !slices.Equal(got, tt.want) {
37 t.Fatalf("states = %v, want %v", got, tt.want)
38 }
39 })
40 }
41}