From bccf6e0a27a05bc07ea3880f70e85d4f2306b83a Mon Sep 17 00:00:00 2001 From: leriomaggio Date: Wed, 25 Aug 2021 19:39:54 +0100 Subject: [PATCH] new method with tests to get all cards with a filter predicate. New method in Interface API to get all cards in a given setCode. This has changed the implementation of getArtCount avoiding to iterate over all the possible card prints. --- .../src/main/java/forge/card/CardDb.java | 26 +++++++----- .../main/java/forge/card/ICardDatabase.java | 1 + .../test/java/forge/card/CardDbTestCase.java | 42 +++++++++++++++++++ 3 files changed, 58 insertions(+), 11 deletions(-) diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java index ee51b916bbd..6338021bbaa 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -29,6 +29,7 @@ import forge.util.Lang; import forge.util.TextUtil; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; +import org.checkerframework.checker.nullness.compatqual.NullableDecl; import java.util.*; import java.util.Map.Entry; @@ -721,18 +722,16 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } @Override - public int getArtCount(String cardName, String setName) { - if (cardName == null || setName == null) + public int getArtCount(String cardName, String setCode) { + if (cardName == null || setCode == null) return 0; - Collection cards = getAllCards(cardName); - if (null == cards || cards.size() == 0) - return 0; - int artCount = 0; - for (PaperCard pc : cards) { - if (pc.getEdition().equalsIgnoreCase(setName)) - artCount++; - } - return artCount; + Collection cardsInSet = getAllCards(cardName, new Predicate() { + @Override + public boolean apply(PaperCard card) { + return card.getEdition().equalsIgnoreCase(setCode); + } + }); + return cardsInSet.size(); } // returns a list of all cards from their respective latest (or preferred) editions @@ -839,6 +838,11 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { return Lists.newArrayList(Iterables.filter(getAllCards(), predicate)); } + @Override + public List getAllCards(final String cardName, Predicate predicate){ + return Lists.newArrayList(Iterables.filter(getAllCards(cardName), predicate)); + } + /** * Returns a modifiable list of cards matching the given predicate */ diff --git a/forge-core/src/main/java/forge/card/ICardDatabase.java b/forge-core/src/main/java/forge/card/ICardDatabase.java index 64646109a46..b158404d320 100644 --- a/forge-core/src/main/java/forge/card/ICardDatabase.java +++ b/forge-core/src/main/java/forge/card/ICardDatabase.java @@ -79,6 +79,7 @@ public interface ICardDatabase extends Iterable { Collection getAllCards(); Collection getAllCards(String cardName); Collection getAllCards(Predicate predicate); + Collection getAllCards(String cardName,Predicate predicate); Collection getAllCards(CardEdition edition); Collection getUniqueCards(); diff --git a/forge-gui-desktop/src/test/java/forge/card/CardDbTestCase.java b/forge-gui-desktop/src/test/java/forge/card/CardDbTestCase.java index 8a30919020a..3853918951c 100644 --- a/forge-gui-desktop/src/test/java/forge/card/CardDbTestCase.java +++ b/forge-gui-desktop/src/test/java/forge/card/CardDbTestCase.java @@ -1,5 +1,6 @@ package forge.card; +import com.google.common.base.Predicate; import forge.StaticData; import forge.item.IPaperCard; import forge.item.PaperCard; @@ -10,7 +11,10 @@ import org.testng.annotations.Test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; +import java.util.List; import static org.testng.Assert.*; @@ -101,6 +105,44 @@ public class CardDbTestCase extends ForgeCardMockTestCase { this.legacyCardDb = new LegacyCardDb(data.getCommonCards().getAllCards(), data.getEditions()); } + /* + * TEST FOR GET ALL CARDS + */ + + @Test + public void testGetAllCardsWithName(){ + List allCounterSpellPrints = this.cardDb.getAllCards(this.cardNameCounterspell); + assertNotNull(allCounterSpellPrints); + for (PaperCard card : allCounterSpellPrints) + assertEquals(card.getName(), this.cardNameCounterspell); + } + + @Test + public void testGetAllCardsThatWerePrintedInSets(){ + List allowedSets = new ArrayList<>(); + allowedSets.add(this.latestArtShivanDragonEdition); + Predicate wasPrinted = (Predicate) this.cardDb.wasPrintedInSets(allowedSets); + List allCardsInSet = this.cardDb.getAllCards(wasPrinted); + assertNotNull(allCardsInSet); + } + + @Test void testGetAllCardsOfaGivenNameAndLegalInSets(){ + List allowedSets = new ArrayList<>(Arrays.asList(this.editionsCounterspell)); + Predicate printedInSets = (Predicate) this.cardDb.wasPrintedInSets(allowedSets); + List allCounterSpellsInSets = this.cardDb.getAllCards(this.cardNameCounterspell, printedInSets); + assertNotNull(allCounterSpellsInSets); + assertTrue(allCounterSpellsInSets.size() > 0); + assertTrue(allCounterSpellsInSets.size() > 1); + for (PaperCard card : allCounterSpellsInSets) { + assertEquals(card.getName(), this.cardNameCounterspell); + } + } + + + /* + * TEST FOR CARD RETRIEVAL METHODS + */ + @Test public void testGetCardByName() { PaperCard legacyCard = this.legacyCardDb.getCard(cardNameShivanDragon);