forked from External/mage
Tests: improved verify tests for tokens data, added how-to fix hints, added new checks (disabled by default)
This commit is contained in:
parent
47ee0f7f5a
commit
5bff03f57a
1 changed files with 34 additions and 7 deletions
|
|
@ -1283,6 +1283,8 @@ public class VerifyCardDataTest {
|
||||||
if (token == null) {
|
if (token == null) {
|
||||||
errorsList.add("Error: token must have default constructor with zero params: " + tokenClass.getName());
|
errorsList.add("Error: token must have default constructor with zero params: " + tokenClass.getName());
|
||||||
} else if (tokDataNamesIndex.getOrDefault(token.getName().replace(" Token", ""), "").isEmpty()) {
|
} else if (tokDataNamesIndex.getOrDefault(token.getName().replace(" Token", ""), "").isEmpty()) {
|
||||||
|
// how-to fix: public token must be downloadable, so tok-data must contain miss set
|
||||||
|
// (also don't forget to add new set to scryfall download)
|
||||||
errorsList.add("Error: can't find data in card-pictures-tok.txt for token: " + tokenClass.getName() + " -> " + token.getName());
|
errorsList.add("Error: can't find data in card-pictures-tok.txt for token: " + tokenClass.getName() + " -> " + token.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1312,20 +1314,45 @@ public class VerifyCardDataTest {
|
||||||
}
|
}
|
||||||
// set uses tokens, but tok data miss it
|
// set uses tokens, but tok data miss it
|
||||||
setsWithTokens.forEach((setCode, sourceCards) -> {
|
setsWithTokens.forEach((setCode, sourceCards) -> {
|
||||||
if (!tokDataTokensBySetIndex.containsKey(setCode)) {
|
List<CardDownloadData> setTokens = tokDataTokensBySetIndex.getOrDefault(setCode, null);
|
||||||
|
if (setTokens == null) {
|
||||||
// it's not a problem -- just find set's cards without real tokens for image tests
|
// it's not a problem -- just find set's cards without real tokens for image tests
|
||||||
// (most use cases: promo sets)
|
// Possible reasons:
|
||||||
warningsList.add("info, set has cards with token abilities, but it haven't token data: "
|
// - promo sets with cards without tokens (nothing to do with it)
|
||||||
|
// - miss set from tok-data (must add new set to tok-data and scryfall download)
|
||||||
|
warningsList.add("info, set's cards uses tokens but tok-data haven't it: "
|
||||||
+ setCode + " - " + sourceCards.stream().map(MageObject::getName).collect(Collectors.joining(", ")));
|
+ setCode + " - " + sourceCards.stream().map(MageObject::getName).collect(Collectors.joining(", ")));
|
||||||
|
} else {
|
||||||
|
// Card can be checked on scryfall like "set:set_code oracle:token_name oracle:token"
|
||||||
|
// Possible reasons for un-used tokens:
|
||||||
|
// - normal use case: tok-data contains wrong token data and must be removed
|
||||||
|
// - normal use case: card uses wrong rules text (must contain "create" and "token" words)
|
||||||
|
// - rare use case: un-implemented card that uses a token
|
||||||
|
setTokens.forEach(token -> {
|
||||||
|
if (token.getName().contains("Plane - ")) {
|
||||||
|
// cards don't put it to the game, so no related cards
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String needTokenName = token.getName()
|
||||||
|
.replace(" Token", "")
|
||||||
|
.replace("Emblem ", "");
|
||||||
|
// need add card name, so it will skip no name emblems like Sarkhan, the Dragonspeaker
|
||||||
|
if (sourceCards.stream()
|
||||||
|
.map(card -> card.getName() + " - " + String.join(", ", card.getRules()))
|
||||||
|
.noneMatch(s -> s.contains(needTokenName))) {
|
||||||
|
warningsList.add("info, tok-data has un-used tokens: "
|
||||||
|
+ token.getSet() + " - " + token.getName());
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// tok data have tokens, but cards from set are miss
|
// tok data have tokens, but cards from set are miss
|
||||||
tokDataTokensBySetIndex.forEach((setCode, setTokens) -> {
|
tokDataTokensBySetIndex.forEach((setCode, setTokens) -> {
|
||||||
if (!setsWithTokens.containsKey(setCode)) {
|
if (!setsWithTokens.containsKey(setCode)) {
|
||||||
// possible reasons:
|
// Possible reasons:
|
||||||
// - bad: outdated set code in tokens database (must use exists set codes, see additional check with token's codes)
|
// - outdated set code in tokens database (must be fixed by new set code, another verify check it)
|
||||||
// - ok: promo set contains additional tokens for main set -- it's ok and must be ignored (example: Saproling in E02)
|
// - promo set contains additional tokens for main set (it's ok and must be ignored, example: Saproling in E02)
|
||||||
warningsList.add("warning, tok data has set with tokens, but real set haven't cards with it: "
|
warningsList.add("warning, tok-data has tokens, but real set haven't cards with it: "
|
||||||
+ setCode + " - " + setTokens.stream().map(CardDownloadData::getName).collect(Collectors.joining(", ")));
|
+ setCode + " - " + setTokens.stream().map(CardDownloadData::getName).collect(Collectors.joining(", ")));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue