From 197f34bcff6bf0e67c7ea02f7ed80aee7dc0023c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Nowacki?= Date: Thu, 21 Jun 2012 17:19:33 +0200 Subject: [PATCH] Test for QMetaType binary breakage. Type traits can not be changed durring Qt5 life time. Change-Id: If69f65ff2113c901580afee91b11ae1b11c13a4f Reviewed-by: Olivier Goffart --- .../corelib/kernel/qmetatype/qmetatype.pro | 1 + .../kernel/qmetatype/tst_qmetatype.cpp | 45 ++++++++++++++++++ .../corelib/kernel/qmetatype/typeFlags.bin | Bin 0 -> 146 bytes 3 files changed, 46 insertions(+) create mode 100644 tests/auto/corelib/kernel/qmetatype/typeFlags.bin 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("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 0000000000000000000000000000000000000000..cf83e9419e4ed32150f7522cae456d720d8e3a02 GIT binary patch literal 146 zcmV~$0|G(;6a>Jnx3%GC+x88zt-EylW?XdBNP6g{GOmQWYR7z=O zlvPf76;!m6%B--;8tZJZ$rjt}I9;cwz6Ka-WMiAy)MlJxfhAU0V}mVr*yDgBPB`O& RD{i>sfhS&g