From deee4b76b6ab1a94e5578818aba4b94e22e6ac89 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Wed, 6 Aug 2025 09:33:50 +0200 Subject: fix parsing of solid artifacts --- go/game/artifact.go | 17 ++--------------- go/game/artifact_test.go | 21 +++++++++++++++++++++ go/game/card_test.go | 13 +++++++++++-- 3 files changed, 34 insertions(+), 17 deletions(-) create mode 100644 go/game/artifact_test.go diff --git a/go/game/artifact.go b/go/game/artifact.go index 8c9b74e0..35c05893 100644 --- a/go/game/artifact.go +++ b/go/game/artifact.go @@ -1,10 +1,5 @@ package game -import ( - "log" - "strconv" - "strings" -) type Artifact struct { permanentBase @@ -27,16 +22,8 @@ func NewArtifact(card *Card, tile *Tile, owner *Player) *Artifact { }, } - effects := card.getEffects() - for _, e := range effects { - if strings.HasPrefix(e, "Solid") { - tokens := strings.Split(e, " ") - var err error - a.Solid, err = strconv.Atoi(tokens[1]) - if err != nil { - log.Panicf("Invalid Solid definition %s\n", e) - } - } + if s, err := card.getXEffect("solid"); err == nil { + a.Solid = s.x } return a diff --git a/go/game/artifact_test.go b/go/game/artifact_test.go new file mode 100644 index 00000000..84c15652 --- /dev/null +++ b/go/game/artifact_test.go @@ -0,0 +1,21 @@ +package game + +import ( + "testing" +) + +func TestSolid(t *testing.T) { + p := NewArtifactFromPath("base/palisade", NewMockTile(), NewMockPlayer()) + if !p.Attackable() { + t.Fatal("palisade not attackable") + } + + if p.IsDestroyed() { + t.Fatal("palisade already destroyed") + } + + p.adjustDamage(6) + if !p.IsDestroyed() { + t.Fatal("palisade not destroyed") + } +} diff --git a/go/game/card_test.go b/go/game/card_test.go index 3e9c8f6f..7e2fefa9 100644 --- a/go/game/card_test.go +++ b/go/game/card_test.go @@ -26,12 +26,13 @@ func TestCardReporters(t *testing.T) { recruit := NewCard("base/recruit") ritual := NewCard("magic/ritual!") sword := NewCard("base/sword") + palisade := NewCard("base/palisade") - if !archer.IsBuyable() || !ritual.IsBuyable() || recruit.IsBuyable() || !sword.IsBuyable() { + if !archer.IsBuyable() || !ritual.IsBuyable() || !recruit.IsBuyable() || !sword.IsBuyable() || !palisade.IsBuyable() { t.Fatal("unexpected buyability result") } - if !archer.IsPermanent() || ritual.IsPermanent() || !recruit.IsPermanent() || !sword.IsPermanent() { + if !archer.IsPermanent() || ritual.IsPermanent() || !recruit.IsPermanent() || !sword.IsPermanent() || !palisade.IsPermanent() { t.Fatal("unexpected permanent result") } @@ -50,4 +51,12 @@ func TestCardReporters(t *testing.T) { if archer.hasPlacementConstrain("swimmming") { t.Fatal("archer is not swimming") } + + x, err := palisade.getXEffect("solid") + if err != nil { + t.Fatal("xEffect error returned") + } + if x.x != 6 || !x.set { + t.Fatal("invalid palisade solid effect") + } } -- cgit v1.2.3