diff options
author | Jędrzej Nowacki <jedrzej.nowacki@nokia.com> | 2012-06-21 17:19:33 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-07-13 01:51:38 +0200 |
commit | 197f34bcff6bf0e67c7ea02f7ed80aee7dc0023c (patch) | |
tree | 0a5df9d2cadd2228741b177e4ce35ca460434f3b /tests | |
parent | 8ca17ed943424f277d53cadd2e884834fac16b1f (diff) |
Test for QMetaType binary breakage.
Type traits can not be changed durring Qt5 life time.
Change-Id: If69f65ff2113c901580afee91b11ae1b11c13a4f
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/corelib/kernel/qmetatype/qmetatype.pro | 1 | ||||
-rw-r--r-- | tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp | 45 | ||||
-rw-r--r-- | tests/auto/corelib/kernel/qmetatype/typeFlags.bin | bin | 0 -> 146 bytes |
3 files changed, 46 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qmetatype/qmetatype.pro b/tests/auto/corelib/kernel/qmetatype/qmetatype.pro index aa7d59b567..e3977aec98 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 c73c26a9ef..230138d40d 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<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 Binary files differnew file mode 100644 index 0000000000..cf83e9419e --- /dev/null +++ b/tests/auto/corelib/kernel/qmetatype/typeFlags.bin |