Add regression tests for all fifteen Essence symbols and native XML properties

This commit is contained in:
Christian Daniel Jensen 2026-11-02 05:54:41 -07:00
parent 9dc118137d
commit cc47009198

View file

@ -0,0 +1,57 @@
#include <gtest/gtest.h>
#include <libcockatrice/card/card_info.h>
#include <libcockatrice/card/essence_types.h>
#include <QHash>
#include <QString>
TEST(EssenceTypesTest, HasExactlyFifteenCanonicalSymbols)
{
EXPECT_EQ(Essence::symbols(), QStringLiteral("MSOGEAQCBRLVTPN"));
EXPECT_EQ(Essence::symbols().size(), 15);
EXPECT_TRUE(Essence::isSymbol(QChar('N'))); // N is colorless.
EXPECT_FALSE(Essence::isSymbol(QChar('W'))); // MTG white is not Essence.
EXPECT_FALSE(Essence::isSymbol(QChar('U'))); // MTG blue is not Essence.
}
TEST(EssenceTypesTest, ParsesAllBracedAndUnbracedTypes)
{
const QString raw = QStringLiteral("{M}{S}{O}{G}{E}{A}{Q}{C}{B}{R}{L}{V}{T}{P}{N}");
EXPECT_EQ(Essence::parseCost(raw).join(QString()), Essence::symbols());
EXPECT_EQ(Essence::parseCost(QStringLiteral("MSN")).join(QString()), QStringLiteral("MSN"));
EXPECT_EQ(Essence::parseCost(QStringLiteral("{2}{N}{M}")).join(QStringLiteral("|")),
QStringLiteral("2|N|M"));
}
TEST(EssenceTypesTest, RejectsUnknownLegacyAndHybridCodes)
{
EXPECT_TRUE(Essence::parseCost(QStringLiteral("{W}{U}{Z}{M/N}")).isEmpty());
EXPECT_EQ(Essence::parseCost(QStringLiteral("{N}")), QStringList{QStringLiteral("N")});
}
TEST(EssenceTypesTest, NormalizesUniqueIdentityInCanonicalOrder)
{
EXPECT_EQ(Essence::normalizeIdentity(QStringLiteral("NSSMMO")), QStringLiteral("MSON"));
EXPECT_EQ(Essence::normalizeIdentity(QStringLiteral("N")), QStringLiteral("N"));
EXPECT_EQ(Essence::normalizeIdentity(QStringLiteral("WU")), QString());
}
TEST(EssenceTypesTest, NativePropertiesTakePrecedenceOverLegacyFallbacks)
{
const QHash<QString, QString> props = {
{QStringLiteral("essencecost"), QStringLiteral("{M}{N}")},
{QStringLiteral("essence"), QStringLiteral("NM")},
{QStringLiteral("essencevalue"), QStringLiteral("2")},
{QStringLiteral("manacost"), QStringLiteral("{W}{U}")},
{QStringLiteral("colors"), QStringLiteral("WU")},
{QStringLiteral("cmc"), QStringLiteral("9")}
};
const CardInfoPtr card = CardInfo::newInstance(QStringLiteral("Essence Test"),
QString(), false, props, {}, {}, {}, {});
ASSERT_TRUE(card);
EXPECT_EQ(card->getManaCost(), QStringLiteral("{M}{N}"));
EXPECT_EQ(card->getEssenceTypes(), QStringLiteral("MN"));
EXPECT_EQ(card->getColors(), QStringLiteral("MN"));
EXPECT_EQ(card->getCmc(), QStringLiteral("2"));
}