Updated Card Tokens (with test) to retain cards even if not legal.

This will be now used in DeckImporter in combination with Card Preview.

Signed-off-by: leriomaggio <valeriomaggio@gmail.com>
This commit is contained in:
leriomaggio
2021-09-12 10:56:32 +01:00
parent 764ccd703c
commit 95f1d6df07
2 changed files with 33 additions and 33 deletions

View File

@@ -69,16 +69,14 @@ public class DeckRecognizer {
return new Token(theCard, TokenType.LEGAL_CARD_REQUEST, count, null); return new Token(theCard, TokenType.LEGAL_CARD_REQUEST, count, null);
} }
public static Token IllegalCard(final String cardName, final String setCode, final int count) { public static Token IllegalCard(final PaperCard theCard, final int count) {
String ttext = setCode == null || setCode.equals("") ? cardName : String ttext = String.format("%s (%s)", theCard.getName(), theCard.getEdition());
String.format("%s (%s)", cardName, setCode); return new Token(theCard, TokenType.ILLEGAL_CARD_REQUEST, count, ttext);
return new Token(null, TokenType.ILLEGAL_CARD_REQUEST, count, ttext);
} }
public static Token InvalidCard(final String cardName, final String setCode, final int count) { public static Token InvalidCard(final PaperCard theCard, final int count) {
String ttext = setCode == null || setCode.equals("") ? cardName : String ttext = String.format("%s (%s)", theCard.getName(), theCard.getEdition());
String.format("%s (%s)", cardName, setCode); return new Token(theCard, TokenType.INVALID_CARD_REQUEST, count, ttext);
return new Token(null, TokenType.INVALID_CARD_REQUEST, count, ttext);
} }
public static Token UnknownCard(final String cardName, final String setCode, final int count) { public static Token UnknownCard(final String cardName, final String setCode, final int count) {
@@ -105,8 +103,8 @@ public class DeckRecognizer {
return null; return null;
} }
private Token(final PaperCard knownCard, final TokenType type1, final int count, final String message) { private Token(final PaperCard tokenCard, final TokenType type1, final int count, final String message) {
this.card = knownCard; this.card = tokenCard;
this.number = count; this.number = count;
this.type = type1; this.type = type1;
this.text = message; this.text = message;
@@ -333,8 +331,6 @@ public class DeckRecognizer {
uknonwnCardToken = Token.UnknownCard(cardName, setCode, cardCount); uknonwnCardToken = Token.UnknownCard(cardName, setCode, cardCount);
continue; continue;
} }
if (isNotCompliantWithReleaseDateRestrictions(edition))
return Token.InvalidCard(cr.cardName, edition.getCode(), cardCount);
// we now name is ok, set is ok - we just need to be sure about collector number (if any) // we now name is ok, set is ok - we just need to be sure about collector number (if any)
// and if that card can be actually found in the requested set. // and if that card can be actually found in the requested set.
@@ -344,7 +340,11 @@ public class DeckRecognizer {
// ok so the card has been found - let's see if there's any restriction on the set // ok so the card has been found - let's see if there's any restriction on the set
if (isIllegalSetInGameFormat(edition.getCode()) || isIllegalCardInDeckFormat(pc)) if (isIllegalSetInGameFormat(edition.getCode()) || isIllegalCardInDeckFormat(pc))
// Mark as illegal card // Mark as illegal card
return Token.IllegalCard(pc.getName(), pc.getEdition(), cardCount); return Token.IllegalCard(pc, cardCount);
if (isNotCompliantWithReleaseDateRestrictions(edition))
return Token.InvalidCard(pc, cardCount);
return Token.KnownCard(pc, cardCount); return Token.KnownCard(pc, cardCount);
} }
// UNKNOWN card as in the Counterspell|FEM case // UNKNOWN card as in the Counterspell|FEM case
@@ -363,10 +363,10 @@ public class DeckRecognizer {
if (pc != null) { if (pc != null) {
if (isIllegalSetInGameFormat(pc.getEdition()) || isIllegalCardInDeckFormat(pc)) if (isIllegalSetInGameFormat(pc.getEdition()) || isIllegalCardInDeckFormat(pc))
return Token.IllegalCard(pc.getName(), pc.getEdition(), cardCount); return Token.IllegalCard(pc, cardCount);
CardEdition edition = StaticData.instance().getCardEdition(pc.getEdition()); CardEdition edition = StaticData.instance().getCardEdition(pc.getEdition());
if (isNotCompliantWithReleaseDateRestrictions(edition)) if (isNotCompliantWithReleaseDateRestrictions(edition))
return Token.InvalidCard(pc.getName(), pc.getEdition(), cardCount); return Token.InvalidCard(pc, cardCount);
return Token.KnownCard(pc, cardCount); return Token.KnownCard(pc, cardCount);
} }
} }

View File

@@ -1230,13 +1230,13 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
Token cardToken = recognizer.recogniseCardToken(lineRequest); Token cardToken = recognizer.recogniseCardToken(lineRequest);
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
lineRequest = "2x Counterspell"; // It does not exist any Counterspell in Urza's block lineRequest = "2x Counterspell"; // It does not exist any Counterspell in Urza's block
cardToken = recognizer.recogniseCardToken(lineRequest); cardToken = recognizer.recogniseCardToken(lineRequest);
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
} }
@Test void testRequestingCardWithRestrictionsOnDeckFormat(){ @Test void testRequestingCardWithRestrictionsOnDeckFormat(){
@@ -1260,7 +1260,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
cardToken = recognizer.recogniseCardToken(lineRequest); cardToken = recognizer.recogniseCardToken(lineRequest);
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
} }
@Test void testRequestingCardWithReleaseDateConstraints(){ @Test void testRequestingCardWithReleaseDateConstraints(){
@@ -1318,7 +1318,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
cardToken = recognizer.recogniseCardToken(lineRequest); cardToken = recognizer.recogniseCardToken(lineRequest);
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.INVALID_CARD_REQUEST); assertEquals(cardToken.getType(), TokenType.INVALID_CARD_REQUEST);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
} }
@Test void testCardMatchWithDateANDGameFormatConstraints(){ @Test void testCardMatchWithDateANDGameFormatConstraints(){
@@ -1372,14 +1372,14 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.INVALID_CARD_REQUEST); assertEquals(cardToken.getType(), TokenType.INVALID_CARD_REQUEST);
assertEquals(cardToken.getNumber(), 2); assertEquals(cardToken.getNumber(), 2);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
lineRequest = "2x Lightning Dragon"; lineRequest = "2x Lightning Dragon";
cardToken = recognizer.recogniseCardToken(lineRequest); cardToken = recognizer.recogniseCardToken(lineRequest);
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.INVALID_CARD_REQUEST); assertEquals(cardToken.getType(), TokenType.INVALID_CARD_REQUEST);
assertEquals(cardToken.getNumber(), 2); assertEquals(cardToken.getNumber(), 2);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
assertEquals(cardToken.getText(), "Lightning Dragon (USG)"); assertEquals(cardToken.getText(), "Lightning Dragon (USG)");
// Now relaxing date constraint but removing USG from allowed sets // Now relaxing date constraint but removing USG from allowed sets
@@ -1392,14 +1392,14 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST);
assertEquals(cardToken.getNumber(), 2); assertEquals(cardToken.getNumber(), 2);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
lineRequest = "2x Lightning Dragon"; lineRequest = "2x Lightning Dragon";
cardToken = recognizer.recogniseCardToken(lineRequest); cardToken = recognizer.recogniseCardToken(lineRequest);
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST);
assertEquals(cardToken.getNumber(), 2); assertEquals(cardToken.getNumber(), 2);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
// Now relaxing date constraint but removing USG from allowed sets // Now relaxing date constraint but removing USG from allowed sets
// VMA release date: 2014-06-16 // VMA release date: 2014-06-16
@@ -1442,7 +1442,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
cardToken = recognizer.recogniseCardToken(lineRequest); cardToken = recognizer.recogniseCardToken(lineRequest);
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
assertEquals(cardToken.getText(), "Flash (6ED)"); assertEquals(cardToken.getText(), "Flash (6ED)");
lineRequest = "2x Cancel"; lineRequest = "2x Cancel";
@@ -1460,7 +1460,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.INVALID_CARD_REQUEST); assertEquals(cardToken.getType(), TokenType.INVALID_CARD_REQUEST);
assertEquals(cardToken.getNumber(), 2); assertEquals(cardToken.getNumber(), 2);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
assertEquals(cardToken.getText(), "Cancel (M21)"); assertEquals(cardToken.getText(), "Cancel (M21)");
} }
@@ -1489,7 +1489,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
cardToken = recognizer.recogniseCardToken(lineRequest); cardToken = recognizer.recogniseCardToken(lineRequest);
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
assertEquals(cardToken.getText(), "Flash (MIR)"); assertEquals(cardToken.getText(), "Flash (MIR)");
lineRequest = "2x Femeref Knight"; lineRequest = "2x Femeref Knight";
@@ -1517,7 +1517,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); // violating Deck format assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); // violating Deck format
assertEquals(cardToken.getNumber(), 1); assertEquals(cardToken.getNumber(), 1);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
assertEquals(cardToken.getText(), "Noble Elephant (MIR)"); assertEquals(cardToken.getText(), "Noble Elephant (MIR)");
lineRequest = "Incinerate|ICE"; lineRequest = "Incinerate|ICE";
@@ -1525,7 +1525,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); // violating Game format assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); // violating Game format
assertEquals(cardToken.getNumber(), 1); assertEquals(cardToken.getNumber(), 1);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
assertEquals(cardToken.getText(), "Incinerate (ICE)"); assertEquals(cardToken.getText(), "Incinerate (ICE)");
} }
@@ -1555,21 +1555,21 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
cardToken = recognizer.recogniseCardToken(lineRequest); cardToken = recognizer.recogniseCardToken(lineRequest);
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
assertEquals(cardToken.getText(), "Flash (MIR)"); assertEquals(cardToken.getText(), "Flash (MIR)");
lineRequest = "Ardent Militia"; lineRequest = "Ardent Militia";
cardToken = recognizer.recogniseCardToken(lineRequest); cardToken = recognizer.recogniseCardToken(lineRequest);
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); // illegal in deck format assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); // illegal in deck format
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
assertEquals(cardToken.getText(), "Ardent Militia (WTH)"); // within set constraints assertEquals(cardToken.getText(), "Ardent Militia (WTH)"); // within set constraints
lineRequest = "Buried Alive|UMA"; lineRequest = "Buried Alive|UMA";
cardToken = recognizer.recogniseCardToken(lineRequest); cardToken = recognizer.recogniseCardToken(lineRequest);
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.INVALID_CARD_REQUEST); // illegal in game format assertEquals(cardToken.getType(), TokenType.ILLEGAL_CARD_REQUEST); // illegal in game format
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
assertEquals(cardToken.getText(), "Buried Alive (UMA)"); // within set constraints assertEquals(cardToken.getText(), "Buried Alive (UMA)"); // within set constraints
lineRequest = "Buried Alive"; lineRequest = "Buried Alive";
@@ -1585,7 +1585,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
cardToken = recognizer.recogniseCardToken(lineRequest); cardToken = recognizer.recogniseCardToken(lineRequest);
assertNotNull(cardToken); assertNotNull(cardToken);
assertEquals(cardToken.getType(), TokenType.INVALID_CARD_REQUEST); assertEquals(cardToken.getType(), TokenType.INVALID_CARD_REQUEST);
assertNull(cardToken.getCard()); assertNotNull(cardToken.getCard());
assertEquals(cardToken.getText(), "Buried Alive (WTH)"); assertEquals(cardToken.getText(), "Buried Alive (WTH)");
} }