Skip to content

Commit 5544425

Browse files
committed
accept slog context, update go deps
1 parent 97fcbd8 commit 5544425

5 files changed

Lines changed: 193 additions & 10 deletions

File tree

cmd/reviewGOOSE/main.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,16 @@ const (
7474
ancientPRThreshold = 24 * time.Hour // Refuse to notify for PRs with no activity in this long (safety check)
7575
)
7676

77+
// simplifySource transforms slog source attributes to show only filename:line.
78+
func simplifySource(_ []string, a slog.Attr) slog.Attr {
79+
if a.Key == slog.SourceKey {
80+
if s, ok := a.Value.Any().(*slog.Source); ok {
81+
a.Value = slog.StringValue(fmt.Sprintf("%s:%d", filepath.Base(s.File), s.Line))
82+
}
83+
}
84+
return a
85+
}
86+
7787
// PR represents a pull request with metadata.
7888
type PR struct {
7989
UpdatedAt time.Time
@@ -195,10 +205,7 @@ func main() {
195205
if debugMode {
196206
logLevel = slog.LevelDebug
197207
}
198-
opts := &slog.HandlerOptions{
199-
AddSource: true,
200-
Level: logLevel,
201-
}
208+
opts := &slog.HandlerOptions{AddSource: true, Level: logLevel, ReplaceAttr: simplifySource}
202209
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, opts)))
203210
slog.Info("Starting Goose", "version", getVersion(), "commit", commit, "date", date)
204211
slog.Info("Configuration", "update_interval", updateInterval, "max_retries", maxRetries, "max_delay", maxRetryDelay)
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
//go:build !linux && !freebsd && !openbsd && !netbsd && !dragonfly && !solaris && !illumos && !aix
2+
3+
package x11tray
4+
5+
import (
6+
"context"
7+
"testing"
8+
)
9+
10+
func TestHealthCheck(t *testing.T) {
11+
if err := HealthCheck(); err != nil {
12+
t.Errorf("HealthCheck() = %v, want nil", err)
13+
}
14+
}
15+
16+
func TestProxyProcessStop(t *testing.T) {
17+
p := &ProxyProcess{}
18+
if err := p.Stop(); err != nil {
19+
t.Errorf("Stop() = %v, want nil", err)
20+
}
21+
}
22+
23+
func TestTryProxy(t *testing.T) {
24+
p, err := TryProxy(context.Background())
25+
if err != nil {
26+
t.Errorf("TryProxy() error = %v, want nil", err)
27+
}
28+
if p == nil {
29+
t.Error("TryProxy() = nil, want non-nil")
30+
}
31+
if err := p.Stop(); err != nil {
32+
t.Errorf("Stop() = %v, want nil", err)
33+
}
34+
}
35+
36+
func TestTryProxyCanceledContext(t *testing.T) {
37+
ctx, cancel := context.WithCancel(context.Background())
38+
cancel()
39+
40+
p, err := TryProxy(ctx)
41+
if err != nil {
42+
t.Errorf("TryProxy() error = %v, want nil", err)
43+
}
44+
if p == nil {
45+
t.Error("TryProxy() = nil, want non-nil")
46+
}
47+
}
48+
49+
func TestEnsureTray(t *testing.T) {
50+
p, err := EnsureTray(context.Background())
51+
if err != nil {
52+
t.Errorf("EnsureTray() error = %v, want nil", err)
53+
}
54+
if p == nil {
55+
t.Error("EnsureTray() = nil, want non-nil")
56+
}
57+
if err := p.Stop(); err != nil {
58+
t.Errorf("Stop() = %v, want nil", err)
59+
}
60+
}
61+
62+
func TestEnsureTrayCanceledContext(t *testing.T) {
63+
ctx, cancel := context.WithCancel(context.Background())
64+
cancel()
65+
66+
p, err := EnsureTray(ctx)
67+
if err != nil {
68+
t.Errorf("EnsureTray() error = %v, want nil", err)
69+
}
70+
if p == nil {
71+
t.Error("EnsureTray() = nil, want non-nil")
72+
}
73+
}
74+
75+
func TestShowContextMenu(t *testing.T) {
76+
// No-op on non-Unix; just verify no panic
77+
ShowContextMenu()
78+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
//go:build linux || freebsd || openbsd || netbsd || dragonfly || solaris || illumos || aix
2+
3+
package x11tray
4+
5+
import (
6+
"context"
7+
"os/exec"
8+
"strings"
9+
"testing"
10+
11+
"github.com/godbus/dbus/v5"
12+
)
13+
14+
func skipIfNoDBus(t *testing.T) {
15+
t.Helper()
16+
conn, err := dbus.ConnectSessionBus()
17+
if err != nil {
18+
t.Skipf("D-Bus session bus not available: %v", err)
19+
}
20+
conn.Close()
21+
}
22+
23+
func TestHealthCheck(t *testing.T) {
24+
skipIfNoDBus(t)
25+
26+
err := HealthCheck()
27+
if err == nil {
28+
return // system tray available
29+
}
30+
// Verify error mentions the expected service
31+
if !strings.Contains(err.Error(), "StatusNotifierWatcher") && !strings.Contains(err.Error(), "system tray") {
32+
t.Errorf("HealthCheck() error = %v, want mention of StatusNotifierWatcher or system tray", err)
33+
}
34+
}
35+
36+
func TestProxyProcessStop(t *testing.T) {
37+
t.Run("nil", func(t *testing.T) {
38+
p := &ProxyProcess{}
39+
if err := p.Stop(); err != nil {
40+
t.Errorf("Stop() = %v, want nil", err)
41+
}
42+
})
43+
44+
t.Run("with cancel", func(t *testing.T) {
45+
ctx, cancel := context.WithCancel(context.Background())
46+
p := &ProxyProcess{cancel: cancel}
47+
48+
if err := p.Stop(); err != nil {
49+
t.Errorf("Stop() = %v, want nil", err)
50+
}
51+
select {
52+
case <-ctx.Done():
53+
// expected
54+
default:
55+
t.Error("Stop() did not cancel context")
56+
}
57+
})
58+
59+
t.Run("unstarted cmd", func(t *testing.T) {
60+
p := &ProxyProcess{cmd: exec.Command("echo", "test")}
61+
if err := p.Stop(); err != nil {
62+
t.Errorf("Stop() = %v, want nil", err)
63+
}
64+
})
65+
}
66+
67+
func TestTryProxy(t *testing.T) {
68+
p, err := TryProxy(context.Background())
69+
if err == nil {
70+
p.Stop()
71+
return // snixembed installed and working
72+
}
73+
if !strings.Contains(err.Error(), "snixembed") {
74+
t.Errorf("TryProxy() error = %v, want mention of snixembed", err)
75+
}
76+
}
77+
78+
func TestEnsureTray(t *testing.T) {
79+
skipIfNoDBus(t)
80+
81+
p, err := EnsureTray(context.Background())
82+
if err == nil {
83+
if p != nil {
84+
p.Stop()
85+
}
86+
return
87+
}
88+
// Verify error is reasonable
89+
msg := err.Error()
90+
if !strings.Contains(msg, "tray") && !strings.Contains(msg, "proxy") && !strings.Contains(msg, "snixembed") {
91+
t.Errorf("EnsureTray() error = %v, want mention of tray/proxy/snixembed", err)
92+
}
93+
}
94+
95+
func TestShowContextMenu(t *testing.T) {
96+
// Should not panic regardless of D-Bus availability
97+
ShowContextMenu()
98+
}

go.mod

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ module github.com/codeGROOVE-dev/goose
22

33
go 1.25.4
44

5+
replace github.com/codeGROOVE-dev/sprinkler => ../sprinkler
6+
57
require (
68
github.com/codeGROOVE-dev/retry v1.3.1
7-
github.com/codeGROOVE-dev/sprinkler v0.0.0-20251113030909-5962af625370
8-
github.com/codeGROOVE-dev/turnclient v0.0.0-20251210023051-bbb7e1943ebd
9+
github.com/codeGROOVE-dev/sprinkler v0.0.0-20260107012903-de12e2b7508a
10+
github.com/codeGROOVE-dev/turnclient v0.0.0-20260106162340-d8be78b5c41f
911
github.com/energye/systray v1.0.2
1012
github.com/gen2brain/beeep v0.11.2
1113
github.com/godbus/dbus/v5 v5.2.2

go.sum

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,8 @@ github.com/codeGROOVE-dev/prx v0.0.0-20260106161606-c98f36600fa9 h1:sAfFmbmeZVM1
1010
github.com/codeGROOVE-dev/prx v0.0.0-20260106161606-c98f36600fa9/go.mod h1:pAsjPLE2zHbj5mcM9CGa5AIxpxcjklSJvLbK5yQY7UM=
1111
github.com/codeGROOVE-dev/retry v1.3.1 h1:BAkfDzs6FssxLCGWGgM97bb+6/8GTa40Cs147vXkJOg=
1212
github.com/codeGROOVE-dev/retry v1.3.1/go.mod h1:+b3huqYGY1+ZJyuCmR8nBVLjd3WJ7qAFss+sI4s6FSc=
13-
github.com/codeGROOVE-dev/sprinkler v0.0.0-20251113030909-5962af625370 h1:uYXBDnaRRf4q6X/IWOm6O/cOj57tVkpjfVvwn+SfHp0=
14-
github.com/codeGROOVE-dev/sprinkler v0.0.0-20251113030909-5962af625370/go.mod h1:sOvKRad1kRPAOIUm7spNR3aeVQjtk9VoS8uo6NL4kus=
15-
github.com/codeGROOVE-dev/turnclient v0.0.0-20251210023051-bbb7e1943ebd h1:Baps/A2EaaMlZlTseAO9/ig0oWFmqUGLtNRJm9bEDXA=
16-
github.com/codeGROOVE-dev/turnclient v0.0.0-20251210023051-bbb7e1943ebd/go.mod h1:B2rJBMHZ+rI7v629vSF2rYb669OUY+/5tGeWdUSI65A=
13+
github.com/codeGROOVE-dev/turnclient v0.0.0-20260106162340-d8be78b5c41f h1:VSPddn4VLG4kBd3i/KVbeqvCm3FIdjcP58eqEzYQHig=
14+
github.com/codeGROOVE-dev/turnclient v0.0.0-20260106162340-d8be78b5c41f/go.mod h1:X83lJ53oAIwyuL6CWJh/3iWkbx+V8tf+5ZIFAueYai0=
1715
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1816
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1917
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

0 commit comments

Comments
 (0)