// SPDX-License-Identifier: GPL-3.0-or-later package plan import ( "strings" "testing" "krino/internal/config" "krino/internal/enumtest" ) // TestEveryKindIsNamed: every Kind has its own display name and a JSON // action name, and every config.ActionKind maps onto a Kind. Kind and // ActionKind are iota blocks from 0, so the i-th constant is the value i. func TestEveryKindIsNamed(t *testing.T) { kinds, err := enumtest.Names("step.go", "Kind") if err != nil { t.Fatal(err) } seen := map[string]bool{} for i, name := range kinds { k := Kind(i) if s := k.String(); strings.HasPrefix(s, "Kind(") || seen[s] { t.Errorf("%s: String() = %q", name, s) } else { seen[s] = true } if actionNames[k] == "" { t.Errorf("%s has no JSON action name", name) } } actions, err := enumtest.Names("../config/dir.go", "ActionKind") if err != nil { t.Fatal(err) } for i, name := range actions { func() { defer func() { if r := recover(); r != nil { t.Errorf("config.%s has no plan.Kind: %v", name, r) } }() stepKind(config.ActionKind(i)) }() } } // TestEveryConflictPolicyIsPlanned: every config.Conflict value is resolved // by its own branch; an unknown value panics instead of quietly planning as // suffix (review cli F13). Conflict is an iota block from 0. func TestEveryConflictPolicyIsPlanned(t *testing.T) { policies, err := enumtest.Names("../config/settings.go", "Conflict") if err != nil { t.Fatal(err) } d := fakeDisk{exists: map[string]bool{"/r/b.pdf": true}} for i, name := range policies { func() { defer func() { if r := recover(); r != nil { t.Errorf("config.%s is not planned: %v", name, r) } }() resolveConflict(Move, config.Conflict(i), "/r/a.pdf", "/r/b.pdf", d, claimed{}) }() } defer func() { if recover() == nil { t.Error("an unknown conflict policy did not panic") } }() resolveConflict(Move, config.Conflict(len(policies)), "/r/a.pdf", "/r/b.pdf", d, claimed{}) }