Owns one dunstrc (the laptop's, in the interface face, its menu on the seat's dmenu command) and the dunstrc.d directory for other modules' rules; D-Bus starts it, so nothing else does. Go tools over the session bus.
78 lines
2.5 KiB
Go
78 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// dunst's shape (novox/hq ADR 0208): it claims node-notifier serving send and history, owns its
|
|
// dunstrc and the drop-in directory other modules' rules go in, and starts nothing — D-Bus starts it
|
|
// on the first notification. It draws only once a notification arrives, through the bus's
|
|
// activation, so it requires no display of its own.
|
|
|
|
func TestItClaimsTheNotifierSeatServingSendAndHistory(t *testing.T) {
|
|
m := readManifest(t)
|
|
if m.Module != "dunst" || m.Seats != nil {
|
|
t.Fatalf("module %q declares seats %v", m.Module, m.Seats)
|
|
}
|
|
if !reflect.DeepEqual(m.Claims, []claim{{Name: "node-notifier", Scope: "node", Serves: []string{"send", "history"}}}) {
|
|
t.Fatalf("claims: %+v", m.Claims)
|
|
}
|
|
if present, absent := m.packages(); !reflect.DeepEqual(present, []string{"dunst", "libnotify"}) || absent != nil {
|
|
t.Fatalf("packages: %v, absent %v", present, absent)
|
|
}
|
|
}
|
|
|
|
func TestItOwnsItsFileAndTheDropInDirectory(t *testing.T) {
|
|
m := readManifest(t)
|
|
m.sameAsSource(t, "configuration", "files/dunstrc")
|
|
if p := m.resource(t, "configuration")["path"]; p != "${machine:account-home}/.config/dunst/dunstrc" {
|
|
t.Fatalf("path: %v", p)
|
|
}
|
|
if d := m.resource(t, "dropins"); d["type"] != "directory" || d["path"] != "${machine:account-home}/.config/dunst/dunstrc.d" {
|
|
t.Fatalf("drop-ins: %v", d)
|
|
}
|
|
for _, r := range m.Resources {
|
|
if p, _ := r["path"].(string); strings.Contains(p, "dunstrc.d/") {
|
|
t.Fatalf("a rule of another module's: %v", r)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestTheFileIsTheDecidedOneAndCallsTheSeatsMenu(t *testing.T) {
|
|
m := readManifest(t)
|
|
c := m.resource(t, "configuration")["content"].(string)
|
|
for _, want := range []string{"origin = top-right", "transparency = 0", "corner_radius = 0", "font = Inter 10", "dmenu = dmenu -p dunst"} {
|
|
if !strings.Contains(c, " "+want+"\n") {
|
|
t.Errorf("lacks %q", want)
|
|
}
|
|
}
|
|
for _, never := range []string{"/usr/bin/dmenu", "Hack", "icon_path", "/home/"} {
|
|
if strings.Contains(c, never) {
|
|
t.Errorf("names %q", never)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestNothingStartsItButTheBus(t *testing.T) {
|
|
m := readManifest(t)
|
|
if m.Shell != nil {
|
|
t.Fatalf("a session start: %+v", m.Shell)
|
|
}
|
|
for _, r := range m.Resources {
|
|
if r["type"] == "service" || r["type"] == "process" {
|
|
t.Fatalf("a unit: %v", r)
|
|
}
|
|
if p, _ := r["path"].(string); strings.Contains(p, "autostart") || strings.Contains(p, "i3/config.d") {
|
|
t.Fatalf("a start: %v", r)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestTheToolsAgreeWithTheManifest(t *testing.T) {
|
|
m := readManifest(t)
|
|
checkTheToolsAgree(t, m)
|
|
checkNoSecretsOrInstallationNames(t)
|
|
}
|