Move tests to the Mage directory and stub out looking up cards by names for tests.

This commit is contained in:
John Hitchings 2019-01-10 09:51:53 -08:00
parent 58e629dca6
commit 5bf748e2b5
12 changed files with 232 additions and 75 deletions

View file

@ -0,0 +1,40 @@
package mage.cards.decks.importer;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import mage.cards.decks.DeckCardLists;
public class CodDeckImportTest {
private static final FakeCardLookup LOOKUP = new FakeCardLookup()
.addCard("Forest")
.addCard("Razorverge Thicket")
.addCard("Avacyn's Pilgrim")
.addCard("War Priest of Thune");
@Test
public void testImportCod() {
CodDeckImporter importer = new CodDeckImporter() {
@Override
public CardLookup getCardLookup() {
return LOOKUP;
}
};
StringBuilder errors = new StringBuilder();
DeckCardLists deck = importer.importDeck(
"src/test/java/mage/cards/decks/importer/testdeck.cod", errors);
assertEquals("Deck Name", deck.getName());
TestDeckChecker.checker()
.addMain("Forest", 12)
.addMain("Razorverge Thicket", 100)
.addMain("Avacyn's Pilgrim", 1)
.addSide("War Priest of Thune", 3)
.verify(deck, 113, 3);
assertEquals("Could not find card: '@#$NOT A REAL CARD NAME@#$'\n", errors.toString());
}
}

View file

@ -0,0 +1,73 @@
package mage.cards.decks.importer;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import mage.cards.decks.DeckCardLists;
public class DecDeckImportTest {
private static final FakeCardLookup LOOKUP = new FakeCardLookup()
.addCard("Masticore")
.addCard("Metalworker")
.addCard("Phyrexian Colossus")
.addCard("Crumbling Sanctuary")
.addCard("Grim Monolith")
.addCard("Mishra's Helix")
.addCard("Phyrexian Processor")
.addCard("Tangle Wire")
.addCard("Thran Dynamo")
.addCard("Voltaic Key")
.addCard("Tinker")
.addCard("Brainstorm")
.addCard("Crystal Vein")
.addCard("Island")
.addCard("Rishadan Port")
.addCard("Saprazzan Skerry")
.addCard("Annul")
.addCard("Chill")
.addCard("Miscalculation")
.addCard("Mishra's Helix")
.addCard("Rising Waters");
@Test
public void testImport() {
StringBuilder errors = new StringBuilder();
DecDeckImporter importer = new DecDeckImporter() {
@Override
public CardLookup getCardLookup() {
return LOOKUP;
}
};
DeckCardLists deck = importer.importDeck(
"src/test/java/mage/cards/decks/importer/testdeck.dec", errors);
TestDeckChecker.checker()
.addMain("Masticore", 4)
.addMain("Metalworker", 4)
.addMain("Phyrexian Colossus", 1)
.addMain("Crumbling Sanctuary", 1)
.addMain("Grim Monolith", 4)
.addMain("Mishra's Helix", 1)
.addMain("Phyrexian Processor", 4)
.addMain("Tangle Wire", 4)
.addMain("Thran Dynamo", 4)
.addMain("Voltaic Key", 4)
.addMain("Tinker", 4)
.addMain("Brainstorm", 4)
.addMain("Crystal Vein", 4)
.addMain("Island", 9)
.addMain("Rishadan Port", 4)
.addMain("Saprazzan Skerry", 4)
.addSide("Annul", 4)
.addSide("Chill", 4)
.addSide("Miscalculation", 4)
.addSide("Mishra's Helix", 1)
.addSide("Rising Waters", 2)
.verify(deck, 60, 15);
assertEquals("", errors.toString());
}
}

View file

@ -0,0 +1,29 @@
package mage.cards.decks.importer;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import mage.cards.repository.CardInfo;
public class FakeCardLookup extends CardLookup {
private final Map<String, CardInfo> lookup = new HashMap<>();
public FakeCardLookup addCard(String cardName) {
lookup.put(cardName, new CardInfo() {{
name = cardName;
}});
return this;
}
@Override
public Optional<CardInfo> lookupCardInfo(String name) {
CardInfo card = lookup.get(name);
if (card == null) {
System.out.println("Couldn't find: " + name);
}
return Optional.ofNullable(card);
}
}

View file

@ -0,0 +1,52 @@
package mage.cards.decks.importer;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import mage.cards.decks.DeckCardLists;
public class TestDeckChecker {
private final List<String> main = new ArrayList<>();
private final List<String> side = new ArrayList<>();
public TestDeckChecker addMain(String name) {
return addMain(name, 1);
}
public TestDeckChecker addMain(String name, int quantity) {
main.addAll(Collections.nCopies(quantity, name));
return this;
}
public TestDeckChecker addSide(String name) {
return addSide(name, 1);
}
public TestDeckChecker addSide(String name, int quantity) {
side.addAll(Collections.nCopies(quantity, name));
return this;
}
public void verify(DeckCardLists deck, int nMain, int nSide) {
assertEquals(nMain, main.size());
assertEquals(nSide, side.size());
assertEquals(nMain, deck.getCards().size());
assertEquals(nSide, deck.getSideboard().size());
for (int i = 0; i < main.size(); i++) {
String expected = main.get(i);
String actual = deck.getCards().get(i).getCardName();
assertEquals(String.format("Expected: '%s' Actual: '%s' at index: %s",
expected, actual, i), expected, actual);
}
}
public static TestDeckChecker checker() {
return new TestDeckChecker();
}
}

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<cockatrice_deck version="1">
<deckname>Deck Name </deckname>
<comments>Some comments in here.</comments>
<zone name="main">
<card number="12" name="Forest"/>
<card number="101" price="0" name="Razorverge Thicket"/>
<card price="0" name="Avacyn's Pilgrim"/>
<card number="1" price="0" name="@#$NOT A REAL CARD NAME@#$"/>
</zone>
<zone name="side">
<card number="3" price="0" name="War Priest of Thune"/>
</zone>
</cockatrice_deck>

View file

@ -0,0 +1,28 @@
// Name: Mono-Blue Tinker from MTGSalvation.com via mtgtrice mtg-decks
// Creatures
4 Masticore
4 Metalworker
1 Phyrexian Colossus
// Artifacts
1 Crumbling Sanctuary
4 Grim Monolith
1 Mishra's Helix
4 Phyrexian Processor
4 Tangle Wire
4 Thran Dynamo
4 Voltaic Key
// Sorceries
4 Tinker
// Instants
4 Brainstorm
// Lands
4 Crystal Vein
9 Island
4 Rishadan Port
4 Saprazzan Skerry
// Sideboard
SB: 4 Annul
SB: 4 Chill
SB: 4 Miscalculation
SB: 1 Mishra's Helix
SB: 2 Rising Waters