From 79a4e71968d6ac26f20df8f3e2f788feb608541c Mon Sep 17 00:00:00 2001 From: leriomaggio Date: Tue, 27 Jul 2021 16:15:25 +0100 Subject: [PATCH] New test cases (and extended implementation) accounting for cards from UNKNONW sets to be correctly retrieved. --- .../src/main/java/forge/card/CardDb.java | 20 +++++++++++-------- .../test/java/forge/card/CardDbTestCase.java | 16 +++++++++++++++ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/forge-core/src/main/java/forge/card/CardDb.java b/forge-core/src/main/java/forge/card/CardDb.java index b05b9ee9611..d122c280d26 100644 --- a/forge-core/src/main/java/forge/card/CardDb.java +++ b/forge-core/src/main/java/forge/card/CardDb.java @@ -181,7 +181,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } String collectorNumber = cNrPos > 0 ? info[cNrPos].substring(1, info[cNrPos].length() - 1) : IPaperCard.NO_COLLECTOR_NUMBER; String setName = setPos > 0 ? info[setPos] : null; - if ("???".equals(setName)) { + if (setName != null && setName.equals(CardEdition.UNKNOWN.getCode())) { // ??? setName = null; } // finally, check whether any between artIndex and CollectorNumber has been set @@ -456,10 +456,8 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { if (cards == null) return null; // Either No Edition has been specified OR as a fallback in case of any error! - // get card using the default policy strategy (Latest, Earliest, or Random) - // Note: Request is transformed back into the unique line, - // embedding all the information; Parameter Name is counter intuitive though. - result = getCardFromEditions(request.cardName); + // get card using the default card art preference + result = getCardFromEditions(request.cardName, this.defaultCardArtPreference, request.artIndex); return result != null && request.isFoil ? result.getFoiled() : result; } @@ -647,8 +645,14 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { // Collect the list of all editions found for target card LinkedHashSet cardEditions = new LinkedHashSet<>(); for (PaperCard card : cards) { - CardEdition ed = editions.get(card.getEdition()); - cardEditions.add(ed); + String setCode = card.getEdition(); + if (setCode.equals(CardEdition.UNKNOWN.getCode())) + cardEditions.add(CardEdition.UNKNOWN); + else { + CardEdition ed = editions.get(card.getEdition()); + if (ed != null) + cardEditions.add(ed); + } } // Filter Cards Editions based on set preferences List acceptedEditions = Lists.newArrayList(Iterables.filter(cardEditions, new Predicate() { @@ -906,7 +910,7 @@ public final class CardDb implements ICardDatabase, IDeckGenPool { } public StringBuilder appendCardToStringBuilder(PaperCard card, StringBuilder sb) { - final boolean hasBadSetInfo = "???".equals(card.getEdition()) || StringUtils.isBlank(card.getEdition()); + final boolean hasBadSetInfo = (card.getEdition()).equals(CardEdition.UNKNOWN.getCode()) || StringUtils.isBlank(card.getEdition()); sb.append(card.getName()); if (card.isFoil()) { sb.append(CardDb.foilSuffix); 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 52eadc3b0d0..ef8d56e7c15 100644 --- a/forge-gui-desktop/src/test/java/forge/card/CardDbTestCase.java +++ b/forge-gui-desktop/src/test/java/forge/card/CardDbTestCase.java @@ -1929,5 +1929,21 @@ public class CardDbTestCase extends ForgeCardMockTestCase { assertEquals(this.cardDb.getCardArtPreference(), CardDb.CardArtPreference.LATEST_ART_ALL_EDITIONS); } + @Test + public void testCardFromUnknownSet(){ + String unknownCardName = "Unkwnonw Card Name"; + PaperCard unknownCard = new PaperCard(CardRules.getUnsupportedCardNamed(unknownCardName), + CardEdition.UNKNOWN.getCode(), CardRarity.Unknown); + this.cardDb.addCard(unknownCard); + assertTrue(this.cardDb.getAllCards().contains(unknownCard)); + assertNotNull(this.cardDb.getAllCards(unknownCardName)); + assertEquals(this.cardDb.getAllCards(unknownCardName).size(), 1); + + PaperCard retrievedPaperCard = this.cardDb.getCard(unknownCardName); + assertNotNull(retrievedPaperCard); + assertEquals(retrievedPaperCard.getName(), unknownCardName); + assertEquals(retrievedPaperCard.getEdition(), CardEdition.UNKNOWN.getCode()); + } + }