From cb43dec31e9adac5194b2d56b3348a3865eff219 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 13 Jul 2012 20:19:15 +0200 Subject: Split QWidgetsVariant tests into a separate testcase. This allows building the QVariant tests without the QtWidgets module. Change-Id: I7cd7e78a60c7bc7614ec16df1abe1e93e45d4923 Reviewed-by: Olivier Goffart --- .../other/qvariant_common/tst_qvariant_common.h | 227 +++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 tests/auto/other/qvariant_common/tst_qvariant_common.h (limited to 'tests/auto/other/qvariant_common/tst_qvariant_common.h') diff --git a/tests/auto/other/qvariant_common/tst_qvariant_common.h b/tests/auto/other/qvariant_common/tst_qvariant_common.h new file mode 100644 index 0000000000..63d236dfde --- /dev/null +++ b/tests/auto/other/qvariant_common/tst_qvariant_common.h @@ -0,0 +1,227 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TST_QVARIANT_COMMON +#define TST_QVARIANT_COMMON + +#include + +struct MessageHandlerInvalidType +{ + MessageHandlerInvalidType() + : oldMsgHandler(qInstallMsgHandler(handler)) + { + ok = false; + } + + ~MessageHandlerInvalidType() + { + qInstallMsgHandler(oldMsgHandler); + } + + QtMsgHandler oldMsgHandler; + + static void handler(QtMsgType type, const char *txt) + { + Q_UNUSED(type); + QString msg = QString::fromLatin1(txt); + // uint(-1) can be platform dependent so we check only beginning of the message. + ok = msg.startsWith("Trying to construct an instance of an invalid type, type id:"); + QVERIFY2(ok, (QString::fromLatin1("Message is not started correctly: '") + msg + '\'').toLatin1().constData()); + } + static bool ok; +}; +bool MessageHandlerInvalidType::ok; + + +class MessageHandler { +public: + MessageHandler(const int typeId, QtMsgHandler msgHandler = handler) + : oldMsgHandler(qInstallMsgHandler(msgHandler)) + { + currentId = typeId; + } + + ~MessageHandler() + { + qInstallMsgHandler(oldMsgHandler); + } + + bool testPassed() const + { + return ok; + } +protected: + static void handler(QtMsgType, const char *txt) + { + QString msg = QString::fromLatin1(txt); + // Format itself is not important, but basic data as a type name should be included in the output + ok = msg.startsWith("QVariant("); + QVERIFY2(ok, (QString::fromLatin1("Message is not started correctly: '") + msg + '\'').toLatin1().constData()); + ok &= (currentId == QMetaType::UnknownType + ? msg.contains("Invalid") + : msg.contains(QMetaType::typeName(currentId))); + QVERIFY2(ok, (QString::fromLatin1("Message doesn't contain type name: '") + msg + '\'').toLatin1().constData()); + if (currentId == QMetaType::Char || currentId == QMetaType::QChar) { + // Chars insert '\0' into the qdebug stream, it is not possible to find a real string length + return; + } + if (QMetaType::typeFlags(currentId) & QMetaType::PointerToQObject) { + QByteArray currentName = QMetaType::typeName(currentId); + currentName.chop(1); + ok &= (msg.contains(", " + currentName) || msg.contains(", 0x0")); + } + ok &= msg.endsWith(") "); + QVERIFY2(ok, (QString::fromLatin1("Message is not correctly finished: '") + msg + '\'').toLatin1().constData()); + + } + + QtMsgHandler oldMsgHandler; + static int currentId; + static bool ok; +}; +bool MessageHandler::ok; +int MessageHandler::currentId; + +#define TST_QVARIANT_CANCONVERT_DATATABLE_HEADERS \ + QTest::addColumn("val"); \ + QTest::addColumn("BitArrayCast"); \ + QTest::addColumn("BitmapCast"); \ + QTest::addColumn("BoolCast"); \ + QTest::addColumn("BrushCast"); \ + QTest::addColumn("ByteArrayCast"); \ + QTest::addColumn("ColorCast"); \ + QTest::addColumn("CursorCast"); \ + QTest::addColumn("DateCast"); \ + QTest::addColumn("DateTimeCast"); \ + QTest::addColumn("DoubleCast"); \ + QTest::addColumn("FontCast"); \ + QTest::addColumn("ImageCast"); \ + QTest::addColumn("IntCast"); \ + QTest::addColumn("InvalidCast"); \ + QTest::addColumn("KeySequenceCast"); \ + QTest::addColumn("ListCast"); \ + QTest::addColumn("LongLongCast"); \ + QTest::addColumn("MapCast"); \ + QTest::addColumn("PaletteCast"); \ + QTest::addColumn("PenCast"); \ + QTest::addColumn("PixmapCast"); \ + QTest::addColumn("PointCast"); \ + QTest::addColumn("RectCast"); \ + QTest::addColumn("RegionCast"); \ + QTest::addColumn("SizeCast"); \ + QTest::addColumn("SizePolicyCast"); \ + QTest::addColumn("StringCast"); \ + QTest::addColumn("StringListCast"); \ + QTest::addColumn("TimeCast"); \ + QTest::addColumn("UIntCast"); \ + QTest::addColumn("ULongLongCast"); + +#define TST_QVARIANT_CANCONVERT_FETCH_DATA \ + QFETCH(QVariant, val); \ + QFETCH(bool, BitArrayCast); \ + QFETCH(bool, BitmapCast); \ + QFETCH(bool, BoolCast); \ + QFETCH(bool, BrushCast); \ + QFETCH(bool, ByteArrayCast); \ + QFETCH(bool, ColorCast); \ + QFETCH(bool, CursorCast); \ + QFETCH(bool, DateCast); \ + QFETCH(bool, DateTimeCast); \ + QFETCH(bool, DoubleCast); \ + QFETCH(bool, FontCast); \ + QFETCH(bool, ImageCast); \ + QFETCH(bool, IntCast); \ + QFETCH(bool, InvalidCast); \ + QFETCH(bool, KeySequenceCast); \ + QFETCH(bool, ListCast); \ + QFETCH(bool, LongLongCast); \ + QFETCH(bool, MapCast); \ + QFETCH(bool, PaletteCast); \ + QFETCH(bool, PenCast); \ + QFETCH(bool, PixmapCast); \ + QFETCH(bool, PointCast); \ + QFETCH(bool, RectCast); \ + QFETCH(bool, RegionCast); \ + QFETCH(bool, SizeCast); \ + QFETCH(bool, SizePolicyCast); \ + QFETCH(bool, StringCast); \ + QFETCH(bool, StringListCast); \ + QFETCH(bool, TimeCast); \ + QFETCH(bool, UIntCast); \ + QFETCH(bool, ULongLongCast); + +#define TST_QVARIANT_CANCONVERT_COMPARE_DATA \ + QCOMPARE(val.canConvert(QVariant::BitArray), BitArrayCast); \ + QCOMPARE(val.canConvert(QVariant::Bitmap), BitmapCast); \ + QCOMPARE(val.canConvert(QVariant::Bool), BoolCast); \ + QCOMPARE(val.canConvert(QVariant::Brush), BrushCast); \ + QCOMPARE(val.canConvert(QVariant::ByteArray), ByteArrayCast); \ + QCOMPARE(val.canConvert(QVariant::Color), ColorCast); \ + QCOMPARE(val.canConvert(QVariant::Cursor), CursorCast); \ + QCOMPARE(val.canConvert(QVariant::Date), DateCast); \ + QCOMPARE(val.canConvert(QVariant::DateTime), DateTimeCast); \ + QCOMPARE(val.canConvert(QVariant::Double), DoubleCast); \ + QCOMPARE(val.canConvert(QVariant::Type(QMetaType::Float)), DoubleCast); \ + QCOMPARE(val.canConvert(QVariant::Font), FontCast); \ + QCOMPARE(val.canConvert(QVariant::Image), ImageCast); \ + QCOMPARE(val.canConvert(QVariant::Int), IntCast); \ + QCOMPARE(val.canConvert(QVariant::Invalid), InvalidCast); \ + QCOMPARE(val.canConvert(QVariant::KeySequence), KeySequenceCast); \ + QCOMPARE(val.canConvert(QVariant::List), ListCast); \ + QCOMPARE(val.canConvert(QVariant::LongLong), LongLongCast); \ + QCOMPARE(val.canConvert(QVariant::Map), MapCast); \ + QCOMPARE(val.canConvert(QVariant::Palette), PaletteCast); \ + QCOMPARE(val.canConvert(QVariant::Pen), PenCast); \ + QCOMPARE(val.canConvert(QVariant::Pixmap), PixmapCast); \ + QCOMPARE(val.canConvert(QVariant::Point), PointCast); \ + QCOMPARE(val.canConvert(QVariant::Rect), RectCast); \ + QCOMPARE(val.canConvert(QVariant::Region), RegionCast); \ + QCOMPARE(val.canConvert(QVariant::Size), SizeCast); \ + QCOMPARE(val.canConvert(QVariant::SizePolicy), SizePolicyCast); \ + QCOMPARE(val.canConvert(QVariant::String), StringCast); \ + QCOMPARE(val.canConvert(QVariant::StringList), StringListCast); \ + QCOMPARE(val.canConvert(QVariant::Time), TimeCast); \ + QCOMPARE(val.canConvert(QVariant::UInt), UIntCast); \ + QCOMPARE(val.canConvert(QVariant::ULongLong), ULongLongCast); + + +#endif \ No newline at end of file -- cgit v1.2.3