Skip to content

Commit

Permalink
tst_qflags: compile with QT_TYPESAFE_FLAGS
Browse files Browse the repository at this point in the history
In constExpr(), where code incorrectly assumed conversions to int or
uint were implicit, make them explicit.

In classEnum(), don't test bitwise operators between QFlags and
int/uint when QT_TYPESAFE_FLAGS is in effect.

Pick-to: 6.3
Fixes: QTBUG-101294
Change-Id: If119bf56dd12778f7231a9e76293c76e75354809
Reviewed-by: Thiago Macieira <[email protected]>
  • Loading branch information
marcmutz committed Feb 28, 2022
1 parent 6f50e54 commit e1b8257
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions tests/auto/corelib/global/qflags/tst_qflags.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ void tst_QFlags::testAnyFlag()
}

template <unsigned int N, typename T> bool verifyConstExpr(T n) { return n == N; }
template <unsigned int N, typename T> bool verifyConstExpr(QFlags<T> n) { return n.toInt() == N; }

constexpr Qt::MouseButtons testRelaxedConstExpr()
{
Expand All @@ -187,11 +188,11 @@ constexpr Qt::MouseButtons testRelaxedConstExpr()
void tst_QFlags::constExpr()
{
Qt::MouseButtons btn = Qt::LeftButton | Qt::RightButton;
switch (btn) {
switch (btn.toInt()) {
case Qt::LeftButton: QVERIFY(false); break;
case Qt::RightButton: QVERIFY(false); break;
case int(Qt::LeftButton | Qt::RightButton): QVERIFY(true); break;
default: QFAIL(qPrintable(QStringLiteral("Unexpected button: %1").arg(btn)));
case (Qt::LeftButton | Qt::RightButton).toInt(): QVERIFY(true); break;
default: QFAIL(qPrintable(QStringLiteral("Unexpected button: %1").arg(btn.toInt())));
}

QVERIFY(verifyConstExpr<uint((Qt::LeftButton | Qt::RightButton) & Qt::LeftButton)>(Qt::LeftButton));
Expand All @@ -200,8 +201,10 @@ void tst_QFlags::constExpr()
QVERIFY(verifyConstExpr<uint(~(Qt::LeftButton | Qt::RightButton))>(~(Qt::LeftButton | Qt::RightButton)));
QVERIFY(verifyConstExpr<uint(Qt::MouseButtons(Qt::LeftButton) ^ Qt::RightButton)>(Qt::LeftButton ^ Qt::RightButton));
QVERIFY(verifyConstExpr<uint(Qt::MouseButtons(0))>(0));
#ifndef QT_TYPESAFE_FLAGS
QVERIFY(verifyConstExpr<uint(Qt::MouseButtons(Qt::RightButton) & 0xff)>(Qt::RightButton));
QVERIFY(verifyConstExpr<uint(Qt::MouseButtons(Qt::RightButton) | 0xff)>(0xff));
#endif

QVERIFY(!verifyConstExpr<Qt::RightButton>(~Qt::MouseButtons(Qt::LeftButton)));

Expand Down Expand Up @@ -256,18 +259,22 @@ void tst_QFlags::classEnum()

QVERIFY(!f0);

#ifndef QT_TYPESAFE_FLAGS
QCOMPARE(f3 & int(1), 1);
QCOMPARE(f3 & uint(1), 1);
#endif
QCOMPARE(f3 & MyStrictEnum::StrictOne, 1);

MyStrictFlags aux;
#ifndef QT_TYPESAFE_FLAGS
aux = f3;
aux &= int(1);
QCOMPARE(aux, 1);

aux = f3;
aux &= uint(1);
QCOMPARE(aux, 1);
#endif

aux = f3;
aux &= MyStrictEnum::StrictOne;
Expand Down

0 comments on commit e1b8257

Please sign in to comment.