package game import ( "strings" "testing" ) func TestCrew(t *testing.T) { mapDef := `map: |+1 HST HSF TSW symbols: T: tower H: house F: farm S: street W: deep water ` s := NewLocalState() m, _ := readMap(strings.NewReader(mapDef)) s.SetMap(m) p := s.AddNewPlayer("player", NewDeck()) f := NewUnit(NewCard("nautics/fisher"), s.Map().TileAt(Position{2, 2}), p) s.addPermanent(f) a := NewUnit(NewCard("base/archer"), s.Map().TileAt(Position{1, 1}), p) s.addPermanent(a) sword := newEquipmentFromPath("base/sword", s.Map().TileAt(Position{0, 1}), p) s.addPermanent(sword) movePermanent(a, f.Tile()) if len(f.Pile()) != 1 { t.Fatalf("fisher's pile size is not 1") } if f.Pile()[0] != a { t.Fatalf("fisher's pile does not contain the archer") } if a.Tile() != nil { t.Fatalf("piled archer has still a tile %v", a.Tile()) } for r, d := range f.Attack.attacks { if d != a.Attack.attacks[r] { t.Fatalf("fisher's attack %d is not equal to the archer's attack %d at range %d", d, a.Attack.attacks[r], r) } } if !f.Attack.Valid() { t.Fatalf("fisher has an invalid attack") } if a.Attackable() { t.Fatalf("Piled archer is attackable") } if len(a.AttackableTiles()) != 0 { t.Fatalf("Piled archer has attackable tiles") } movePermanent(a, s.Map().TileAt(Position{1, 1})) if len(f.Pile()) != 0 { t.Fatalf("fisher's pile is not empty") } if f.Attack.Valid() { t.Fatalf("fisher has still a valid attack") } addPermanentToPile(a, sword) if a.Attack.attacks[0] != 2 { t.Fatalf("archer's melee attack is not 2") } } func TestAttackablePerms(t *testing.T) { mapDef := `map: |+1 HST HSF TSW symbols: T: tower H: house F: farm S: street W: deep water ` s, _, p, o := newMockState() m, _ := readMap(strings.NewReader(mapDef)) s.SetMap(m) a := s.addNewUnit(NewCard("base/archer"), Position{2, 0}, p) for x := range 3 { for y := range 3 { pos := Position{x, y} if x == 2 && y == 0 { continue } else if x == 2 && y == 2 { s.addNewUnit(NewCard("nautics/fisher"), pos, o) } else { s.addNewUnit(NewCard("misc/farmer"), pos, o) } } } aTiles := a.AttackableTiles() is := len(aTiles) if is != 6 { t.Fatal("6 attackable tiles expected not:", is) } aPerms := a.AttackableEnemyPermanents() is = len(aPerms) if is != 6 { t.Fatal("6 attackable permanents expected not:", is) } } func TestKnightArmor(t *testing.T) { a := NewUnit(NewCard("base/archer"), NewMockTile(), NewMockPlayer()) k := NewUnit(NewCard("base/knight"), NewMockTile(), NewMockPlayer()) DealDamage(a, k, a.Attack.DamageInRange(2)) if k.Damage() != 0 { t.Fatal("knight received damage from attack 1") } }