59 lines
2.3 KiB
Go
59 lines
2.3 KiB
Go
package catalogue
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
// Defends novox/hq ADR 0210 §3: a contribution is a dependency on the seat that receives it.
|
|
|
|
func TestAContributionDependsOnTheSeatThatPlacesIt(t *testing.T) {
|
|
env := mod("theme", nil, nil, nil)
|
|
env.Environment = &Environment{Variables: map[string]string{"GTK_THEME": "Adwaita:dark"}}
|
|
path := mod("toolchain", nil, nil, nil)
|
|
path.Environment = &Environment{Path: []PathEntry{{Entry: "/opt/x/bin"}}}
|
|
shell := mod("prompt", nil, nil, nil)
|
|
shell.Shell = []ShellCode{{For: "zsh", Slot: "first", Code: "true"}}
|
|
session := mod("wallpaper", nil, nil, nil)
|
|
session.Shell = []ShellCode{{For: "xinitrc", Slot: "normal", Code: "true"}}
|
|
resources := mod("bar", nil, nil, nil)
|
|
resources.Shell = []ShellCode{{For: "xresources", Slot: "normal", Code: "x: y"}}
|
|
empty := mod("nothing", nil, nil, nil)
|
|
empty.Environment = &Environment{}
|
|
|
|
cases := map[string]struct {
|
|
m Manifest
|
|
want []string
|
|
}{
|
|
"a variable": {env, []string{EnvironmentSeat}},
|
|
"a path entry": {path, []string{EnvironmentSeat}},
|
|
"shell code": {shell, []string{LoginShellSeat}},
|
|
"the session's start": {session, []string{DisplayServerSeat}},
|
|
"the session's X resources": {resources, []string{DisplayServerSeat}},
|
|
"an empty environment": {empty, nil},
|
|
}
|
|
for name, c := range cases {
|
|
got := DependsOn(nil, c.m)
|
|
if len(got) == 0 {
|
|
got = nil
|
|
}
|
|
if !reflect.DeepEqual(got, c.want) {
|
|
t.Errorf("%s depends on %v, want %v", name, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestAHolderMeetsItsOwnContribution(t *testing.T) {
|
|
// The display server's module contributes nothing to its own seat today, but the zsh module's
|
|
// environment contributions do go to another seat: a claim meets only the seat it names.
|
|
zsh := mod("zsh", nil, nil, nil, Claim{Name: LoginShellSeat})
|
|
zsh.Shell = []ShellCode{{For: "zsh", Slot: "normal", Code: "true"}}
|
|
zsh.Environment = &Environment{Variables: map[string]string{"EDITOR": "vim"}}
|
|
catalogue := map[string]Manifest{"zsh": zsh,
|
|
"node-env": mod("node-env", nil, nil, nil, Claim{Name: EnvironmentSeat})}
|
|
unheld := UnheldDependencies(catalogue, "laptop", []Manifest{zsh}, nil)
|
|
if len(unheld) != 1 || unheld[0].Seat != EnvironmentSeat {
|
|
t.Errorf("zsh alone: unheld %v, want only %s (its shell code is its own seat's)", unheld, EnvironmentSeat)
|
|
}
|
|
}
|