1package app23import (4 "testing"56 "github.com/FelineStateMachine/puzzletea/game"7 "github.com/FelineStateMachine/puzzletea/puzzle"8 "github.com/FelineStateMachine/puzzletea/registry"9)1011type testMode struct {12 game.BaseMode13}1415func newTestMode(title string) testMode {16 return testMode{BaseMode: game.NewBaseMode(title, title+" description")}17}1819func TestModeDisplayTitlesStripUniqueGridSizes(t *testing.T) {20 t.Parallel()2122 entry := registry.Entry{23 Definition: puzzle.Definition{Name: "Example"},24 Variants: []registry.VariantEntry{25 {Definition: puzzle.VariantDef{Title: "Mini 5x5", Description: "Mini 5x5 description"}},26 {Definition: puzzle.VariantDef{Title: "Hard 10x10", Description: "Hard 10x10 description"}},27 },28 }2930 got := modeDisplayTitles(entry)31 want := []string{"Mini", "Hard"}3233 if len(got) != len(want) {34 t.Fatalf("len(modeDisplayTitles()) = %d, want %d", len(got), len(want))35 }36 for i := range want {37 if got[i] != want[i] {38 t.Fatalf("modeDisplayTitles()[%d] = %q, want %q", i, got[i], want[i])39 }40 }41}4243func TestModeDisplayTitlesKeepDuplicateBaseNames(t *testing.T) {44 t.Parallel()4546 entry := registry.Entry{47 Definition: puzzle.Definition{Name: "Example"},48 Variants: []registry.VariantEntry{49 {Definition: puzzle.VariantDef{Title: "Easy 5x5", Description: "Easy 5x5 description"}},50 {Definition: puzzle.VariantDef{Title: "Easy 10x10", Description: "Easy 10x10 description"}},51 {Definition: puzzle.VariantDef{Title: "Hard 10x10", Description: "Hard 10x10 description"}},52 },53 }5455 got := modeDisplayTitles(entry)56 want := []string{"Easy 5x5", "Easy 10x10", "Hard"}5758 if len(got) != len(want) {59 t.Fatalf("len(modeDisplayTitles()) = %d, want %d", len(got), len(want))60 }61 for i := range want {62 if got[i] != want[i] {63 t.Fatalf("modeDisplayTitles()[%d] = %q, want %q", i, got[i], want[i])64 }65 }66}6768func TestBuildModeDisplayItemsPreservesOriginalMode(t *testing.T) {69 t.Parallel()7071 original := newTestMode("Hard 10x10")72 entry := registry.Entry{73 Definition: puzzle.Definition{Name: "Example"},74 Variants: []registry.VariantEntry{{75 Definition: puzzle.VariantDef{Title: original.Title(), Description: original.Description()},76 }},77 }7879 items := buildModeDisplayItems(entry)80 if len(items) != 1 {81 t.Fatalf("len(buildModeDisplayItems()) = %d, want 1", len(items))82 }8384 displayMode, ok := items[0].(game.Mode)85 if !ok {86 t.Fatal("buildModeDisplayItems()[0] does not implement game.Mode")87 }88 if got := displayMode.Title(); got != "Hard" {89 t.Fatalf("display item Title() = %q, want %q", got, "Hard")90 }9192 mode, ok := unwrapModeDisplayItem(items[0]).(registry.VariantEntry)93 if !ok {94 t.Fatal("unwrapModeDisplayItem() did not return a registry.VariantEntry")95 }96 if got := mode.Definition.Title; got != "Hard 10x10" {97 t.Fatalf("unwrapped mode Title() = %q, want %q", got, "Hard 10x10")98 }99}