diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2025-08-02 14:47:01 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-08-20 15:57:33 +0200 |
| commit | c696829f9e37e9f3752fdb89ebaadd4b3b237bea (patch) | |
| tree | a205a17da9618e04f61e44d49cb028ede23dd732 /go/game/cardImplementations_test.go | |
| parent | ca083639a4b52215b39bb863031f71c0a8209ee9 (diff) | |
| download | muhqs-game-c696829f9e37e9f3752fdb89ebaadd4b3b237bea.tar.gz muhqs-game-c696829f9e37e9f3752fdb89ebaadd4b3b237bea.zip | |
add support for flexible attacks
Diffstat (limited to 'go/game/cardImplementations_test.go')
| -rw-r--r-- | go/game/cardImplementations_test.go | 63 |
1 files changed, 63 insertions, 0 deletions
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") + } +} |
