aboutsummaryrefslogtreecommitdiff
path: root/go/game/cardImplementations_test.go
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2025-08-02 14:47:01 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2025-08-20 15:57:33 +0200
commitc696829f9e37e9f3752fdb89ebaadd4b3b237bea (patch)
treea205a17da9618e04f61e44d49cb028ede23dd732 /go/game/cardImplementations_test.go
parentca083639a4b52215b39bb863031f71c0a8209ee9 (diff)
downloadmuhqs-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.go63
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")
+ }
+}