tests: added verify tests for emblems (class naming and package, constructor, image data, related to #13853)

This commit is contained in:
Oleg Agafonov 2025-07-17 09:31:39 +04:00
parent 925ef86c22
commit dcaa0b9834
4 changed files with 87 additions and 0 deletions

View file

@ -40,7 +40,9 @@ import mage.filter.predicate.Predicates;
import mage.game.FakeGame;
import mage.game.Game;
import mage.game.command.Dungeon;
import mage.game.command.Emblem;
import mage.game.command.Plane;
import mage.game.command.emblems.EmblemOfCard;
import mage.game.draft.DraftCube;
import mage.game.permanent.token.Token;
import mage.game.permanent.token.TokenImpl;
@ -1697,6 +1699,64 @@ public class VerifyCardDataTest {
}
}
@Test
// TODO: add same images verify for tokens/dungeons and other
// TODO: add same verify for Speed and other new command objects
public void test_checkMissingEmblemsData() {
Collection<String> errorsList = new ArrayList<>();
// prepare DBs
CardScanner.scan();
Reflections reflections = new Reflections("mage.");
Set<Class<? extends Emblem>> emblemClassesList = reflections.getSubTypesOf(Emblem.class).stream()
.filter(c -> !c.equals(EmblemOfCard.class)) // ignore emblem card
.collect(Collectors.toSet());
// 1. correct class name
for (Class<? extends Emblem> emblemClass : emblemClassesList) {
if (!emblemClass.getName().endsWith("Emblem")) {
String className = extractShortClass(emblemClass);
errorsList.add("Error: emblem class must ends with Emblem: " + className + " from " + emblemClass.getName());
}
}
// 2. correct package
for (Class<? extends Emblem> emblemClass : emblemClassesList) {
String fullClass = emblemClass.getName();
if (!fullClass.startsWith("mage.game.command.emblems.")) {
String className = extractShortClass(emblemClass);
errorsList.add("Error: emblem must be stored in mage.game.command.emblems package: " + className + " from " + emblemClass.getName());
}
}
// 3. correct constructor
MageObject fakeObject = CardRepository.instance.findCard("Forest").createCard();
for (Class<? extends Emblem> emblemClass : emblemClassesList) {
String className = extractShortClass(emblemClass);
Emblem emblem;
try {
emblem = (Emblem) createNewObject(emblemClass);
// 4. correct tokens-database (image)
try {
emblem.setSourceObjectAndInitImage(fakeObject);
} catch (Throwable e) {
e.printStackTrace();
errorsList.add("Error: can't setup emblem's image data - make sure tokens-database.txt has it: " + className + " from " + emblemClass.getName());
}
} catch (Throwable e) {
e.printStackTrace();
errorsList.add("Error: can't create emblem with default constructor: " + className + " from " + emblemClass.getName());
}
}
printMessages(errorsList);
if (errorsList.size() > 0) {
Assert.fail("Found emblem errors: " + errorsList.size());
}
}
@Test
@Ignore
// experimental test to find potentially fail conditions with NPE see https://github.com/magefree/mage/issues/13752