mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 12:48:00 +00:00
Recognise new Dungeon DeckSection Placeholder, and improved support to .dec files
.Dec files have collector nr//art-index as separated by a Pipe. RegExps with collector numbers have been extended to further support decks in this format (with simply copy & paste the listing). Tests updated/added to verify the new regexp & behaviour.
This commit is contained in:
@@ -410,12 +410,12 @@ public class DeckRecognizer {
|
||||
public static final Pattern SET_CARD_PATTERN = Pattern.compile(REX_SET_CARD_REQUEST);
|
||||
// 3. Full-Request (Amount?, CardName, Set, Collector Number|Art Index) - MTGArena Format
|
||||
public static final String REX_FULL_REQUEST_CARD_SET = String.format(
|
||||
"(%s\\s*:\\s*)?(%s\\s)?\\s*%s\\s*(\\||\\(|\\[|\\{|\\s)%s(\\s|\\)|\\]|\\})?\\s+%s\\s*%s\\s*",
|
||||
"(%s\\s*:\\s*)?(%s\\s)?\\s*%s\\s*(\\||\\(|\\[|\\{|\\s)%s(\\s|\\)|\\]|\\})?(\\s+|\\|\\s*)%s\\s*%s\\s*",
|
||||
REX_DECKSEC_XMAGE, REX_CARD_COUNT, REX_CARD_NAME, REX_SET_CODE, REX_COLL_NUMBER, REX_FOIL_MTGGOLDFISH);
|
||||
public static final Pattern CARD_SET_COLLNO_PATTERN = Pattern.compile(REX_FULL_REQUEST_CARD_SET);
|
||||
// 4. Full-Request (Amount?, Set, CardName, Collector Number|Art Index) - Alternative for flexibility
|
||||
public static final String REX_FULL_REQUEST_SET_CARD = String.format(
|
||||
"^(%s\\s*:\\s*)?(%s\\s)?\\s*(\\(|\\[|\\{)?%s(\\s+|\\)|\\]|\\}|\\|)\\s*%s\\s+%s\\s*%s$",
|
||||
"^(%s\\s*:\\s*)?(%s\\s)?\\s*(\\(|\\[|\\{)?%s(\\s+|\\)|\\]|\\}|\\|)\\s*%s(\\s+|\\|\\s*)%s\\s*%s$",
|
||||
REX_DECKSEC_XMAGE, REX_CARD_COUNT, REX_SET_CODE, REX_CARD_NAME, REX_COLL_NUMBER, REX_FOIL_MTGGOLDFISH);
|
||||
public static final Pattern SET_CARD_COLLNO_PATTERN = Pattern.compile(REX_FULL_REQUEST_SET_CARD);
|
||||
// 5. (MTGGoldfish mostly) (Amount?, Card Name, <Collector Number>, Set)
|
||||
@@ -439,7 +439,7 @@ public class DeckRecognizer {
|
||||
"side", "sideboard", "sb",
|
||||
"main", "card", "mainboard",
|
||||
"avatar", "commander", "schemes",
|
||||
"conspiracy", "planes", "deck", };
|
||||
"conspiracy", "planes", "deck", "dungeon"};
|
||||
|
||||
private static CharSequence[] allCardTypes(){
|
||||
List<String> cardTypesList = new ArrayList<>();
|
||||
|
||||
@@ -225,8 +225,8 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
|
||||
}
|
||||
|
||||
@Test void testMatchDeckSectionNames(){
|
||||
String[] dckSections = new String[] {"Main", "main", "Mainboard",
|
||||
"Sideboard", "Side", "Schemes", "Avatar", "avatar", "Commander", "Conspiracy", "card", "Planes"};
|
||||
String[] dckSections = new String[] {"Main", "main", "Mainboard", "Sideboard", "Side", "Schemes", "Avatar",
|
||||
"avatar", "Commander", "Conspiracy", "card", "Planes", "Dungeon"};
|
||||
for (String section : dckSections)
|
||||
assertTrue(DeckRecognizer.isDeckSectionName(section), "Unrecognised Deck Section: " + section);
|
||||
|
||||
@@ -240,7 +240,7 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
|
||||
for (String entry: deckSectionEntriesFoundInMDExportFromTappedOut)
|
||||
assertTrue(DeckRecognizer.isDeckSectionName(entry), "Fail on "+entry);
|
||||
|
||||
String[] deckSectionEntriesFoundInDCKFormat = new String[] {"[Main]", "[Sideboard]"};
|
||||
String[] deckSectionEntriesFoundInDCKFormat = new String[] {"[Main]", "[Sideboard]", "[Dungeon]"};
|
||||
for (String entry: deckSectionEntriesFoundInDCKFormat)
|
||||
assertTrue(DeckRecognizer.isDeckSectionName(entry), "Fail on "+entry);
|
||||
}
|
||||
@@ -906,6 +906,22 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_CARD), "Power Sink "); // TRIM
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_SET), "TMP");
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_COLLNR), "78");
|
||||
|
||||
validRequest = "Power Sink (TMP)|78"; // Pipe to separate collector number (as in .Dec files)
|
||||
matcher = DeckRecognizer.CARD_SET_COLLNO_PATTERN.matcher(validRequest);
|
||||
assertTrue(matcher.matches());
|
||||
assertNull(matcher.group(DeckRecognizer.REGRP_CARDNO));
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_CARD), "Power Sink "); // TRIM
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_SET), "TMP");
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_COLLNR), "78");
|
||||
|
||||
validRequest = "Power Sink|TMP|78"; // .Dec file export entry format
|
||||
matcher = DeckRecognizer.CARD_SET_COLLNO_PATTERN.matcher(validRequest);
|
||||
assertTrue(matcher.matches());
|
||||
assertNull(matcher.group(DeckRecognizer.REGRP_CARDNO));
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_CARD), "Power Sink"); // TRIM
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_SET), "TMP");
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_COLLNR), "78");
|
||||
}
|
||||
|
||||
@Test void testInvalidMatchFullCardSetRequest(){
|
||||
@@ -997,6 +1013,14 @@ public class DeckRecognizerTest extends ForgeCardMockTestCase {
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_CARD), "Power Sink");
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_SET), "TMP");
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_COLLNR), "78");
|
||||
|
||||
validRequest = "(TMP} Power Sink|78"; // Pipe to separate collector number as in .Dec format
|
||||
matcher = DeckRecognizer.SET_CARD_COLLNO_PATTERN.matcher(validRequest);
|
||||
assertTrue(matcher.matches());
|
||||
assertNull(matcher.group(DeckRecognizer.REGRP_CARDNO));
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_CARD), "Power Sink");
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_SET), "TMP");
|
||||
assertEquals(matcher.group(DeckRecognizer.REGRP_COLLNR), "78");
|
||||
}
|
||||
|
||||
@Test void testInvalidMatchFullSetCardRequest(){
|
||||
|
||||
Reference in New Issue
Block a user