xworkmate-bridge/internal/desktop/input_test.go

99 lines
2.4 KiB
Go

package desktop
import (
"os"
"path/filepath"
"strings"
"testing"
)
func TestDesktopCommandEnvPreservesProcessEnvironmentAndOverridesDisplay(t *testing.T) {
t.Setenv("PATH", "/usr/local/bin:/usr/bin")
t.Setenv("HOME", "/home/ubuntu")
t.Setenv("DISPLAY", ":old")
env := desktopCommandEnv(":0.0")
if !envContains(env, "PATH=/usr/local/bin:/usr/bin") {
t.Fatalf("expected PATH to be preserved, got %#v", env)
}
if !envContains(env, "HOME=/home/ubuntu") {
t.Fatalf("expected HOME to be preserved, got %#v", env)
}
if !envContains(env, "DISPLAY=:0.0") {
t.Fatalf("expected DISPLAY override, got %#v", env)
}
if countEnvPrefix(env, "DISPLAY=") != 1 {
t.Fatalf("expected exactly one DISPLAY entry, got %#v", env)
}
}
func TestDesktopCommandEnvAddsHomeXauthorityWhenAvailable(t *testing.T) {
home := t.TempDir()
t.Setenv("HOME", home)
t.Setenv("PATH", "/usr/local/bin:/usr/bin")
t.Setenv("DISPLAY", ":old")
if err := os.WriteFile(filepath.Join(home, ".Xauthority"), []byte("cookie"), 0o600); err != nil {
t.Fatalf("failed to create Xauthority fixture: %v", err)
}
env := desktopCommandEnv(":12")
if !envContains(env, "DISPLAY=:12") {
t.Fatalf("expected DISPLAY override, got %#v", env)
}
if !envContains(env, "XAUTHORITY="+filepath.Join(home, ".Xauthority")) {
t.Fatalf("expected XAUTHORITY from HOME, got %#v", env)
}
}
func TestResolveDesktopDisplayWithProberUsesRequestedExplicitDisplay(t *testing.T) {
got, ok := resolveDesktopDisplayWithProber(
":12",
"",
[]string{":11"},
func(display string) bool {
t.Fatalf("explicit display should not be probed, got %s", display)
return false
},
)
if !ok || got != ":12" {
t.Fatalf("expected explicit display :12, got %q ok=%v", got, ok)
}
}
func TestResolveDesktopDisplayWithProberSelectsActiveSocketDisplay(t *testing.T) {
got, ok := resolveDesktopDisplayWithProber(
":0.0",
"",
[]string{":12", ":11", ":10"},
func(display string) bool {
return display == ":11"
},
)
if !ok || got != ":11" {
t.Fatalf("expected first probed active display :11, got %q ok=%v", got, ok)
}
}
func envContains(env []string, expected string) bool {
for _, item := range env {
if item == expected {
return true
}
}
return false
}
func countEnvPrefix(env []string, prefix string) int {
count := 0
for _, item := range env {
if strings.HasPrefix(item, prefix) {
count++
}
}
return count
}