aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/app/outcome_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-10-08 19:39:00 +0900
committerOphestra <cat@gensokyo.uk>2025-10-08 19:39:00 +0900
commitee6c471fe6e183d78e396a23b2a92fd26bb31143 (patch)
tree6d7eb6a6d7d057a840936e435150f30b57a8a2f3 /internal/app/outcome_test.go
parent16bf3178d358f72ce9605352364809b42229af5f (diff)
internal/app: relocate ops condition
This allows reuse and finer grained testing of fromConfig. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/app/outcome_test.go')
-rw-r--r--internal/app/outcome_test.go77
1 files changed, 77 insertions, 0 deletions
diff --git a/internal/app/outcome_test.go b/internal/app/outcome_test.go
new file mode 100644
index 00000000..a16f0a10
--- /dev/null
+++ b/internal/app/outcome_test.go
@@ -0,0 +1,77 @@
+package app
+
+import (
+ "reflect"
+ "testing"
+
+ "hakurei.app/hst"
+ "hakurei.app/internal/app/state"
+)
+
+func TestOutcomeStateValid(t *testing.T) {
+ testCases := []struct {
+ name string
+ s *outcomeState
+ want bool
+ }{
+ {"nil", nil, false},
+ {"zero", new(outcomeState), false},
+ {"id", &outcomeState{Container: new(hst.ContainerConfig), EnvPaths: new(EnvPaths)}, false},
+ {"container", &outcomeState{ID: new(state.ID), EnvPaths: new(EnvPaths)}, false},
+ {"envpaths", &outcomeState{ID: new(state.ID), Container: new(hst.ContainerConfig)}, false},
+ {"valid", &outcomeState{ID: new(state.ID), Container: new(hst.ContainerConfig), EnvPaths: new(EnvPaths)}, true},
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ if got := tc.s.valid(); got != tc.want {
+ t.Errorf("valid: %v, want %v", got, tc.want)
+ }
+ })
+ }
+}
+
+func TestFromConfig(t *testing.T) {
+ testCases := []struct {
+ name string
+ config *hst.Config
+ want []outcomeOp
+ }{
+ {"ne", new(hst.Config), []outcomeOp{
+ &spParamsOp{},
+ spFilesystemOp{},
+ spRuntimeOp{},
+ spTmpdirOp{},
+ spAccountOp{},
+ spFinal{},
+ }},
+ {"wayland pulse", &hst.Config{Enablements: hst.NewEnablements(hst.EWayland | hst.EPulse)}, []outcomeOp{
+ &spParamsOp{},
+ spFilesystemOp{},
+ spRuntimeOp{},
+ spTmpdirOp{},
+ spAccountOp{},
+ &spWaylandOp{},
+ &spPulseOp{},
+ spFinal{},
+ }},
+ {"all", &hst.Config{Enablements: hst.NewEnablements(0xff)}, []outcomeOp{
+ &spParamsOp{},
+ spFilesystemOp{},
+ spRuntimeOp{},
+ spTmpdirOp{},
+ spAccountOp{},
+ &spWaylandOp{},
+ &spX11Op{},
+ &spPulseOp{},
+ &spDBusOp{},
+ spFinal{},
+ }},
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ if got := fromConfig(tc.config); !reflect.DeepEqual(got, tc.want) {
+ t.Errorf("fromConfig: %#v, want %#v", got, tc.want)
+ }
+ })
+ }
+}