From c696829f9e37e9f3752fdb89ebaadd4b3b237bea Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Sat, 2 Aug 2025 14:47:01 +0200 Subject: add support for flexible attacks --- go/game/cardImplementations_test.go | 63 +++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'go/game/cardImplementations_test.go') diff --git a/go/game/cardImplementations_test.go b/go/game/cardImplementations_test.go index e073a027..fc051f4e 100644 --- a/go/game/cardImplementations_test.go +++ b/go/game/cardImplementations_test.go @@ -63,3 +63,66 @@ symbols: t.Fatal("palisade not destroyed") } } + +func TestPikemanRange(t *testing.T) { + mapDef := `map: |1- + SSS + SSS + SSS +symbols: + S: street +` + s := NewLocalState() + + m, _ := readMap(strings.NewReader(mapDef)) + s.SetMap(m) + + player := s.AddNewPlayer("p", NewDeck()) + opo := s.AddNewPlayer("o", NewDeck()) + + p := s.addNewUnit(NewCard("base/pikeman"), Position{0, 0}, player) + c := s.addNewUnit(NewCard("base/cavalry"), Position{0, 2}, opo) + ca := s.addNewUnit(NewCard("base/cavalry_archer"), Position{1, 2}, opo) + k := s.addNewUnit(NewCard("base/knight"), Position{2, 0}, opo) + + attackable := utils.TypedSliceToInterfaceSlice(p.AttackableEnemyPermanents()) + if !utils.InterfaceSliceContains(attackable, c) { + t.Fatal("cavalry not attackable") + } + if !utils.InterfaceSliceContains(attackable, ca) { + t.Fatal("cavalry archer not attackable") + } + if utils.InterfaceSliceContains(attackable, k) { + t.Fatal("knight is attackable") + } + + a := NewAttackAction(p) + err := a.Target().AddSelection(c) + if err != nil { + t.Fatal("invalid target:", err) + } + + s.ResolveAction(a) + if !c.IsDestroyed() { + t.Fatal("cavalry not destroyed") + } + + a.Target().ClearSelection() + err = a.Target().AddSelection(ca) + if err != nil { + t.Fatal("invalid target:", err) + } + s.ResolveAction(a) + if !c.IsDestroyed() { + t.Fatal("cavalry archer not destroyed") + } + if p.Damage() != 1 { + t.Fatal("pikeman not damaged") + } + + a.Target().ClearSelection() + err = a.Target().AddSelection(k) + if err == nil { + t.Fatal("unexpected valid target") + } +} -- cgit v1.2.3