Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-21 10:12:22

0001 // Copyright (C) 2016 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 
0004 #ifndef QABSTRACTITEMMODELTESTER_H
0005 #define QABSTRACTITEMMODELTESTER_H
0006 
0007 #include <QtCore/QObject>
0008 #include <QtTest/qttestglobal.h>
0009 #include <QtCore/QAbstractItemModel>
0010 #include <QtCore/QVariant>
0011 
0012 #ifdef QT_GUI_LIB
0013 #include <QtGui/QFont>
0014 #include <QtGui/QColor>
0015 #include <QtGui/QBrush>
0016 #include <QtGui/QPixmap>
0017 #include <QtGui/QImage>
0018 #include <QtGui/QIcon>
0019 #endif
0020 
0021 QT_REQUIRE_CONFIG(itemmodeltester);
0022 
0023 QT_BEGIN_NAMESPACE
0024 
0025 class QAbstractItemModel;
0026 class QAbstractItemModelTester;
0027 class QAbstractItemModelTesterPrivate;
0028 
0029 namespace QTestPrivate {
0030 inline bool testDataGuiRoles(QAbstractItemModelTester *tester);
0031 }
0032 
0033 class Q_TESTLIB_EXPORT QAbstractItemModelTester : public QObject
0034 {
0035     Q_OBJECT
0036     Q_DECLARE_PRIVATE(QAbstractItemModelTester)
0037 
0038 public:
0039     enum class FailureReportingMode {
0040         QtTest,
0041         Warning,
0042         Fatal
0043     };
0044 
0045     QAbstractItemModelTester(QAbstractItemModel *model, QObject *parent = nullptr);
0046     QAbstractItemModelTester(QAbstractItemModel *model, FailureReportingMode mode, QObject *parent = nullptr);
0047 
0048     QAbstractItemModel *model() const;
0049     FailureReportingMode failureReportingMode() const;
0050     void setUseFetchMore(bool value);
0051 
0052 private:
0053     friend inline bool QTestPrivate::testDataGuiRoles(QAbstractItemModelTester *tester);
0054     bool verify(bool statement, const char *statementStr, const char *description, const char *file, int line);
0055 };
0056 
0057 namespace QTestPrivate {
0058 inline bool testDataGuiRoles(QAbstractItemModelTester *tester)
0059 {
0060 #ifdef QT_GUI_LIB
0061 
0062 #define MODELTESTER_VERIFY(statement) \
0063 do { \
0064     if (!tester->verify(static_cast<bool>(statement), #statement, "", __FILE__, __LINE__)) \
0065         return false; \
0066 } while (false)
0067 
0068     const auto model = tester->model();
0069     Q_ASSERT(model);
0070 
0071     if (!model->hasChildren())
0072         return true;
0073 
0074     QVariant variant;
0075 
0076     variant = model->data(model->index(0, 0), Qt::DecorationRole);
0077     if (variant.isValid()) {
0078         MODELTESTER_VERIFY(variant.canConvert<QPixmap>()
0079                            || variant.canConvert<QImage>()
0080                            || variant.canConvert<QIcon>()
0081                            || variant.canConvert<QColor>()
0082                            || variant.canConvert<QBrush>());
0083     }
0084 
0085     // General Purpose roles that should return a QFont
0086     variant = model->data(model->index(0, 0), Qt::FontRole);
0087     if (variant.isValid())
0088         MODELTESTER_VERIFY(variant.canConvert<QFont>());
0089 
0090     // General Purpose roles that should return a QColor or a QBrush
0091     variant = model->data(model->index(0, 0), Qt::BackgroundRole);
0092     if (variant.isValid())
0093         MODELTESTER_VERIFY(variant.canConvert<QColor>() || variant.canConvert<QBrush>());
0094 
0095     variant = model->data(model->index(0, 0), Qt::ForegroundRole);
0096     if (variant.isValid())
0097         MODELTESTER_VERIFY(variant.canConvert<QColor>() || variant.canConvert<QBrush>());
0098 
0099 #undef MODELTESTER_VERIFY
0100 
0101 #else
0102     Q_UNUSED(tester);
0103 #endif // QT_GUI_LIB
0104 
0105     return true;
0106 }
0107 } // namespaceQTestPrivate
0108 
0109 QT_END_NAMESPACE
0110 
0111 #endif // QABSTRACTITEMMODELTESTER_H