package main import ( "reflect" "strings" "testing" ) // i3status-rust's shape (novox/hq ADR 0208): it claims node-bar, requires the X display on its own // machine (its bars are i3bar's), owns its two bars and their icons, places the bars as an i3 drop-in, // and runs the bar watchdog once per session. No block follows one machine's hardware or one person's // devices. func TestItClaimsTheBarSeatAndRequiresTheXDisplay(t *testing.T) { m := readManifest(t) if m.Module != "i3status-rust" || m.Seats != nil { t.Fatalf("module %q declares seats %v", m.Module, m.Seats) } if !reflect.DeepEqual(m.Claims, []claim{{Name: "node-bar", Scope: "node"}}) { t.Fatalf("claims: %+v", m.Claims) } if !reflect.DeepEqual(m.Requires, []string{"x11-display"}) { t.Fatalf("requires: %v", m.Requires) } if present, absent := m.packages(); !reflect.DeepEqual(present, []string{"i3status-rust", "pacman-contrib"}) || absent != nil { t.Fatalf("packages: %v, absent %v", present, absent) } } func TestItOwnsItsFilesAsWrittenInTheModule(t *testing.T) { m := readManifest(t) for id, src := range map[string]string{ "top-bar": "files/top-bar.toml", "bottom-bar": "files/bottom-bar.toml", "icons": "files/icons/custom-icons.toml", "updates": "files/bin/i3status-updates", "watchdog": "files/bin/i3bar-watchdog", "i3-bars": "files/i3/60-i3status-rust.conf", } { m.sameAsSource(t, id, src) } } func TestNoBlockFollowsAMachinesHardwareOrAPersonsDevicesOrCarriesAKey(t *testing.T) { m := readManifest(t) bottom := m.resource(t, "bottom-bar")["content"].(string) for _, never := range []string{`block = "battery"`, `block = "amd_gpu"`, `block = "nvidia_gpu"`, "mac = ", "api_key", "city_id", "openweathermap", "~/scripts/"} { if strings.Contains(bottom, never) { t.Errorf("the bottom bar has %s", never) } } } func TestTheBarsAreAnI3DropInAndTheWatchdogRunsOncePerSession(t *testing.T) { m := readManifest(t) bars := m.resource(t, "i3-bars") if bars["path"] != "${machine:account-home}/.config/i3/config.d/60-i3status-rust.conf" { t.Fatalf("%v", bars["path"]) } c := bars["content"].(string) if strings.Count(c, "bar {") != 2 || !strings.Contains(c, "status_command i3status-rs ~/.config/i3status-rust/bottom-bar.toml") || !strings.Contains(c, "font pango:JetBrainsMono Nerd Font 11") { t.Fatalf("%s", c) } if len(m.Shell) != 1 || m.Shell[0].For != "xinitrc" || m.Shell[0].Slot != "normal" || !strings.Contains(m.Shell[0].Code, `"$HOME/.local/bin/i3bar-watchdog" "$$" &`) { t.Fatalf("%+v", m.Shell) } } func TestTheToolsAgreeWithTheManifest(t *testing.T) { m := readManifest(t) checkTheToolsAgree(t, m) checkNoSecretsOrInstallationNames(t) }