hakurei/internal/wayland/wayland_test.go
Ophestra 3c204b9b40
All checks were successful
Test / Create distribution (push) Successful in 35s
Test / Sandbox (push) Successful in 2m14s
Test / Hakurei (push) Successful in 3m16s
Test / Hpkg (push) Successful in 4m5s
Test / Sandbox (race detector) (push) Successful in 4m18s
Test / Hakurei (race detector) (push) Successful in 5m8s
Test / Flake checks (push) Successful in 1m21s
internal/wayland: increase error detail
This includes targeted paths in the returned errors.

Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-11-16 02:09:50 +09:00

113 lines
3.1 KiB
Go

package wayland_test
import (
"os"
"syscall"
"testing"
"hakurei.app/container/stub"
"hakurei.app/internal/wayland"
)
func TestError(t *testing.T) {
t.Parallel()
testCases := []struct {
name string
err wayland.Error
want string
}{
{"success", wayland.Error{
Cause: wayland.RSuccess,
}, "success"},
{"success errno", wayland.Error{
Cause: wayland.RSuccess,
Errno: stub.UniqueError(0),
}, "unique error 0 injected by the test suite"},
{"wl_display_connect_to_fd", wayland.Error{
Cause: wayland.RConnect,
Errno: stub.UniqueError(1),
}, "wl_display_connect_to_fd failed: unique error 1 injected by the test suite"},
{"wl_registry_add_listener", wayland.Error{
Cause: wayland.RListener,
Errno: stub.UniqueError(2),
}, "wl_registry_add_listener failed: unique error 2 injected by the test suite"},
{"wl_display_roundtrip", wayland.Error{
Cause: wayland.RRoundtrip,
Errno: stub.UniqueError(3),
}, "wl_display_roundtrip failed: unique error 3 injected by the test suite"},
{"not available", wayland.Error{
Cause: wayland.RNotAvail,
}, "compositor does not implement security_context_v1"},
{"not available errno", wayland.Error{
Cause: wayland.RNotAvail,
Errno: syscall.EAGAIN,
}, "compositor does not implement security_context_v1"},
{"socket", wayland.Error{
Cause: wayland.RSocket,
Errno: stub.UniqueError(4),
}, "socket: unique error 4 injected by the test suite"},
{"bind", wayland.Error{
Cause: wayland.RBind,
Path: "/hakurei.0/18783d07791f2460dbbcffb76c24c9e6/wayland",
Errno: stub.UniqueError(5),
}, "cannot bind /hakurei.0/18783d07791f2460dbbcffb76c24c9e6/wayland: unique error 5 injected by the test suite"},
{"listen", wayland.Error{
Cause: wayland.RListen,
Path: "/hakurei.0/18783d07791f2460dbbcffb76c24c9e6/wayland",
Errno: stub.UniqueError(6),
}, "cannot listen on /hakurei.0/18783d07791f2460dbbcffb76c24c9e6/wayland: unique error 6 injected by the test suite"},
{"socket invalid", wayland.Error{
Cause: wayland.RSocket,
}, "socket operation failed"},
{"create", wayland.Error{
Cause: wayland.RCreate,
}, "cannot ensure wayland pathname socket"},
{"create path", wayland.Error{
Cause: wayland.RCreate,
Errno: &os.PathError{Op: "create", Path: "/proc/nonexistent", Err: syscall.EEXIST},
}, "create /proc/nonexistent: file exists"},
{"host socket", wayland.Error{
Cause: wayland.RHostSocket,
Errno: stub.UniqueError(7),
}, "socket: unique error 7 injected by the test suite"},
{"host connect", wayland.Error{
Cause: wayland.RHostConnect,
Host: "/run/user/1971/wayland-1",
Errno: stub.UniqueError(8),
}, "cannot connect to /run/user/1971/wayland-1: unique error 8 injected by the test suite"},
{"invalid", wayland.Error{
Cause: 0xbad,
}, "impossible outcome"},
{"invalid errno", wayland.Error{
Cause: 0xbad,
Errno: stub.UniqueError(9),
}, "impossible outcome: unique error 9 injected by the test suite"},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
if got := tc.err.Message(); got != tc.want {
t.Errorf("Message: %q, want %q", got, tc.want)
}
})
}
}