/*! * \brief Unit tests for EnumHelper. * * \copyright Copyright (c) 2014-2018 Governikus GmbH & Co. KG, Germany */ #include "EnumHelper.h" #include "LogHandler.h" #include #include using namespace governikus; namespace { #ifdef Q_OS_WIN const QLatin1String lineBreak("\r\n"); #else const QLatin1Char lineBreak('\n'); #endif } // namespace namespace governikus { defineEnumType(TestEnum1, FIRST, SECOND, THIRD) defineEnumType(TestEnum2, FIRST = 0xff, SECOND = 0x01, THIRD = 0xaa) } // namespace governikus class test_EnumHelper : public QObject { Q_OBJECT private: void testBadConverion(const int pValue, const QString& pExpectedOutput) { QSignalSpy spy(Env::getSingleton(), &LogHandler::fireLog); TestEnum1 badEnumValue = static_cast(pValue); QCOMPARE(Enum::getName(badEnumValue), QLatin1String()); QCOMPARE(spy.count(), 1); auto result = spy.takeFirst(); QVERIFY(result.at(0).toString().endsWith(pExpectedOutput)); } private Q_SLOTS: void initTestCase() { Env::getSingleton()->init(); } void cleanup() { Env::getSingleton()->resetBacklog(); } void operatorEquals() { QVERIFY(0xff == TestEnum2::FIRST); QVERIFY(0xff != TestEnum2::SECOND); QVERIFY(!(0xff != TestEnum2::FIRST)); QVERIFY(!(0xff == TestEnum2::SECOND)); } void operatorString() { QString str = "this is a dummy: "; str += TestEnum1::FIRST; QCOMPARE(str, QStringLiteral("this is a dummy: FIRST")); QString str2 = "other text" + TestEnum1::FIRST + str + TestEnum1::SECOND + " test"; QCOMPARE(str, QStringLiteral("this is a dummy: FIRST")); QCOMPARE(str2, QStringLiteral("other textFIRSTthis is a dummy: FIRSTSECOND test")); } void operatorDebug() { QSignalSpy spy(Env::getSingleton(), &LogHandler::fireLog); qDebug() << TestEnum1::FIRST; QCOMPARE(spy.count(), 1); auto result = spy.takeFirst(); QVERIFY(result.at(0).toString().endsWith(QStringLiteral("FIRST") + lineBreak)); } void allGetter() { QCOMPARE(Enum::getCount(), 3); QCOMPARE(Enum::getName(), QStringLiteral("TestEnum1")); QCOMPARE(Enum::getName(TestEnum1::FIRST), QStringLiteral("FIRST")); QCOMPARE(Enum::getName(TestEnum1::SECOND), QStringLiteral("SECOND")); QCOMPARE(Enum::getName(TestEnum1::THIRD), QStringLiteral("THIRD")); testBadConverion(6, QStringLiteral("UNKNOWN 0x6") + lineBreak); testBadConverion(255, QStringLiteral("UNKNOWN 0xff") + lineBreak); testBadConverion(365, QStringLiteral("UNKNOWN 0x16d") + lineBreak); testBadConverion(2147483647, QStringLiteral("UNKNOWN 0x7fffffff") + lineBreak); QCOMPARE(getEnumName(TestEnum1::SECOND), QStringLiteral("SECOND")); QCOMPARE(getEnumName(EnumTestEnum1::TestEnum1::SECOND), QStringLiteral("SECOND")); } void list() { const QVector& list1 = Enum::getList(); QCOMPARE(list1.size(), 3); const QVector& list2 = Enum::getList(); QCOMPARE(list2.size(), 3); QCOMPARE(list1, list2); QVERIFY(&list1 == &list2); QCOMPARE(list1[0], TestEnum2::FIRST); QCOMPARE(list1[1], TestEnum2::SECOND); QCOMPARE(list1[2], TestEnum2::THIRD); } void isValue() { QVERIFY(!Enum::isValue(static_cast(999))); QVERIFY(Enum::isValue(static_cast(0))); QVERIFY(!Enum::isValue(static_cast(0xbb))); QVERIFY(Enum::isValue(static_cast(0xFF))); QVERIFY(Enum::isValue(static_cast(0xaa))); QVERIFY(!Enum::isValue(char(999))); QVERIFY(Enum::isValue('\0')); QVERIFY(!Enum::isValue(char(0xbb))); QVERIFY(Enum::isValue(char(0xff))); QVERIFY(Enum::isValue(char(0xaa))); } void fromString() { QCOMPARE(Enum::fromString("SECOND", TestEnum1::THIRD), TestEnum1::SECOND); QVERIFY(Enum::fromString("SECOND", TestEnum1::THIRD) != TestEnum1::FIRST); QCOMPARE(Enum::fromString("FIRST", TestEnum1::THIRD), TestEnum1::FIRST); QVERIFY(Enum::fromString("FIRST", TestEnum1::THIRD) != TestEnum1::SECOND); QVERIFY(Enum::fromString("first", TestEnum1::THIRD) != TestEnum1::FIRST); QVERIFY(Enum::fromString("second", TestEnum1::THIRD) != TestEnum1::SECOND); QVERIFY(Enum::fromString("first", TestEnum1::THIRD) != TestEnum1::SECOND); QVERIFY(Enum::fromString("second", TestEnum1::THIRD) != TestEnum1::FIRST); QCOMPARE(Enum::fromString("abc", TestEnum1::THIRD), TestEnum1::THIRD); QVERIFY(Enum::fromString("FIRST", TestEnum1::THIRD) != TestEnum1::THIRD); QString value = "FIRST"; QVERIFY(Enum::fromString(value, TestEnum1::THIRD) != TestEnum1::THIRD); } }; QTEST_GUILESS_MAIN(test_EnumHelper) #include "test_EnumHelper.moc"