Test for QMetaType binary breakage.
authorJędrzej Nowacki <jedrzej.nowacki@nokia.com>
Thu, 21 Jun 2012 15:19:33 +0000 (17:19 +0200)
committerQt by Nokia <qt-info@nokia.com>
Thu, 12 Jul 2012 23:51:38 +0000 (01:51 +0200)
Type traits can not be changed durring Qt5 life time.

Change-Id: If69f65ff2113c901580afee91b11ae1b11c13a4f
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
tests/auto/corelib/kernel/qmetatype/qmetatype.pro
tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
tests/auto/corelib/kernel/qmetatype/typeFlags.bin [new file with mode: 0644]

index aa7d59b..e3977ae 100644 (file)
@@ -2,3 +2,4 @@ CONFIG += testcase parallel_test
 TARGET = tst_qmetatype
 QT = core testlib
 SOURCES = tst_qmetatype.cpp
+TESTDATA=./typeFlags.bin
\ No newline at end of file
index c73c26a..230138d 100644 (file)
@@ -90,6 +90,8 @@ private slots:
     void flags();
     void flagsStaticLess_data();
     void flagsStaticLess();
+    void flagsBinaryCompatibility5_0_data();
+    void flagsBinaryCompatibility5_0();
     void construct_data();
     void construct();
     void constructCopy_data();
@@ -885,6 +887,49 @@ void tst_QMetaType::flagsStaticLess()
     QCOMPARE(bool(flags & QMetaType::MovableType), isMovable);
 }
 
+void tst_QMetaType::flagsBinaryCompatibility5_0_data()
+{
+    // Changing traits of a built-in type is illegal from BC point of view.
+    // Traits are saved in code of an application and in the Qt library which means
+    // that there may be a mismatch.
+    // The test is loading data generated by this code:
+    //
+    //        QByteArray buffer;
+    //        buffer.reserve(2 * QMetaType::User);
+    //        for (quint32 i = 0; i < QMetaType::User; ++i) {
+    //            if (QMetaType::isRegistered(i)) {
+    //                buffer.append(i);
+    //                buffer.append(quint32(QMetaType::typeFlags(i)));
+    //            }
+    //        }
+    //        QFile file("/tmp/typeFlags.bin");
+    //        file.open(QIODevice::WriteOnly);
+    //        file.write(buffer);
+    //        file.close();
+
+    QTest::addColumn<quint32>("id");
+    QTest::addColumn<quint32>("flags");
+
+    QFile file(QFINDTESTDATA("typeFlags.bin"));
+    file.open(QIODevice::ReadOnly);
+    QByteArray buffer = file.readAll();
+
+    for (int i = 0; i < buffer.size(); i+=2) {
+        const quint32 id = buffer.at(i);
+        const quint32 flags = buffer.at(i + 1);
+        QVERIFY2(QMetaType::isRegistered(id), "A type could not be removed in BC way");
+        QTest::newRow(QMetaType::typeName(id)) << id << flags;
+    }
+}
+
+void tst_QMetaType::flagsBinaryCompatibility5_0()
+{
+    QFETCH(quint32, id);
+    QFETCH(quint32, flags);
+
+    QCOMPARE(quint32(QMetaType::typeFlags(id)), flags);
+}
+
 void tst_QMetaType::construct_data()
 {
     create_data();
diff --git a/tests/auto/corelib/kernel/qmetatype/typeFlags.bin b/tests/auto/corelib/kernel/qmetatype/typeFlags.bin
new file mode 100644 (file)
index 0000000..cf83e94
Binary files /dev/null and b/tests/auto/corelib/kernel/qmetatype/typeFlags.bin differ