1package gtkmenu
2
3import (
4 "testing"
5
6 "github.com/bnema/dumber/internal/application/port"
7 "github.com/bnema/puregotk/v4/gtk"
8 "github.com/stretchr/testify/require"
9)
10
11func TestChoosePopoverParent(t *testing.T) {
12 anchor := >k.Widget{}
13 parent := >k.Widget{}
14
15 require.Same(t, parent, ChoosePopoverParent(anchor, parent))
16 require.Same(t, anchor, ChoosePopoverParent(anchor, nil))
17}
18
19func TestPopoverPointingRect(t *testing.T) {
20 t.Run("uses translated parent coordinates when available", func(t *testing.T) {
21 rect := PopoverPointingRect(64, 96, func(srcX, srcY float64) (float64, float64, bool) {
22 require.InDelta(t, 64.0, srcX, 0.0001)
23 require.InDelta(t, 96.0, srcY, 0.0001)
24 return 24, 48, true
25 })
26
27 require.Equal(t, int32(24), rect.X)
28 require.Equal(t, int32(48), rect.Y)
29 require.Equal(t, int32(1), rect.Width)
30 require.Equal(t, int32(1), rect.Height)
31 })
32
33 t.Run("falls back to raw coordinates when translation fails", func(t *testing.T) {
34 rect := PopoverPointingRect(10, 20, func(srcX, srcY float64) (float64, float64, bool) {
35 return srcX, srcY, false
36 })
37
38 require.Equal(t, int32(10), rect.X)
39 require.Equal(t, int32(20), rect.Y)
40 })
41}
42
43func TestBuildButtons(t *testing.T) {
44 items := []port.MenuItem{
45 {Action: port.MenuActionBack, Label: "Back"},
46 {},
47 {Action: port.MenuActionReload, Label: "Reload"},
48 {Action: port.MenuActionInspectElement, Label: "Inspect Element"},
49 }
50
51 renderItems := BuildButtons(items)
52 require.Len(t, renderItems, 4)
53
54 require.Equal(t, "Back", renderItems[0].item.Label)
55 require.False(t, renderItems[0].separator)
56
57 require.True(t, renderItems[1].separator)
58
59 require.Equal(t, "Reload", renderItems[2].item.Label)
60 require.False(t, renderItems[2].separator)
61
62 require.Equal(t, "Inspect Element", renderItems[3].item.Label)
63 require.False(t, renderItems[3].separator)
64}