From: Jędrzej Nowacki Date: Thu, 21 Jun 2012 15:19:33 +0000 (+0200) Subject: Test for QMetaType binary breakage. X-Git-Tag: v5.0.0-beta1~826 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=197f34bcff6bf0e67c7ea02f7ed80aee7dc0023c;p=profile%2Fivi%2Fqtbase.git Test for QMetaType binary breakage. Type traits can not be changed durring Qt5 life time. Change-Id: If69f65ff2113c901580afee91b11ae1b11c13a4f Reviewed-by: Olivier Goffart --- diff --git a/tests/auto/corelib/kernel/qmetatype/qmetatype.pro b/tests/auto/corelib/kernel/qmetatype/qmetatype.pro index aa7d59b..e3977ae 100644 --- a/tests/auto/corelib/kernel/qmetatype/qmetatype.pro +++ b/tests/auto/corelib/kernel/qmetatype/qmetatype.pro @@ -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 diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp index c73c26a..230138d 100644 --- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -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("id"); + QTest::addColumn("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 index 0000000..cf83e94 Binary files /dev/null and b/tests/auto/corelib/kernel/qmetatype/typeFlags.bin differ