1//go:build linux
2
3package systemtest
4
5import (
6 "encoding/json"
7 "image/color"
8 "os"
9 "path/filepath"
10 "testing"
11 "time"
12
13 "github.com/bnema/nefergui/internal/harness"
14)
15
16func TestDemoThemeAndPreferences(t *testing.T) {
17 requireHarness(t)
18 bin := demoBinary(t)
19 script := filepath.Join(t.TempDir(), "input.txt")
20 if err := os.WriteFile(script, []byte("sleep 8s\nmove 890 24\nclick left\nsleep 500ms\nmove 80 166\nclick left\nsleep 500ms\nmove 600 580\nsleep 1s\n"), 0600); err != nil {
21 t.Fatal(err)
22 }
23 res := runDemo(t, bin, 1, 400, script, 12*time.Second)
24 data, err := os.ReadFile(filepath.Join(res.Artifacts["debug"], "demo-state.json"))
25 if err != nil {
26 t.Fatal(err)
27 }
28 var state struct {
29 Page string
30 DarkMode bool
31 }
32 if err := json.Unmarshal(data, &state); err != nil {
33 t.Fatal(err)
34 }
35 if !state.DarkMode || state.Page != "settings" {
36 t.Fatalf("theme/navigation did not update: %+v", state)
37 }
38 img := lastMappedFrame(t, res.Artifacts["frames"])
39 for _, p := range []struct {
40 x, y int
41 want color.NRGBA
42 }{{600, 80, color.NRGBA{24, 24, 27, 255}}, {240, 230, color.NRGBA{24, 24, 27, 255}}} {
43 if err := harness.PixelProbe(img, p.x, p.y, p.want, 3); err != nil {
44 t.Error(err)
45 }
46 }
47}