diff --git a/Mage.Common/src/main/java/mage/utils/SystemUtil.java b/Mage.Common/src/main/java/mage/utils/SystemUtil.java index b253196888f..5b63ac57816 100644 --- a/Mage.Common/src/main/java/mage/utils/SystemUtil.java +++ b/Mage.Common/src/main/java/mage/utils/SystemUtil.java @@ -90,9 +90,10 @@ public final class SystemUtil { private static final Pattern patternGroup = Pattern.compile("\\[(.+)\\]"); // [test new card] private static final Pattern patternCommand = Pattern.compile("([\\w]+):([\\S ]+?):([\\S ]+):([\\d]+)"); // battlefield:Human:Island:10 - private static final Pattern patternCardInfo = Pattern.compile("(^[\\dA-Z]{2,7})@([\\S ]+)" // XLN-Island - .replace("7", String.valueOf(CardUtil.TESTS_SET_CODE_LOOKUP_LENGTH)) - .replace("@", CardUtil.TESTS_SET_CODE_DELIMETER) + private static final Pattern patternCardInfo = Pattern.compile("(^[\\dA-Z]{MIN,MAX})DELIMETER([\\S ]+)" // XLN-Island + .replace("MIN", String.valueOf(CardUtil.TESTS_SET_CODE_MIN_LOOKUP_LENGTH)) + .replace("MAX", String.valueOf(CardUtil.TESTS_SET_CODE_MAX_LOOKUP_LENGTH)) + .replace("DELIMETER", CardUtil.TESTS_SET_CODE_DELIMETER) ); // show ext info for special commands diff --git a/Mage.Tests/src/test/java/org/mage/test/testapi/AddCardApiTest.java b/Mage.Tests/src/test/java/org/mage/test/testapi/AddCardApiTest.java index 873e4a7f18a..e04ad0bf39b 100644 --- a/Mage.Tests/src/test/java/org/mage/test/testapi/AddCardApiTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/testapi/AddCardApiTest.java @@ -19,36 +19,47 @@ public class AddCardApiTest extends CardTestPlayerBase { List info; info = SystemUtil.parseSetAndCardNameCommand(""); - Assert.assertEquals(2, info.size()); - Assert.assertEquals("", info.get(0)); - Assert.assertEquals("", info.get(1)); + Assert.assertEquals(info.toString(), 2, info.size()); + Assert.assertEquals(info.toString(), "", info.get(0)); + Assert.assertEquals(info.toString(), "", info.get(1)); info = SystemUtil.parseSetAndCardNameCommand("single name"); - Assert.assertEquals(2, info.size()); - Assert.assertEquals("", info.get(0)); - Assert.assertEquals("single name", info.get(1)); + Assert.assertEquals(info.toString(), 2, info.size()); + Assert.assertEquals(info.toString(), "", info.get(0)); + Assert.assertEquals(info.toString(), "single name", info.get(1)); info = SystemUtil.parseSetAndCardNameCommand("SET-name"); - Assert.assertEquals(2, info.size()); - Assert.assertEquals("SET", info.get(0)); - Assert.assertEquals("name", info.get(1)); + Assert.assertEquals(info.toString(), 2, info.size()); + Assert.assertEquals(info.toString(), "SET", info.get(0)); + Assert.assertEquals(info.toString(), "name", info.get(1)); // only upper case set codes can be used info = SystemUtil.parseSetAndCardNameCommand("non-set-code-name"); - Assert.assertEquals(2, info.size()); - Assert.assertEquals("", info.get(0)); - Assert.assertEquals("non-set-code-name", info.get(1)); + Assert.assertEquals(info.toString(), 2, info.size()); + Assert.assertEquals(info.toString(), "", info.get(0)); + Assert.assertEquals(info.toString(), "non-set-code-name", info.get(1)); info = SystemUtil.parseSetAndCardNameCommand("SET-card-name"); - Assert.assertEquals(2, info.size()); - Assert.assertEquals("SET", info.get(0)); - Assert.assertEquals("card-name", info.get(1)); + Assert.assertEquals(info.toString(), 2, info.size()); + Assert.assertEquals(info.toString(), "SET", info.get(0)); + Assert.assertEquals(info.toString(), "card-name", info.get(1)); // must find first symbols before delimeter, e.g. TOO info = SystemUtil.parseSetAndCardNameCommand("TOO-LONG-SET-card-name"); - Assert.assertEquals(2, info.size()); - Assert.assertEquals("TOO", info.get(0)); - Assert.assertEquals("LONG-SET-card-name", info.get(1)); + Assert.assertEquals(info.toString(), 2, info.size()); + Assert.assertEquals(info.toString(), "TOO", info.get(0)); + Assert.assertEquals(info.toString(), "LONG-SET-card-name", info.get(1)); + + // short cards names like ED-E, Lonesome Eyebot (set code must be x3 length) + info = SystemUtil.parseSetAndCardNameCommand("ED-E, Lonesome Eyebot"); + Assert.assertEquals(info.toString(), 2, info.size()); + Assert.assertEquals(info.toString(), "", info.get(0)); + Assert.assertEquals(info.toString(), "ED-E, Lonesome Eyebot", info.get(1)); + // + info = SystemUtil.parseSetAndCardNameCommand("XLN-ED-E, Lonesome Eyebot"); + Assert.assertEquals(info.toString(), 2, info.size()); + Assert.assertEquals(info.toString(), "XLN", info.get(0)); + Assert.assertEquals(info.toString(), "ED-E, Lonesome Eyebot", info.get(1)); } @Test diff --git a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java index 621f461aab0..6cc82aced5e 100644 --- a/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java +++ b/Mage.Verify/src/test/java/mage/verify/VerifyCardDataTest.java @@ -1071,9 +1071,12 @@ public class VerifyCardDataTest { } // CHECK: set code must be compatible with tests commands format like "SET-card" - // how-to fix: increase lookup lenth - if (set.getCode().length() + 1 > CardUtil.TESTS_SET_CODE_LOOKUP_LENGTH) { - errorsList.add("Error: set code too big for test commads lookup: " + set.getCode() + ", lookup length: " + CardUtil.TESTS_SET_CODE_LOOKUP_LENGTH); + // how-to fix: change min/max lookup length + if (set.getCode().length() < CardUtil.TESTS_SET_CODE_MIN_LOOKUP_LENGTH + || set.getCode().length() > CardUtil.TESTS_SET_CODE_MAX_LOOKUP_LENGTH) { + errorsList.add("Error: set code un-supported by test commands lookup: " + set.getCode() + + ", min length: " + CardUtil.TESTS_SET_CODE_MIN_LOOKUP_LENGTH + + ", max length: " + CardUtil.TESTS_SET_CODE_MAX_LOOKUP_LENGTH); } boolean containsDoubleSideCards = false; diff --git a/Mage/src/main/java/mage/util/CardUtil.java b/Mage/src/main/java/mage/util/CardUtil.java index 8d29374b85c..de6f86b36e7 100644 --- a/Mage/src/main/java/mage/util/CardUtil.java +++ b/Mage/src/main/java/mage/util/CardUtil.java @@ -78,7 +78,9 @@ public final class CardUtil { "put", "return", "exile", "discard", "sacrifice", "remove", "tap", "reveal", "pay", "collect" ); - public static final int TESTS_SET_CODE_LOOKUP_LENGTH = 6; // search set code in commands like "set_code-card_name" + // search set code in commands like "set_code-card_name" + public static final int TESTS_SET_CODE_MIN_LOOKUP_LENGTH = 3; + public static final int TESTS_SET_CODE_MAX_LOOKUP_LENGTH = 6; public static final String TESTS_SET_CODE_DELIMETER = "-"; // delimeter for cheats and tests command "set_code-card_name" /**