summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/global/qglobal/tst_qglobal.cpp')
-rw-r--r--tests/auto/corelib/global/qglobal/tst_qglobal.cpp122
1 files changed, 122 insertions, 0 deletions
diff --git a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
index 8fedaf427a..b3d76bef8a 100644
--- a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
+++ b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
@@ -41,10 +41,12 @@
#include <QtTest/QtTest>
+#include <QtCore/qtypetraits.h>
class tst_QGlobal: public QObject
{
Q_OBJECT
+
private slots:
void qIsNull();
void for_each();
@@ -53,6 +55,7 @@ private slots:
void checkptr();
void qstaticassert();
void qConstructorFunction();
+ void isEnum();
};
void tst_QGlobal::qIsNull()
@@ -293,5 +296,124 @@ void tst_QGlobal::qConstructorFunction()
QCOMPARE(qConstructorFunctionValue, 123);
}
+struct isEnum_A {
+ int n_;
+};
+
+enum isEnum_B_Byte { isEnum_B_Byte_x = 63 };
+enum isEnum_B_Short { isEnum_B_Short_x = 1024 };
+enum isEnum_B_Int { isEnum_B_Int_x = 1 << 20 };
+
+union isEnum_C {};
+
+class isEnum_D {
+public:
+ operator int() const;
+};
+
+class isEnum_E {
+private:
+ operator int() const;
+};
+
+class isEnum_F {
+public:
+ enum AnEnum {};
+};
+
+#if defined (Q_COMPILER_CLASS_ENUM)
+enum class isEnum_G : qint64 {};
+#endif
+
+void tst_QGlobal::isEnum()
+{
+#if defined (Q_CC_MSVC)
+#define IS_ENUM_TRUE(x) (Q_IS_ENUM(x) == true)
+#define IS_ENUM_FALSE(x) (Q_IS_ENUM(x) == false)
+#else
+#define IS_ENUM_TRUE(x) (Q_IS_ENUM(x) == true && QtPrivate::is_enum<x>::value == true)
+#define IS_ENUM_FALSE(x) (Q_IS_ENUM(x) == false && QtPrivate::is_enum<x>::value == false)
+#endif
+
+ QVERIFY(IS_ENUM_TRUE(isEnum_B_Byte));
+ QVERIFY(IS_ENUM_TRUE(const isEnum_B_Byte));
+ QVERIFY(IS_ENUM_TRUE(volatile isEnum_B_Byte));
+ QVERIFY(IS_ENUM_TRUE(const volatile isEnum_B_Byte));
+
+ QVERIFY(IS_ENUM_TRUE(isEnum_B_Short));
+ QVERIFY(IS_ENUM_TRUE(const isEnum_B_Short));
+ QVERIFY(IS_ENUM_TRUE(volatile isEnum_B_Short));
+ QVERIFY(IS_ENUM_TRUE(const volatile isEnum_B_Short));
+
+ QVERIFY(IS_ENUM_TRUE(isEnum_B_Int));
+ QVERIFY(IS_ENUM_TRUE(const isEnum_B_Int));
+ QVERIFY(IS_ENUM_TRUE(volatile isEnum_B_Int));
+ QVERIFY(IS_ENUM_TRUE(const volatile isEnum_B_Int));
+
+ QVERIFY(IS_ENUM_TRUE(isEnum_F::AnEnum));
+ QVERIFY(IS_ENUM_TRUE(const isEnum_F::AnEnum));
+ QVERIFY(IS_ENUM_TRUE(volatile isEnum_F::AnEnum));
+ QVERIFY(IS_ENUM_TRUE(const volatile isEnum_F::AnEnum));
+
+ QVERIFY(IS_ENUM_FALSE(void));
+ QVERIFY(IS_ENUM_FALSE(isEnum_B_Byte &));
+ QVERIFY(IS_ENUM_FALSE(isEnum_B_Byte[1]));
+ QVERIFY(IS_ENUM_FALSE(const isEnum_B_Byte[1]));
+ QVERIFY(IS_ENUM_FALSE(isEnum_B_Byte[]));
+ QVERIFY(IS_ENUM_FALSE(int));
+ QVERIFY(IS_ENUM_FALSE(float));
+ QVERIFY(IS_ENUM_FALSE(isEnum_A));
+ QVERIFY(IS_ENUM_FALSE(isEnum_A *));
+ QVERIFY(IS_ENUM_FALSE(const isEnum_A));
+ QVERIFY(IS_ENUM_FALSE(isEnum_C));
+ QVERIFY(IS_ENUM_FALSE(isEnum_D));
+ QVERIFY(IS_ENUM_FALSE(isEnum_E));
+ QVERIFY(IS_ENUM_FALSE(void()));
+ QVERIFY(IS_ENUM_FALSE(void(*)()));
+ QVERIFY(IS_ENUM_FALSE(int isEnum_A::*));
+ QVERIFY(IS_ENUM_FALSE(void (isEnum_A::*)()));
+
+ QVERIFY(IS_ENUM_FALSE(size_t));
+ QVERIFY(IS_ENUM_FALSE(bool));
+ QVERIFY(IS_ENUM_FALSE(wchar_t));
+
+ QVERIFY(IS_ENUM_FALSE(char));
+ QVERIFY(IS_ENUM_FALSE(unsigned char));
+ QVERIFY(IS_ENUM_FALSE(short));
+ QVERIFY(IS_ENUM_FALSE(unsigned short));
+ QVERIFY(IS_ENUM_FALSE(int));
+ QVERIFY(IS_ENUM_FALSE(unsigned int));
+ QVERIFY(IS_ENUM_FALSE(long));
+ QVERIFY(IS_ENUM_FALSE(unsigned long));
+
+ QVERIFY(IS_ENUM_FALSE(qint8));
+ QVERIFY(IS_ENUM_FALSE(quint8));
+ QVERIFY(IS_ENUM_FALSE(qint16));
+ QVERIFY(IS_ENUM_FALSE(quint16));
+ QVERIFY(IS_ENUM_FALSE(qint32));
+ QVERIFY(IS_ENUM_FALSE(quint32));
+ QVERIFY(IS_ENUM_FALSE(qint64));
+ QVERIFY(IS_ENUM_FALSE(quint64));
+
+ QVERIFY(IS_ENUM_FALSE(void *));
+ QVERIFY(IS_ENUM_FALSE(int *));
+
+#if defined (Q_COMPILER_UNICODE_STRINGS)
+ QVERIFY(IS_ENUM_FALSE(char16_t));
+ QVERIFY(IS_ENUM_FALSE(char32_t));
+#endif
+
+#if defined (Q_COMPILER_CLASS_ENUM)
+ // Strongly type class enums are not handled by the
+ // fallback type traits implementation. Any compiler
+ // supported by Qt that supports C++0x class enums
+ // should also support the __is_enum intrinsic.
+ QVERIFY(Q_IS_ENUM(isEnum_G) == true);
+#endif
+
+#undef IS_ENUM_TRUE
+#undef IS_ENUM_FALSE
+}
+
QTEST_MAIN(tst_QGlobal)
#include "tst_qglobal.moc"