package game import ( "slices" "testing" ) func TestKingGame(t *testing.T) { s, _, p, o := newMockState() s._map.WinCondition = KingGame k1 := s.addNewUnit(NewCard("misc/king"), Position{0, 0}, p) k2 := s.addNewUnit(NewCard("misc/king"), Position{1, 1}, o) w := s._map.WinCondition.check(s) if len(w) != 0 { t.Fatal("winners declared with two kings") } s.destroyPermanent(k2) w = s._map.WinCondition.check(s) if len(w) != 1 { t.Fatal("winner not declared", w) } if w[0] != p { t.Fatal("p is not the winner", w) } s.destroyPermanent(k1) w = s._map.WinCondition.check(s) if len(w) != 2 { t.Fatal("winners not declared", w) } if !slices.Contains(w, p) || !slices.Contains(w, o) { t.Fatal("p or o is not a winner", w) } } func TestConcession(t *testing.T) { s, _, p, o := newMockState() s.addNewUnit(NewCard("misc/king"), Position{0, 0}, p) s.addNewUnit(NewCard("misc/king"), Position{1, 1}, o) o.concede() s._map.WinCondition = KingGame w := s._map.WinCondition.check(s) if len(w) != 1 { t.Fatal("winner not declared", w) } if w[0] != p { t.Fatal("p is not the winner", w) } s._map.WinCondition = DeathMatch w = s._map.WinCondition.check(s) if len(w) != 1 { t.Fatal("winner not declared", w) } if w[0] != p { t.Fatal("p is not the winner", w) } } func TestKrakenGame(t *testing.T) { s, _, p, o := newMockState() o.Name = KRAKEN_NAME k := s.addNewUnit(NewCard("kraken/the_kraken"), Position{1, 1}, o) s._map.WinCondition = BossGame(KRAKEN_NAME) w := s._map.WinCondition.check(s) if len(w) != 0 { t.Fatal("winner already declared", w) } s.destroyPermanent(k) w = s._map.WinCondition.check(s) if len(w) != 1 { t.Fatal("winner not declared", w) } if w[0] != p { t.Fatal("p is not the winner", w) } } func TestExplicitWinning(t *testing.T) { s, _, p, o := newMockState() s.addNewUnit(NewCard("misc/king"), Position{0, 0}, p) s.addNewUnit(NewCard("misc/king"), Position{1, 1}, o) p.win() s._map.WinCondition = KingGame w := s._map.WinCondition.check(s) if len(w) != 1 { t.Fatal("winner not declared", w) } if w[0] != p { t.Fatal("p is not the winner", w) } s._map.WinCondition = DeathMatch w = s._map.WinCondition.check(s) if len(w) != 1 { t.Fatal("winner not declared", w) } if w[0] != p { t.Fatal("p is not the winner", w) } s, _, p, o = newMockState() o.Name = KRAKEN_NAME s.addNewUnit(NewCard("kraken/the_kraken"), Position{1, 1}, o) p.win() s._map.WinCondition = BossGame(KRAKEN_NAME) w = s._map.WinCondition.check(s) if len(w) != 1 { t.Fatal("winner not declared", w) } if w[0] != p { t.Fatal("p is not the winner", w) } }