Skip to content

Commit

Permalink
Fix QCOMPARE with enum classes.
Browse files Browse the repository at this point in the history
As these are strongly typed, they won't implicitly convert to int, so make sure
to cast explicitly.

Change-Id: Ic8daa31c528bbd8f399ab401d0963e13db191312
Reviewed-by: Olivier Goffart (Woboq GmbH) <[email protected]>
  • Loading branch information
rburchell committed Nov 6, 2015
1 parent d8f41bd commit 9626baa
Show file tree
Hide file tree
Showing 6 changed files with 117 additions and 81 deletions.
2 changes: 1 addition & 1 deletion src/testlib/qtestcase.h
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ namespace QTest
inline typename QtPrivate::QEnableIf<QtPrivate::IsQEnumHelper<T>::Value, char*>::Type toString(T e)
{
QMetaEnum me = QMetaEnum::fromType<T>();
return qstrdup(me.key(e));
return qstrdup(me.key(int(e))); // int cast is necessary to support enum classes
}

template <typename T> // Fallback
Expand Down
11 changes: 11 additions & 0 deletions tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -123,9 +123,14 @@ class tst_Cmptest: public QObject
{
Q_OBJECT

public:
enum class MyClassEnum { MyClassEnumValue1, MyClassEnumValue2 };
Q_ENUM(MyClassEnum)

private slots:
void compare_unregistered_enums();
void compare_registered_enums();
void compare_class_enums();
void compare_boolfuncs();
void compare_pointerfuncs();
void compare_tostring();
Expand Down Expand Up @@ -160,6 +165,12 @@ void tst_Cmptest::compare_registered_enums()
QCOMPARE(Qt::ArrowCursor, Qt::BusyCursor);
}

void tst_Cmptest::compare_class_enums()
{
QCOMPARE(MyClassEnum::MyClassEnumValue1, MyClassEnum::MyClassEnumValue1);
QCOMPARE(MyClassEnum::MyClassEnumValue1, MyClassEnum::MyClassEnumValue2);
}

static bool boolfunc() { return true; }
static bool boolfunc2() { return true; }

Expand Down
60 changes: 34 additions & 26 deletions tests/auto/testlib/selftests/expected_cmptest.lightxml
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,27 @@
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="compare_unregistered_enums">
<Incident type="fail" file="tst_cmptest.cpp" line="154">
<Incident type="fail" file="tst_cmptest.cpp" line="159">
<Description><![CDATA[Compared values are not the same]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="compare_registered_enums">
<Incident type="fail" file="tst_cmptest.cpp" line="160">
<Incident type="fail" file="tst_cmptest.cpp" line="165">
<Description><![CDATA[Compared values are not the same
Actual (Qt::ArrowCursor): ArrowCursor
Expected (Qt::BusyCursor) : BusyCursor]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="compare_class_enums">
<Incident type="fail" file="tst_cmptest.cpp" line="171">
<Description><![CDATA[Compared values are not the same
Actual (MyClassEnum::MyClassEnumValue1): MyClassEnumValue1
Expected (MyClassEnum::MyClassEnumValue2): MyClassEnumValue2]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="compare_boolfuncs">
<Incident type="pass" file="" line="0" />
<Duration msecs="0"/>
Expand All @@ -30,7 +38,7 @@
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="compare_tostring">
<Incident type="fail" file="tst_cmptest.cpp" line="231">
<Incident type="fail" file="tst_cmptest.cpp" line="242">
<DataTag><![CDATA[int, string]]></DataTag>
<Description><![CDATA[Compared values are not the same
Actual (actual) : QVariant(int,123)
Expand All @@ -39,19 +47,19 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[both invalid]]></DataTag>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="231">
<Incident type="fail" file="tst_cmptest.cpp" line="242">
<DataTag><![CDATA[null hash, invalid]]></DataTag>
<Description><![CDATA[Compared values are not the same
Actual (actual) : QVariant(QVariantHash)
Expected (expected): QVariant()]]></Description>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="231">
<Incident type="fail" file="tst_cmptest.cpp" line="242">
<DataTag><![CDATA[string, null user type]]></DataTag>
<Description><![CDATA[Compared values are not the same
Actual (actual) : QVariant(QString,A simple string)
Expected (expected): QVariant(PhonyClass)]]></Description>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="231">
<Incident type="fail" file="tst_cmptest.cpp" line="242">
<DataTag><![CDATA[both non-null user type]]></DataTag>
<Description><![CDATA[Compared values are not the same
Actual (actual) : QVariant(PhonyClass,<value not representable as string>)
Expand All @@ -66,31 +74,31 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[equal lists]]></DataTag>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="325">
<Incident type="fail" file="tst_cmptest.cpp" line="336">
<DataTag><![CDATA[last item different]]></DataTag>
<Description><![CDATA[Compared lists differ at index 2.
Actual (opA): "string3"
Expected (opB): "DIFFERS"]]></Description>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="325">
<Incident type="fail" file="tst_cmptest.cpp" line="336">
<DataTag><![CDATA[second-last item different]]></DataTag>
<Description><![CDATA[Compared lists differ at index 2.
Actual (opA): "string3"
Expected (opB): "DIFFERS"]]></Description>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="325">
<Incident type="fail" file="tst_cmptest.cpp" line="336">
<DataTag><![CDATA[prefix]]></DataTag>
<Description><![CDATA[Compared lists have different sizes.
Actual (opA) size: 2
Expected (opB) size: 1]]></Description>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="325">
<Incident type="fail" file="tst_cmptest.cpp" line="336">
<DataTag><![CDATA[short list second]]></DataTag>
<Description><![CDATA[Compared lists have different sizes.
Actual (opA) size: 12
Expected (opB) size: 1]]></Description>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="325">
<Incident type="fail" file="tst_cmptest.cpp" line="336">
<DataTag><![CDATA[short list first]]></DataTag>
<Description><![CDATA[Compared lists have different sizes.
Actual (opA) size: 1
Expand All @@ -99,15 +107,15 @@
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="compareQListInt">
<Incident type="fail" file="tst_cmptest.cpp" line="332">
<Incident type="fail" file="tst_cmptest.cpp" line="343">
<Description><![CDATA[Compared lists differ at index 2.
Actual (int1): 3
Expected (int2): 4]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="compareQListDouble">
<Incident type="fail" file="tst_cmptest.cpp" line="339">
<Incident type="fail" file="tst_cmptest.cpp" line="350">
<Description><![CDATA[Compared lists differ at index 0.
Actual (double1): 1.5
Expected (double2): 1]]></Description>
Expand All @@ -118,13 +126,13 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[both null]]></DataTag>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="365">
<Incident type="fail" file="tst_cmptest.cpp" line="376">
<DataTag><![CDATA[one null]]></DataTag>
<Description><![CDATA[Compared QPixmaps differ.
Actual (opA).isNull(): 1
Expected (opB).isNull(): 0]]></Description>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="365">
<Incident type="fail" file="tst_cmptest.cpp" line="376">
<DataTag><![CDATA[other null]]></DataTag>
<Description><![CDATA[Compared QPixmaps differ.
Actual (opA).isNull(): 0
Expand All @@ -133,13 +141,13 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[equal]]></DataTag>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="365">
<Incident type="fail" file="tst_cmptest.cpp" line="376">
<DataTag><![CDATA[different size]]></DataTag>
<Description><![CDATA[Compared QPixmaps differ in size.
Actual (opA): 11x20
Expected (opB): 20x20]]></Description>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="365">
<Incident type="fail" file="tst_cmptest.cpp" line="376">
<DataTag><![CDATA[different pixels]]></DataTag>
<Description><![CDATA[Compared values are not the same]]></Description>
</Incident>
Expand All @@ -149,13 +157,13 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[both null]]></DataTag>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="392">
<Incident type="fail" file="tst_cmptest.cpp" line="403">
<DataTag><![CDATA[one null]]></DataTag>
<Description><![CDATA[Compared QImages differ.
Actual (opA).isNull(): 1
Expected (opB).isNull(): 0]]></Description>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="392">
<Incident type="fail" file="tst_cmptest.cpp" line="403">
<DataTag><![CDATA[other null]]></DataTag>
<Description><![CDATA[Compared QImages differ.
Actual (opA).isNull(): 0
Expand All @@ -164,44 +172,44 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[equal]]></DataTag>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="392">
<Incident type="fail" file="tst_cmptest.cpp" line="403">
<DataTag><![CDATA[different size]]></DataTag>
<Description><![CDATA[Compared QImages differ in size.
Actual (opA): 11x20
Expected (opB): 20x20]]></Description>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="392">
<Incident type="fail" file="tst_cmptest.cpp" line="403">
<DataTag><![CDATA[different format]]></DataTag>
<Description><![CDATA[Compared QImages differ in format.
Actual (opA): 6
Expected (opB): 3]]></Description>
</Incident>
<Incident type="fail" file="tst_cmptest.cpp" line="392">
<Incident type="fail" file="tst_cmptest.cpp" line="403">
<DataTag><![CDATA[different pixels]]></DataTag>
<Description><![CDATA[Compared values are not the same]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="verify">
<Incident type="fail" file="tst_cmptest.cpp" line="404">
<Incident type="fail" file="tst_cmptest.cpp" line="415">
<Description><![CDATA['opaqueFunc() < 2' returned FALSE. ()]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="verify2">
<Incident type="fail" file="tst_cmptest.cpp" line="410">
<Incident type="fail" file="tst_cmptest.cpp" line="421">
<Description><![CDATA['opaqueFunc() < 2' returned FALSE. (42)]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="tryVerify">
<Incident type="fail" file="tst_cmptest.cpp" line="416">
<Incident type="fail" file="tst_cmptest.cpp" line="427">
<Description><![CDATA['opaqueFunc() < 2' returned FALSE. ()]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="tryVerify2">
<Incident type="fail" file="tst_cmptest.cpp" line="422">
<Incident type="fail" file="tst_cmptest.cpp" line="433">
<Description><![CDATA['opaqueFunc() < 2' returned FALSE. (42)]]></Description>
</Incident>
<Duration msecs="0"/>
Expand Down
58 changes: 31 additions & 27 deletions tests/auto/testlib/selftests/expected_cmptest.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,104 +2,108 @@
Config: Using QtTest library
PASS : tst_Cmptest::initTestCase()
FAIL! : tst_Cmptest::compare_unregistered_enums() Compared values are not the same
Loc: [tst_cmptest.cpp(154)]
Loc: [tst_cmptest.cpp(159)]
FAIL! : tst_Cmptest::compare_registered_enums() Compared values are not the same
Actual (Qt::ArrowCursor): ArrowCursor
Expected (Qt::BusyCursor) : BusyCursor
Loc: [tst_cmptest.cpp(160)]
Loc: [tst_cmptest.cpp(165)]
FAIL! : tst_Cmptest::compare_class_enums() Compared values are not the same
Actual (MyClassEnum::MyClassEnumValue1): MyClassEnumValue1
Expected (MyClassEnum::MyClassEnumValue2): MyClassEnumValue2
Loc: [tst_cmptest.cpp(171)]
PASS : tst_Cmptest::compare_boolfuncs()
PASS : tst_Cmptest::compare_pointerfuncs()
FAIL! : tst_Cmptest::compare_tostring(int, string) Compared values are not the same
Actual (actual) : QVariant(int,123)
Expected (expected): QVariant(QString,hi)
Loc: [tst_cmptest.cpp(231)]
Loc: [tst_cmptest.cpp(242)]
PASS : tst_Cmptest::compare_tostring(both invalid)
FAIL! : tst_Cmptest::compare_tostring(null hash, invalid) Compared values are not the same
Actual (actual) : QVariant(QVariantHash)
Expected (expected): QVariant()
Loc: [tst_cmptest.cpp(231)]
Loc: [tst_cmptest.cpp(242)]
FAIL! : tst_Cmptest::compare_tostring(string, null user type) Compared values are not the same
Actual (actual) : QVariant(QString,A simple string)
Expected (expected): QVariant(PhonyClass)
Loc: [tst_cmptest.cpp(231)]
Loc: [tst_cmptest.cpp(242)]
FAIL! : tst_Cmptest::compare_tostring(both non-null user type) Compared values are not the same
Actual (actual) : QVariant(PhonyClass,<value not representable as string>)
Expected (expected): QVariant(PhonyClass,<value not representable as string>)
Loc: [tst_cmptest.cpp(231)]
Loc: [tst_cmptest.cpp(242)]
PASS : tst_Cmptest::compareQStringLists(empty lists)
PASS : tst_Cmptest::compareQStringLists(equal lists)
FAIL! : tst_Cmptest::compareQStringLists(last item different) Compared lists differ at index 2.
Actual (opA): "string3"
Expected (opB): "DIFFERS"
Loc: [tst_cmptest.cpp(325)]
Loc: [tst_cmptest.cpp(336)]
FAIL! : tst_Cmptest::compareQStringLists(second-last item different) Compared lists differ at index 2.
Actual (opA): "string3"
Expected (opB): "DIFFERS"
Loc: [tst_cmptest.cpp(325)]
Loc: [tst_cmptest.cpp(336)]
FAIL! : tst_Cmptest::compareQStringLists(prefix) Compared lists have different sizes.
Actual (opA) size: 2
Expected (opB) size: 1
Loc: [tst_cmptest.cpp(325)]
Loc: [tst_cmptest.cpp(336)]
FAIL! : tst_Cmptest::compareQStringLists(short list second) Compared lists have different sizes.
Actual (opA) size: 12
Expected (opB) size: 1
Loc: [tst_cmptest.cpp(325)]
Loc: [tst_cmptest.cpp(336)]
FAIL! : tst_Cmptest::compareQStringLists(short list first) Compared lists have different sizes.
Actual (opA) size: 1
Expected (opB) size: 12
Loc: [tst_cmptest.cpp(325)]
Loc: [tst_cmptest.cpp(336)]
FAIL! : tst_Cmptest::compareQListInt() Compared lists differ at index 2.
Actual (int1): 3
Expected (int2): 4
Loc: [tst_cmptest.cpp(332)]
Loc: [tst_cmptest.cpp(343)]
FAIL! : tst_Cmptest::compareQListDouble() Compared lists differ at index 0.
Actual (double1): 1.5
Expected (double2): 1
Loc: [tst_cmptest.cpp(339)]
Loc: [tst_cmptest.cpp(350)]
PASS : tst_Cmptest::compareQPixmaps(both null)
FAIL! : tst_Cmptest::compareQPixmaps(one null) Compared QPixmaps differ.
Actual (opA).isNull(): 1
Expected (opB).isNull(): 0
Loc: [tst_cmptest.cpp(365)]
Loc: [tst_cmptest.cpp(376)]
FAIL! : tst_Cmptest::compareQPixmaps(other null) Compared QPixmaps differ.
Actual (opA).isNull(): 0
Expected (opB).isNull(): 1
Loc: [tst_cmptest.cpp(365)]
Loc: [tst_cmptest.cpp(376)]
PASS : tst_Cmptest::compareQPixmaps(equal)
FAIL! : tst_Cmptest::compareQPixmaps(different size) Compared QPixmaps differ in size.
Actual (opA): 11x20
Expected (opB): 20x20
Loc: [tst_cmptest.cpp(365)]
Loc: [tst_cmptest.cpp(376)]
FAIL! : tst_Cmptest::compareQPixmaps(different pixels) Compared values are not the same
Loc: [tst_cmptest.cpp(365)]
Loc: [tst_cmptest.cpp(376)]
PASS : tst_Cmptest::compareQImages(both null)
FAIL! : tst_Cmptest::compareQImages(one null) Compared QImages differ.
Actual (opA).isNull(): 1
Expected (opB).isNull(): 0
Loc: [tst_cmptest.cpp(392)]
Loc: [tst_cmptest.cpp(403)]
FAIL! : tst_Cmptest::compareQImages(other null) Compared QImages differ.
Actual (opA).isNull(): 0
Expected (opB).isNull(): 1
Loc: [tst_cmptest.cpp(392)]
Loc: [tst_cmptest.cpp(403)]
PASS : tst_Cmptest::compareQImages(equal)
FAIL! : tst_Cmptest::compareQImages(different size) Compared QImages differ in size.
Actual (opA): 11x20
Expected (opB): 20x20
Loc: [tst_cmptest.cpp(392)]
Loc: [tst_cmptest.cpp(403)]
FAIL! : tst_Cmptest::compareQImages(different format) Compared QImages differ in format.
Actual (opA): 6
Expected (opB): 3
Loc: [tst_cmptest.cpp(392)]
Loc: [tst_cmptest.cpp(403)]
FAIL! : tst_Cmptest::compareQImages(different pixels) Compared values are not the same
Loc: [tst_cmptest.cpp(392)]
Loc: [tst_cmptest.cpp(403)]
FAIL! : tst_Cmptest::verify() 'opaqueFunc() < 2' returned FALSE. ()
Loc: [tst_cmptest.cpp(404)]
Loc: [tst_cmptest.cpp(415)]
FAIL! : tst_Cmptest::verify2() 'opaqueFunc() < 2' returned FALSE. (42)
Loc: [tst_cmptest.cpp(410)]
Loc: [tst_cmptest.cpp(421)]
FAIL! : tst_Cmptest::tryVerify() 'opaqueFunc() < 2' returned FALSE. ()
Loc: [tst_cmptest.cpp(416)]
Loc: [tst_cmptest.cpp(427)]
FAIL! : tst_Cmptest::tryVerify2() 'opaqueFunc() < 2' returned FALSE. (42)
Loc: [tst_cmptest.cpp(422)]
Loc: [tst_cmptest.cpp(433)]
PASS : tst_Cmptest::cleanupTestCase()
Totals: 11 passed, 26 failed, 0 skipped, 0 blacklisted
Totals: 11 passed, 27 failed, 0 skipped, 0 blacklisted
********* Finished testing of tst_Cmptest *********
Loading

0 comments on commit 9626baa

Please sign in to comment.