summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/gui')
-rw-r--r--tests/auto/gui/image/qiconhighdpi/qiconhighdpi.pro2
-rw-r--r--tests/auto/gui/image/qimage/tst_qimage.cpp38
-rw-r--r--tests/auto/gui/image/qpixmap/tst_qpixmap.cpp1
-rw-r--r--tests/auto/gui/itemmodels/qstandarditem/tst_qstandarditem.cpp69
-rw-r--r--tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp479
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp51
-rw-r--r--tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp5
-rw-r--r--tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp5
-rw-r--r--tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp17
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_qwindow.cpp104
-rw-r--r--tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp5
-rw-r--r--tests/auto/gui/painting/qbrush/tst_qbrush.cpp6
-rw-r--r--tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp46
-rw-r--r--tests/auto/gui/painting/qpainter/tst_qpainter.cpp25
-rw-r--r--tests/auto/gui/painting/qpathclipper/paths.cpp4
-rw-r--r--tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp6
-rw-r--r--tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp93
-rw-r--r--tests/auto/gui/painting/qtransform/tst_qtransform.cpp19
-rw-r--r--tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp6
-rw-r--r--tests/auto/gui/rhi/qrhi/data/buildshaders.bat (renamed from tests/auto/gui/rhi/qrhi/data/compile.bat)0
-rw-r--r--tests/auto/gui/rhi/qrhi/data/simple.frag.qsbbin908 -> 730 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/simple.vert.qsbbin958 -> 791 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/simpletextured.frag.qsbbin1479 -> 1208 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/simpletextured.vert.qsbbin1195 -> 964 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/textured.frag.qsbbin1997 -> 1574 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/textured.vert.qsbbin1708 -> 1342 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/tst_qrhi.cpp436
-rw-r--r--tests/auto/gui/rhi/qshader/data/README15
-rw-r--r--tests/auto/gui/rhi/qshader/data/color_all_v1.vert.qsb (renamed from tests/auto/gui/rhi/qshader/data/color.vert.qsb)bin1847 -> 1847 bytes
-rw-r--r--tests/auto/gui/rhi/qshader/data/color_spirv_v1.vert.qsb (renamed from tests/auto/gui/rhi/qshader/data/color_simple.vert.qsb)bin813 -> 813 bytes
-rw-r--r--tests/auto/gui/rhi/qshader/data/texture.frag16
-rw-r--r--tests/auto/gui/rhi/qshader/data/texture_all_v2.frag.qsbbin0 -> 1691 bytes
-rw-r--r--tests/auto/gui/rhi/qshader/data/texture_all_v3.frag.qsbbin0 -> 1432 bytes
-rw-r--r--tests/auto/gui/rhi/qshader/data/texture_all_v4.frag.qsbbin0 -> 1272 bytes
-rw-r--r--tests/auto/gui/rhi/qshader/tst_qshader.cpp290
-rw-r--r--tests/auto/gui/text/qfontdatabase/testdata.qrc1
-rw-r--r--tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp29
-rw-r--r--tests/auto/gui/text/qsyntaxhighlighter/qsyntaxhighlighter.pro2
-rw-r--r--tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp6
-rw-r--r--tests/auto/gui/text/qtextdocumentlayout/qtextdocumentlayout.pro2
-rw-r--r--tests/auto/gui/text/qtexttable/tst_qtexttable.cpp2
-rw-r--r--tests/auto/gui/util/qdoublevalidator/tst_qdoublevalidator.cpp1
42 files changed, 1253 insertions, 528 deletions
diff --git a/tests/auto/gui/image/qiconhighdpi/qiconhighdpi.pro b/tests/auto/gui/image/qiconhighdpi/qiconhighdpi.pro
index 17553158bc..49c615721b 100644
--- a/tests/auto/gui/image/qiconhighdpi/qiconhighdpi.pro
+++ b/tests/auto/gui/image/qiconhighdpi/qiconhighdpi.pro
@@ -1,5 +1,5 @@
CONFIG += testcase
-TARGET = tst_qicon
+TARGET = tst_qiconhighdpi
QT += testlib
SOURCES += tst_qiconhighdpi.cpp
diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp
index e9aa9aad30..71aaa23da4 100644
--- a/tests/auto/gui/image/qimage/tst_qimage.cpp
+++ b/tests/auto/gui/image/qimage/tst_qimage.cpp
@@ -32,7 +32,7 @@
#include <qimage.h>
#include <qimagereader.h>
#include <qlist.h>
-#include <qmatrix.h>
+#include <qtransform.h>
#include <qrandom.h>
#include <stdio.h>
@@ -191,6 +191,8 @@ private slots:
void invertPixelsRGB_data();
void invertPixelsRGB();
+ void invertPixelsIndexed();
+
void exifOrientation_data();
void exifOrientation();
@@ -1202,7 +1204,7 @@ void tst_QImage::rotate()
// original.save("rotated90_original.png", "png");
// Initialize the matrix manually (do not use rotate) to avoid rounding errors
- QMatrix matRotate90;
+ QTransform matRotate90;
matRotate90.rotate(degrees);
QImage dest = original;
// And rotate it 4 times, then the image should be identical to the original
@@ -1216,7 +1218,7 @@ void tst_QImage::rotate()
// dest.save("rotated90_result.png","png");
QCOMPARE(original, dest);
- // Test with QMatrix::rotate 90 also, since we trust that now
+ // Test with QTransform::rotate 90 also, since we trust that now
matRotate90.rotate(degrees);
dest = original;
// And rotate it 4 times, then the image should be identical to the original
@@ -3086,6 +3088,36 @@ void tst_QImage::invertPixelsRGB()
QCOMPARE(qBlue(pixel) >> 4, (255 - 96) >> 4);
}
+void tst_QImage::invertPixelsIndexed()
+{
+ {
+ QImage image(1, 1, QImage::Format_Mono);
+ image.fill(Qt::color1);
+ image.invertPixels();
+ QCOMPARE(image.pixelIndex(0, 0), 0);
+ }
+ {
+ QImage image(1, 1, QImage::Format_MonoLSB);
+ image.fill(Qt::color0);
+ image.invertPixels();
+ QCOMPARE(image.pixelIndex(0, 0), 1);
+ }
+ {
+ QImage image(1, 1, QImage::Format_Indexed8);
+ image.setColorTable({0xff000000, 0xffffffff});
+ image.fill(Qt::black);
+ image.invertPixels();
+ QCOMPARE(image.pixelIndex(0, 0), 255);
+ }
+ {
+ QImage image(1, 1, QImage::Format_Indexed8);
+ image.setColorTable({0xff000000, 0xffffffff, 0x80000000, 0x80ffffff, 0x00000000});
+ image.fill(Qt::white);
+ image.invertPixels();
+ QCOMPARE(image.pixelIndex(0, 0), 254);
+ }
+}
+
void tst_QImage::exifOrientation_data()
{
QTest::addColumn<QString>("fileName");
diff --git a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
index ba5df809f2..1d77f70919 100644
--- a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
+++ b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
@@ -32,7 +32,6 @@
#include <qbitmap.h>
#include <qimage.h>
#include <qimagereader.h>
-#include <qmatrix.h>
#ifndef QT_NO_WIDGETS
#include <qdesktopwidget.h>
#include <qsplashscreen.h>
diff --git a/tests/auto/gui/itemmodels/qstandarditem/tst_qstandarditem.cpp b/tests/auto/gui/itemmodels/qstandarditem/tst_qstandarditem.cpp
index b6921fc0bb..596908d84d 100644
--- a/tests/auto/gui/itemmodels/qstandarditem/tst_qstandarditem.cpp
+++ b/tests/auto/gui/itemmodels/qstandarditem/tst_qstandarditem.cpp
@@ -29,7 +29,7 @@
#include <QtTest/QtTest>
-#include <qstandarditemmodel.h>
+#include <QStandardItem>
class tst_QStandardItem : public QObject
{
@@ -48,8 +48,6 @@ private slots:
void parent();
void insertColumn_data();
void insertColumn();
- void insertColumns_data();
- void insertColumns();
void insertRow_data();
void insertRow();
void insertRows_data();
@@ -312,12 +310,15 @@ void tst_QStandardItem::getSetFlags()
QCOMPARE(item.checkState(), Qt::Checked);
#if QT_DEPRECATED_SINCE(5, 6)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
// deprecated API
item.setTristate(true);
QVERIFY(item.isTristate());
QVERIFY(item.flags() & Qt::ItemIsTristate);
item.setTristate(false);
QVERIFY(!(item.flags() & Qt::ItemIsTristate));
+QT_WARNING_POP
#endif
}
@@ -382,7 +383,7 @@ void tst_QStandardItem::getSetChild()
QStandardItem item(rows, columns);
bool shouldHaveChildren = (rows > 0) && (columns > 0);
QCOMPARE(item.hasChildren(), shouldHaveChildren);
- QCOMPARE(item.child(row, column), static_cast<QStandardItem*>(0));
+ QCOMPARE(item.child(row, column), nullptr);
QStandardItem *child = new QStandardItem;
item.setChild(row, column, child);
@@ -399,11 +400,11 @@ void tst_QStandardItem::getSetChild()
QCOMPARE(item.child(row, column), anotherChild);
QCOMPARE(anotherChild->row(), row);
QCOMPARE(anotherChild->column(), column);
- item.setChild(row, column, 0);
+ item.setChild(row, column, nullptr);
} else {
delete child;
}
- QCOMPARE(item.child(row, column), static_cast<QStandardItem*>(0));
+ QCOMPARE(item.child(row, column), nullptr);
}
void tst_QStandardItem::parent()
@@ -411,7 +412,7 @@ void tst_QStandardItem::parent()
{
QStandardItem item;
QStandardItem *child = new QStandardItem;
- QCOMPARE(child->parent(), static_cast<QStandardItem*>(0));
+ QCOMPARE(child->parent(), nullptr);
item.setChild(0, 0, child);
QCOMPARE(child->parent(), &item);
@@ -425,7 +426,7 @@ void tst_QStandardItem::parent()
QStandardItem *item = new QStandardItem;
model.appendRow(item);
// parent of a top-level item should be 0
- QCOMPARE(item->parent(), static_cast<QStandardItem*>(0));
+ QCOMPARE(item->parent(), nullptr);
}
}
@@ -485,7 +486,7 @@ void tst_QStandardItem::insertColumn()
for (int i = 0; i < count; ++i)
QCOMPARE(item.child(i, column), columnItems.at(i));
for (int i = count; i < item.rowCount(); ++i)
- QCOMPARE(item.child(i, column), static_cast<QStandardItem*>(0));
+ QCOMPARE(item.child(i, column), nullptr);
} else {
QCOMPARE(item.columnCount(), columns);
QCOMPARE(item.rowCount(), rows);
@@ -493,14 +494,6 @@ void tst_QStandardItem::insertColumn()
}
}
-void tst_QStandardItem::insertColumns_data()
-{
-}
-
-void tst_QStandardItem::insertColumns()
-{
-}
-
void tst_QStandardItem::insertRow_data()
{
QTest::addColumn<int>("rows");
@@ -557,7 +550,7 @@ void tst_QStandardItem::insertRow()
for (int i = 0; i < count; ++i)
QCOMPARE(item.child(row, i), rowItems.at(i));
for (int i = count; i < item.columnCount(); ++i)
- QCOMPARE(item.child(row, i), static_cast<QStandardItem*>(0));
+ QCOMPARE(item.child(row, i), nullptr);
} else {
QCOMPARE(item.columnCount(), columns);
QCOMPARE(item.rowCount(), rows);
@@ -585,9 +578,8 @@ void tst_QStandardItem::insertRows()
QStandardItem item(rows, columns);
QList<QStandardItem*> items;
- for (int i = 0; i < insertCount; ++i) {
+ for (int i = 0; i < insertCount; ++i)
items.append(new QStandardItem());
- }
item.insertRows(insertAt, items);
QCOMPARE(item.rowCount(), rows + insertCount);
@@ -659,7 +651,7 @@ void tst_QStandardItem::appendColumn()
for (int i = 0; i < count; ++i)
QCOMPARE(item.child(i, columns), columnItems.at(i));
for (int i = count; i < item.rowCount(); ++i)
- QCOMPARE(item.child(i, columns), static_cast<QStandardItem*>(0));
+ QCOMPARE(item.child(i, columns), nullptr);
// make sure original children remained unchanged
for (int i = 0; i < rows; ++i) {
@@ -734,7 +726,7 @@ void tst_QStandardItem::appendRow()
for (int i = 0; i < count; ++i)
QCOMPARE(item.child(rows, i), rowItems.at(i));
for (int i = count; i < item.columnCount(); ++i)
- QCOMPARE(item.child(rows, i), static_cast<QStandardItem*>(0));
+ QCOMPARE(item.child(rows, i), nullptr);
// make sure original children remained unchanged
for (int i = 0; i < rows; ++i) {
@@ -753,7 +745,7 @@ void tst_QStandardItem::takeChild()
for (int i = 0; i < item.rowCount(); ++i) {
QCOMPARE(item.takeChild(i), itemList.at(i));
- QCOMPARE(item.takeChild(0, 0), static_cast<QStandardItem*>(0));
+ QCOMPARE(item.takeChild(0, 0), nullptr);
for (int j = i + 1; j < item.rowCount(); ++j)
QCOMPARE(item.child(j), itemList.at(j));
}
@@ -938,7 +930,7 @@ void tst_QStandardItem::deleteItem()
for (int j = 0; j < model.columnCount(); ++j) {
QStandardItem *item = model.item(i, j);
delete item;
- QCOMPARE(model.item(i, j), static_cast<QStandardItem*>(0));
+ QCOMPARE(model.item(i, j), nullptr);
}
}
}
@@ -995,9 +987,9 @@ void tst_QStandardItem::sortChildren()
item->appendRow(two);
QSignalSpy layoutAboutToBeChangedSpy(
- model, SIGNAL(layoutAboutToBeChanged()));
+ model, &QAbstractItemModel::layoutAboutToBeChanged);
QSignalSpy layoutChangedSpy(
- model, SIGNAL(layoutChanged()));
+ model, &QAbstractItemModel::layoutChanged);
one->sortChildren(0, Qt::DescendingOrder);
// verify sorted
@@ -1040,19 +1032,16 @@ void tst_QStandardItem::sortChildren()
class CustomItem : public QStandardItem
{
public:
- CustomItem(const QString &text) : QStandardItem(text) { }
- CustomItem() { }
- virtual ~CustomItem() { }
-
- virtual int type() const { return QStandardItem::UserType + 1; }
+ using QStandardItem::QStandardItem;
- virtual QStandardItem *clone() const { return QStandardItem::clone(); }
+ int type() const override { return QStandardItem::UserType + 1; }
- void emitDataChanged() { QStandardItem::emitDataChanged(); }
-
- virtual bool operator<(const QStandardItem &other) const {
+ bool operator<(const QStandardItem &other) const override {
return text().length() < other.text().length();
}
+
+ using QStandardItem::clone;
+ using QStandardItem::emitDataChanged;
};
Q_DECLARE_METATYPE(QStandardItem*)
@@ -1072,11 +1061,11 @@ void tst_QStandardItem::subclassing()
QStandardItemModel model;
model.appendRow(item);
- QSignalSpy itemChangedSpy(&model, SIGNAL(itemChanged(QStandardItem*)));
+ QSignalSpy itemChangedSpy(&model, &QStandardItemModel::itemChanged);
item->emitDataChanged();
QCOMPARE(itemChangedSpy.count(), 1);
QCOMPARE(itemChangedSpy.at(0).count(), 1);
- QCOMPARE(qvariant_cast<QStandardItem*>(itemChangedSpy.at(0).at(0)), (QStandardItem*)item);
+ QCOMPARE(qvariant_cast<QStandardItem*>(itemChangedSpy.at(0).at(0)), item);
CustomItem *child0 = new CustomItem("cc");
CustomItem *child1 = new CustomItem("bbb");
@@ -1085,9 +1074,9 @@ void tst_QStandardItem::subclassing()
item->appendRow(child1);
item->appendRow(child2);
item->sortChildren(0);
- QCOMPARE(item->child(0), (QStandardItem*)child2);
- QCOMPARE(item->child(1), (QStandardItem*)child0);
- QCOMPARE(item->child(2), (QStandardItem*)child1);
+ QCOMPARE(item->child(0), child2);
+ QCOMPARE(item->child(1), child0);
+ QCOMPARE(item->child(2), child1);
}
void tst_QStandardItem::lessThan()
diff --git a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
index bc8bc38da6..65c99d34b5 100644
--- a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
+++ b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
@@ -29,7 +29,7 @@
#include <QtTest/QtTest>
-#include <qstandarditemmodel.h>
+#include <QStandardItemModel>
#include <QTreeView>
#include <private/qtreeview_p.h>
@@ -131,30 +131,33 @@ private slots:
void supportedDragDropActions();
void taskQTBUG_45114_setItemData();
+ void setItemPersistentIndex();
private:
- QStandardItemModel *m_model;
+ QStandardItemModel *m_model = nullptr;
QPersistentModelIndex persistent;
- QVector<QModelIndex> rcParent;
- QVector<int> rcFirst;
- QVector<int> rcLast;
+ QVector<QModelIndex> rcParent = QVector<QModelIndex>(8);
+ QVector<int> rcFirst = QVector<int>(8, 0);
+ QVector<int> rcLast = QVector<int>(8, 0);
QVector<int> currentRoles;
//return true if models have the same structure, and all child have the same text
- bool compareModels(QStandardItemModel *model1, QStandardItemModel *model2);
+ static bool compareModels(QStandardItemModel *model1, QStandardItemModel *model2);
//return true if models have the same structure, and all child have the same text
- bool compareItems(QStandardItem *item1, QStandardItem *item2);
+ static bool compareItems(QStandardItem *item1, QStandardItem *item2);
};
-static const int defaultSize = 3;
+static constexpr int defaultSize = 3;
Q_DECLARE_METATYPE(QStandardItem*)
Q_DECLARE_METATYPE(Qt::Orientation)
-tst_QStandardItemModel::tst_QStandardItemModel() : m_model(0), rcParent(8), rcFirst(8,0), rcLast(8,0)
+tst_QStandardItemModel::tst_QStandardItemModel()
{
qRegisterMetaType<QStandardItem*>("QStandardItem*");
qRegisterMetaType<Qt::Orientation>("Qt::Orientation");
+ qRegisterMetaType<QAbstractItemModel::LayoutChangeHint>("QAbstractItemModel::LayoutChangeHint");
+ qRegisterMetaType<QList<QPersistentModelIndex>>("QList<QPersistentModelIndex>");
}
/*
@@ -170,23 +173,23 @@ tst_QStandardItemModel::tst_QStandardItemModel() : m_model(0), rcParent(8), rcFi
void tst_QStandardItemModel::init()
{
m_model = new QStandardItemModel(defaultSize, defaultSize);
- connect(m_model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)),
- this, SLOT(rowsAboutToBeInserted(QModelIndex,int,int)));
- connect(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)),
- this, SLOT(rowsInserted(QModelIndex,int,int)));
- connect(m_model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
- this, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int)));
- connect(m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
- this, SLOT(rowsRemoved(QModelIndex,int,int)));
-
- connect(m_model, SIGNAL(columnsAboutToBeInserted(QModelIndex,int,int)),
- this, SLOT(columnsAboutToBeInserted(QModelIndex,int,int)));
- connect(m_model, SIGNAL(columnsInserted(QModelIndex,int,int)),
- this, SLOT(columnsInserted(QModelIndex,int,int)));
- connect(m_model, SIGNAL(columnsAboutToBeRemoved(QModelIndex,int,int)),
- this, SLOT(columnsAboutToBeRemoved(QModelIndex,int,int)));
- connect(m_model, SIGNAL(columnsRemoved(QModelIndex,int,int)),
- this, SLOT(columnsRemoved(QModelIndex,int,int)));
+ connect(m_model, &QStandardItemModel::rowsAboutToBeInserted,
+ this, &tst_QStandardItemModel::rowsAboutToBeInserted);
+ connect(m_model, &QStandardItemModel::rowsInserted,
+ this, &tst_QStandardItemModel::rowsInserted);
+ connect(m_model, &QStandardItemModel::rowsAboutToBeRemoved,
+ this, &tst_QStandardItemModel::rowsAboutToBeRemoved);
+ connect(m_model, &QStandardItemModel::rowsRemoved,
+ this, &tst_QStandardItemModel::rowsRemoved);
+
+ connect(m_model, &QStandardItemModel::columnsAboutToBeInserted,
+ this, &tst_QStandardItemModel::columnsAboutToBeInserted);
+ connect(m_model, &QStandardItemModel::columnsInserted,
+ this, &tst_QStandardItemModel::columnsInserted);
+ connect(m_model, &QStandardItemModel::columnsAboutToBeRemoved,
+ this, &tst_QStandardItemModel::columnsAboutToBeRemoved);
+ connect(m_model, &QStandardItemModel::columnsRemoved,
+ this, &tst_QStandardItemModel::columnsRemoved);
connect(m_model, &QAbstractItemModel::dataChanged,
this, [this](const QModelIndex &, const QModelIndex &, const QVector<int> &roles)
@@ -200,25 +203,9 @@ void tst_QStandardItemModel::init()
void tst_QStandardItemModel::cleanup()
{
- disconnect(m_model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)),
- this, SLOT(rowsAboutToBeInserted(QModelIndex,int,int)));
- disconnect(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)),
- this, SLOT(rowsInserted(QModelIndex,int,int)));
- disconnect(m_model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
- this, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int)));
- disconnect(m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
- this, SLOT(rowsRemoved(QModelIndex,int,int)));
-
- disconnect(m_model, SIGNAL(columnsAboutToBeInserted(QModelIndex,int,int)),
- this, SLOT(columnsAboutToBeInserted(QModelIndex,int,int)));
- disconnect(m_model, SIGNAL(columnsInserted(QModelIndex,int,int)),
- this, SLOT(columnsInserted(QModelIndex,int,int)));
- disconnect(m_model, SIGNAL(columnsAboutToBeRemoved(QModelIndex,int,int)),
- this, SLOT(columnsAboutToBeRemoved(QModelIndex,int,int)));
- disconnect(m_model, SIGNAL(columnsRemoved(QModelIndex,int,int)),
- this, SLOT(columnsRemoved(QModelIndex,int,int)));
+ m_model->disconnect(this);
delete m_model;
- m_model = 0;
+ m_model = nullptr;
}
void tst_QStandardItemModel::insertRow_data()
@@ -240,9 +227,9 @@ void tst_QStandardItemModel::insertRow()
QIcon icon;
// default all initial items to DisplayRole: "initalitem"
- for (int r=0; r < m_model->rowCount(); ++r) {
- for (int c=0; c < m_model->columnCount(); ++c) {
- m_model->setData(m_model->index(r,c), "initialitem", Qt::DisplayRole);
+ for (int r = 0; r < m_model->rowCount(); ++r) {
+ for (int c = 0; c < m_model->columnCount(); ++c) {
+ m_model->setData(m_model->index(r, c), "initialitem", Qt::DisplayRole);
}
}
@@ -306,7 +293,7 @@ void tst_QStandardItemModel::insertRowsItems()
int rowCount = m_model->rowCount();
QList<QStandardItem *> items;
- QStandardItemModel *m = qobject_cast<QStandardItemModel*>(m_model);
+ QStandardItemModel *m = m_model;
QStandardItem *hiddenRoot = m->invisibleRootItem();
for (int i = 0; i < 3; ++i)
items.append(new QStandardItem(QString::number(i + 10)));
@@ -317,7 +304,7 @@ void tst_QStandardItemModel::insertRowsItems()
QCOMPARE(m_model->index(rowCount + 2, 0).data().toInt(), 12);
for (int i = rowCount; i < rowCount + 3; ++i) {
QVERIFY(m->item(i));
- QCOMPARE(static_cast<QAbstractItemModel *>(m->item(i)->model()), m_model);
+ QCOMPARE(m->item(i)->model(), m_model);
}
}
@@ -356,9 +343,9 @@ void tst_QStandardItemModel::insertColumn()
QFETCH(int, expectedColumn);
// default all initial items to DisplayRole: "initalitem"
- for (int r=0; r < m_model->rowCount(); ++r) {
- for (int c=0; c < m_model->columnCount(); ++c) {
- m_model->setData(m_model->index(r,c), "initialitem", Qt::DisplayRole);
+ for (int r = 0; r < m_model->rowCount(); ++r) {
+ for (int c = 0; c < m_model->columnCount(); ++c) {
+ m_model->setData(m_model->index(r, c), "initialitem", Qt::DisplayRole);
}
}
@@ -474,9 +461,9 @@ void tst_QStandardItemModel::setHeaderData()
QCOMPARE(m_model->headerData(i, orient).toString(), QString::number(i + 1));
QSignalSpy headerDataChangedSpy(
- m_model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)));
+ m_model, &QAbstractItemModel::headerDataChanged);
QSignalSpy dataChangedSpy(
- m_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)));
+ m_model, &QAbstractItemModel::dataChanged);
// insert custom values and check
for (int i = 0; i < count; ++i) {
QString customString = QString("custom") + QString::number(i);
@@ -592,14 +579,14 @@ void tst_QStandardItemModel::removingPersistentIndexes()
QVERIFY(m_model->insertRows(0, 10));
QVERIFY(m_model->insertColumns(0, 10));
- QObject::connect(m_model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
- this, SLOT(checkAboutToBeRemoved()));
- QObject::connect(m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
- this, SLOT(checkRemoved()));
- QObject::connect(m_model, SIGNAL(columnsAboutToBeRemoved(QModelIndex,int,int)),
- this, SLOT(checkAboutToBeRemoved()));
- QObject::connect(m_model, SIGNAL(columnsRemoved(QModelIndex,int,int)),
- this, SLOT(checkRemoved()));
+ connect(m_model, &QAbstractItemModel::rowsAboutToBeRemoved,
+ this, &tst_QStandardItemModel::checkAboutToBeRemoved);
+ connect(m_model, &QAbstractItemModel::rowsRemoved,
+ this, &tst_QStandardItemModel::checkRemoved);
+ connect(m_model, &QAbstractItemModel::columnsAboutToBeRemoved,
+ this, &tst_QStandardItemModel::checkAboutToBeRemoved);
+ connect(m_model, &QAbstractItemModel::columnsRemoved,
+ this, &tst_QStandardItemModel::checkRemoved);
// test removeRow
@@ -634,14 +621,14 @@ void tst_QStandardItemModel::removingPersistentIndexes()
QVERIFY(m_model->removeColumn(0));
- QObject::disconnect(m_model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
- this, SLOT(checkAboutToBeRemoved()));
- QObject::disconnect(m_model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
- this, SLOT(checkRemoved()));
- QObject::disconnect(m_model, SIGNAL(columnsAboutToBeRemoved(QModelIndex,int,int)),
- this, SLOT(checkAboutToBeRemoved()));
- QObject::disconnect(m_model, SIGNAL(columnsRemoved(QModelIndex,int,int)),
- this, SLOT(checkRemoved()));
+ disconnect(m_model, &QAbstractItemModel::rowsAboutToBeRemoved,
+ this, &tst_QStandardItemModel::checkAboutToBeRemoved);
+ disconnect(m_model, &QAbstractItemModel::rowsRemoved,
+ this, &tst_QStandardItemModel::checkRemoved);
+ disconnect(m_model, &QAbstractItemModel::columnsAboutToBeRemoved,
+ this, &tst_QStandardItemModel::checkAboutToBeRemoved);
+ disconnect(m_model, &QAbstractItemModel::columnsRemoved,
+ this, &tst_QStandardItemModel::checkRemoved);
}
void tst_QStandardItemModel::updateRowAboutToBeRemoved()
@@ -653,8 +640,8 @@ void tst_QStandardItemModel::updateRowAboutToBeRemoved()
void tst_QStandardItemModel::updatingPersistentIndexes()
{
- QObject::connect(m_model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
- this, SLOT(updateRowAboutToBeRemoved()));
+ connect(m_model, &QAbstractItemModel::rowsAboutToBeRemoved,
+ this, &tst_QStandardItemModel::updateRowAboutToBeRemoved);
persistent = m_model->index(1, 0);
QVERIFY(persistent.isValid());
@@ -663,8 +650,8 @@ void tst_QStandardItemModel::updatingPersistentIndexes()
QPersistentModelIndex tmp = m_model->index(0, 0);
QCOMPARE(persistent, tmp);
- QObject::disconnect(m_model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
- this, SLOT(updateRowAboutToBeRemoved()));
+ disconnect(m_model, &QAbstractItemModel::rowsAboutToBeRemoved,
+ this, &tst_QStandardItemModel::updateRowAboutToBeRemoved);
}
void tst_QStandardItemModel::modelChanged(ModelChanged change, const QModelIndex &parent,
@@ -737,8 +724,8 @@ void tst_QStandardItemModel::data()
QCOMPARE(currentRoles, QVector<int>{});
QIcon icon;
- for (int r=0; r < m_model->rowCount(); ++r) {
- for (int c=0; c < m_model->columnCount(); ++c) {
+ for (int r = 0; r < m_model->rowCount(); ++r) {
+ for (int c = 0; c < m_model->columnCount(); ++c) {
m_model->setData(m_model->index(r,c), "initialitem", Qt::DisplayRole);
QCOMPARE(currentRoles, QVector<int>({Qt::DisplayRole, Qt::EditRole}));
m_model->setData(m_model->index(r,c), "tooltip", Qt::ToolTipRole);
@@ -786,9 +773,9 @@ void tst_QStandardItemModel::clear()
QCOMPARE(model.columnCount(), 10);
QCOMPARE(model.rowCount(), 10);
- QSignalSpy modelResetSpy(&model, SIGNAL(modelReset()));
- QSignalSpy layoutChangedSpy(&model, SIGNAL(layoutChanged()));
- QSignalSpy rowsRemovedSpy(&model, SIGNAL(rowsRemoved(QModelIndex,int,int)));
+ QSignalSpy modelResetSpy(&model, &QStandardItemModel::modelReset);
+ QSignalSpy layoutChangedSpy(&model, &QStandardItemModel::layoutChanged);
+ QSignalSpy rowsRemovedSpy(&model, &QStandardItemModel::rowsRemoved);
QAbstractItemModelTester mt(&model);
@@ -805,129 +792,35 @@ void tst_QStandardItemModel::clear()
void tst_QStandardItemModel::sort_data()
{
- QTest::addColumn<int>("sortOrder");
+ QTest::addColumn<Qt::SortOrder>("sortOrder");
QTest::addColumn<QStringList>("initial");
QTest::addColumn<QStringList>("expected");
- QTest::newRow("flat descending") << static_cast<int>(Qt::DescendingOrder)
- << (QStringList()
- << "delta"
- << "yankee"
- << "bravo"
- << "lima"
- << "charlie"
- << "juliet"
- << "tango"
- << "hotel"
- << "uniform"
- << "alpha"
- << "echo"
- << "golf"
- << "quebec"
- << "foxtrot"
- << "india"
- << "romeo"
- << "november"
- << "oskar"
- << "zulu"
- << "kilo"
- << "whiskey"
- << "mike"
- << "papa"
- << "sierra"
- << "xray"
- << "viktor")
- << (QStringList()
- << "zulu"
- << "yankee"
- << "xray"
- << "whiskey"
- << "viktor"
- << "uniform"
- << "tango"
- << "sierra"
- << "romeo"
- << "quebec"
- << "papa"
- << "oskar"
- << "november"
- << "mike"
- << "lima"
- << "kilo"
- << "juliet"
- << "india"
- << "hotel"
- << "golf"
- << "foxtrot"
- << "echo"
- << "delta"
- << "charlie"
- << "bravo"
- << "alpha");
- QTest::newRow("flat ascending") << static_cast<int>(Qt::AscendingOrder)
- << (QStringList()
- << "delta"
- << "yankee"
- << "bravo"
- << "lima"
- << "charlie"
- << "juliet"
- << "tango"
- << "hotel"
- << "uniform"
- << "alpha"
- << "echo"
- << "golf"
- << "quebec"
- << "foxtrot"
- << "india"
- << "romeo"
- << "november"
- << "oskar"
- << "zulu"
- << "kilo"
- << "whiskey"
- << "mike"
- << "papa"
- << "sierra"
- << "xray"
- << "viktor")
- << (QStringList()
- << "alpha"
- << "bravo"
- << "charlie"
- << "delta"
- << "echo"
- << "foxtrot"
- << "golf"
- << "hotel"
- << "india"
- << "juliet"
- << "kilo"
- << "lima"
- << "mike"
- << "november"
- << "oskar"
- << "papa"
- << "quebec"
- << "romeo"
- << "sierra"
- << "tango"
- << "uniform"
- << "viktor"
- << "whiskey"
- << "xray"
- << "yankee"
- << "zulu");
+ const QStringList unsorted(
+ {"delta", "yankee", "bravo", "lima", "charlie", "juliet",
+ "tango", "hotel", "uniform", "alpha", "echo", "golf",
+ "quebec", "foxtrot", "india", "romeo", "november",
+ "oskar", "zulu", "kilo", "whiskey", "mike", "papa",
+ "sierra", "xray" , "viktor"});
+ QStringList sorted = unsorted;
+
+ std::sort(sorted.begin(), sorted.end());
+ QTest::newRow("flat ascending") << Qt::AscendingOrder
+ << unsorted
+ << sorted;
+ std::reverse(sorted.begin(), sorted.end());
+ QTest::newRow("flat descending") << Qt::DescendingOrder
+ << unsorted
+ << sorted;
QStringList list;
- for (int i=1000; i < 2000; ++i)
+ for (int i = 1000; i < 2000; ++i)
list.append(QStringLiteral("Number: ") + QString::number(i));
- QTest::newRow("large set ascending") << static_cast<int>(Qt::AscendingOrder) << list << list;
+ QTest::newRow("large set ascending") << Qt::AscendingOrder << list << list;
}
void tst_QStandardItemModel::sort()
{
- QFETCH(int, sortOrder);
+ QFETCH(Qt::SortOrder, sortOrder);
QFETCH(QStringList, initial);
QFETCH(QStringList, expected);
// prepare model
@@ -942,12 +835,12 @@ void tst_QStandardItemModel::sort()
}
QSignalSpy layoutAboutToBeChangedSpy(
- &model, SIGNAL(layoutAboutToBeChanged()));
+ &model, &QStandardItemModel::layoutAboutToBeChanged);
QSignalSpy layoutChangedSpy(
- &model, SIGNAL(layoutChanged()));
+ &model, &QStandardItemModel::layoutChanged);
// sort
- model.sort(0, static_cast<Qt::SortOrder>(sortOrder));
+ model.sort(0, sortOrder);
QCOMPARE(layoutAboutToBeChangedSpy.count(), 1);
QCOMPARE(layoutChangedSpy.count(), 1);
@@ -963,23 +856,23 @@ void tst_QStandardItemModel::sortRole_data()
{
QTest::addColumn<QStringList>("initialText");
QTest::addColumn<QVariantList>("initialData");
- QTest::addColumn<int>("sortRole");
- QTest::addColumn<int>("sortOrder");
+ QTest::addColumn<Qt::ItemDataRole>("sortRole");
+ QTest::addColumn<Qt::SortOrder>("sortOrder");
QTest::addColumn<QStringList>("expectedText");
QTest::addColumn<QVariantList>("expectedData");
QTest::newRow("sort ascending with Qt::DisplayRole")
<< (QStringList() << "b" << "a" << "c")
<< (QVariantList() << 2 << 3 << 1)
- << static_cast<int>(Qt::DisplayRole)
- << static_cast<int>(Qt::AscendingOrder)
+ << Qt::DisplayRole
+ << Qt::AscendingOrder
<< (QStringList() << "a" << "b" << "c")
<< (QVariantList() << 3 << 2 << 1);
QTest::newRow("sort ascending with Qt::UserRole")
<< (QStringList() << "a" << "b" << "c")
<< (QVariantList() << 3 << 2 << 1)
- << static_cast<int>(Qt::UserRole)
- << static_cast<int>(Qt::AscendingOrder)
+ << Qt::UserRole
+ << Qt::AscendingOrder
<< (QStringList() << "c" << "b" << "a")
<< (QVariantList() << 1 << 2 << 3);
}
@@ -988,8 +881,8 @@ void tst_QStandardItemModel::sortRole()
{
QFETCH(QStringList, initialText);
QFETCH(QVariantList, initialData);
- QFETCH(int, sortRole);
- QFETCH(int, sortOrder);
+ QFETCH(Qt::ItemDataRole, sortRole);
+ QFETCH(Qt::SortOrder, sortOrder);
QFETCH(QStringList, expectedText);
QFETCH(QVariantList, expectedData);
@@ -1001,7 +894,7 @@ void tst_QStandardItemModel::sortRole()
model.appendRow(item);
}
model.setSortRole(sortRole);
- model.sort(0, static_cast<Qt::SortOrder>(sortOrder));
+ model.sort(0, sortOrder);
for (int i = 0; i < expectedText.count(); ++i) {
QStandardItem *item = model.item(i);
QCOMPARE(item->text(), expectedText.at(i));
@@ -1032,23 +925,23 @@ void tst_QStandardItemModel::getSetHeaderItem()
{
QStandardItemModel model;
- QCOMPARE(model.horizontalHeaderItem(0), static_cast<QStandardItem*>(0));
+ QCOMPARE(model.horizontalHeaderItem(0), nullptr);
QStandardItem *hheader = new QStandardItem();
model.setHorizontalHeaderItem(0, hheader);
QCOMPARE(model.columnCount(), 1);
QCOMPARE(model.horizontalHeaderItem(0), hheader);
QCOMPARE(hheader->model(), &model);
- model.setHorizontalHeaderItem(0, 0);
- QCOMPARE(model.horizontalHeaderItem(0), static_cast<QStandardItem*>(0));
+ model.setHorizontalHeaderItem(0, nullptr);
+ QCOMPARE(model.horizontalHeaderItem(0), nullptr);
- QCOMPARE(model.verticalHeaderItem(0), static_cast<QStandardItem*>(0));
+ QCOMPARE(model.verticalHeaderItem(0), nullptr);
QStandardItem *vheader = new QStandardItem();
model.setVerticalHeaderItem(0, vheader);
QCOMPARE(model.rowCount(), 1);
QCOMPARE(model.verticalHeaderItem(0), vheader);
QCOMPARE(vheader->model(), &model);
- model.setVerticalHeaderItem(0, 0);
- QCOMPARE(model.verticalHeaderItem(0), static_cast<QStandardItem*>(0));
+ model.setVerticalHeaderItem(0, nullptr);
+ QCOMPARE(model.verticalHeaderItem(0), nullptr);
}
void tst_QStandardItemModel::indexFromItem()
@@ -1065,7 +958,7 @@ void tst_QStandardItemModel::indexFromItem()
QCOMPARE(itemIndex.row(), 10);
QCOMPARE(itemIndex.column(), 20);
QCOMPARE(itemIndex.parent(), QModelIndex());
- QCOMPARE(itemIndex.model(), (const QAbstractItemModel*)(&model));
+ QCOMPARE(itemIndex.model(), &model);
QStandardItem *child = new QStandardItem;
item->setChild(4, 2, child);
@@ -1080,7 +973,7 @@ void tst_QStandardItemModel::indexFromItem()
QVERIFY(!noSuchIndex.isValid());
delete dummy;
- noSuchIndex = model.indexFromItem(0);
+ noSuchIndex = model.indexFromItem(nullptr);
QVERIFY(!noSuchIndex.isValid());
}
@@ -1088,7 +981,7 @@ void tst_QStandardItemModel::itemFromIndex()
{
QStandardItemModel model;
- QCOMPARE(model.itemFromIndex(QModelIndex()), (QStandardItem*)0);
+ QCOMPARE(model.itemFromIndex(QModelIndex()), nullptr);
QStandardItem *item = new QStandardItem;
model.setItem(10, 20, item);
@@ -1109,35 +1002,31 @@ void tst_QStandardItemModel::itemFromIndex()
class CustomItem : public QStandardItem
{
public:
- CustomItem() : QStandardItem() { }
- ~CustomItem() { }
- int type() const {
- return UserType;
- }
- QStandardItem *clone() const {
- return new CustomItem;
- }
+ using QStandardItem::QStandardItem;
+
+ int type() const override { return UserType; }
+ QStandardItem *clone() const override { return new CustomItem; }
};
void tst_QStandardItemModel::getSetItemPrototype()
{
QStandardItemModel model;
- QCOMPARE(model.itemPrototype(), static_cast<const QStandardItem*>(0));
+ QCOMPARE(model.itemPrototype(), nullptr);
const CustomItem *proto = new CustomItem;
model.setItemPrototype(proto);
- QCOMPARE(model.itemPrototype(), (const QStandardItem*)proto);
+ QCOMPARE(model.itemPrototype(), proto);
model.setRowCount(1);
model.setColumnCount(1);
QModelIndex index = model.index(0, 0, QModelIndex());
model.setData(index, "foo");
QStandardItem *item = model.itemFromIndex(index);
- QVERIFY(item != 0);
+ QVERIFY(item != nullptr);
QCOMPARE(item->type(), static_cast<int>(QStandardItem::UserType));
- model.setItemPrototype(0);
- QCOMPARE(model.itemPrototype(), static_cast<const QStandardItem*>(0));
+ model.setItemPrototype(nullptr);
+ QCOMPARE(model.itemPrototype(), nullptr);
}
void tst_QStandardItemModel::getSetItemData()
@@ -1174,7 +1063,7 @@ void tst_QStandardItemModel::getSetItemData()
QModelIndex idx = model.index(0, 0, QModelIndex());
QSignalSpy modelDataChangedSpy(
- &model, SIGNAL(dataChanged(QModelIndex,QModelIndex)));
+ &model, &QStandardItemModel::dataChanged);
QVERIFY(model.setItemData(idx, roles));
QCOMPARE(modelDataChangedSpy.count(), 1);
QVERIFY(model.setItemData(idx, roles));
@@ -1186,44 +1075,44 @@ void tst_QStandardItemModel::setHeaderLabels_data()
{
QTest::addColumn<int>("rows");
QTest::addColumn<int>("columns");
- QTest::addColumn<int>("orientation");
+ QTest::addColumn<Qt::Orientation>("orientation");
QTest::addColumn<QStringList>("labels");
QTest::addColumn<QStringList>("expectedLabels");
QTest::newRow("horizontal labels")
<< 1
<< 4
- << int(Qt::Horizontal)
+ << Qt::Horizontal
<< (QStringList() << "a" << "b" << "c" << "d")
<< (QStringList() << "a" << "b" << "c" << "d");
QTest::newRow("vertical labels")
<< 4
<< 1
- << int(Qt::Vertical)
+ << Qt::Vertical
<< (QStringList() << "a" << "b" << "c" << "d")
<< (QStringList() << "a" << "b" << "c" << "d");
QTest::newRow("too few (horizontal)")
<< 1
<< 4
- << int(Qt::Horizontal)
+ << Qt::Horizontal
<< (QStringList() << "a" << "b")
<< (QStringList() << "a" << "b" << "3" << "4");
QTest::newRow("too few (vertical)")
<< 4
<< 1
- << int(Qt::Vertical)
+ << Qt::Vertical
<< (QStringList() << "a" << "b")
<< (QStringList() << "a" << "b" << "3" << "4");
QTest::newRow("too many (horizontal)")
<< 1
<< 2
- << int(Qt::Horizontal)
+ << Qt::Horizontal
<< (QStringList() << "a" << "b" << "c" << "d")
<< (QStringList() << "a" << "b" << "c" << "d");
QTest::newRow("too many (vertical)")
<< 2
<< 1
- << int(Qt::Vertical)
+ << Qt::Vertical
<< (QStringList() << "a" << "b" << "c" << "d")
<< (QStringList() << "a" << "b" << "c" << "d");
}
@@ -1232,20 +1121,18 @@ void tst_QStandardItemModel::setHeaderLabels()
{
QFETCH(int, rows);
QFETCH(int, columns);
- QFETCH(int, orientation);
+ QFETCH(Qt::Orientation, orientation);
QFETCH(QStringList, labels);
QFETCH(QStringList, expectedLabels);
QStandardItemModel model(rows, columns);
- QSignalSpy columnsInsertedSpy(
- &model, SIGNAL(columnsInserted(QModelIndex,int,int)));
- QSignalSpy rowsInsertedSpy(
- &model, SIGNAL(rowsInserted(QModelIndex,int,int)));
+ QSignalSpy columnsInsertedSpy(&model, &QAbstractItemModel::columnsInserted);
+ QSignalSpy rowsInsertedSpy(&model, &QAbstractItemModel::rowsInserted);
if (orientation == Qt::Horizontal)
model.setHorizontalHeaderLabels(labels);
else
model.setVerticalHeaderLabels(labels);
for (int i = 0; i < expectedLabels.count(); ++i)
- QCOMPARE(model.headerData(i, Qt::Orientation(orientation)).toString(), expectedLabels.at(i));
+ QCOMPARE(model.headerData(i, orientation).toString(), expectedLabels.at(i));
QCOMPARE(columnsInsertedSpy.count(),
(orientation == Qt::Vertical) ? 0 : labels.count() > columns);
QCOMPARE(rowsInsertedSpy.count(),
@@ -1256,10 +1143,8 @@ void tst_QStandardItemModel::itemDataChanged()
{
QStandardItemModel model(6, 4);
QStandardItem item;
- QSignalSpy dataChangedSpy(
- &model, SIGNAL(dataChanged(QModelIndex,QModelIndex)));
- QSignalSpy itemChangedSpy(
- &model, SIGNAL(itemChanged(QStandardItem*)));
+ QSignalSpy dataChangedSpy(&model, &QStandardItemModel::dataChanged);
+ QSignalSpy itemChangedSpy(&model, &QStandardItemModel::itemChanged);
model.setItem(0, &item);
QCOMPARE(dataChangedSpy.count(), 1);
@@ -1303,19 +1188,17 @@ void tst_QStandardItemModel::takeHeaderItem()
{
QStandardItemModel model;
// set header items
- QStandardItem *hheader = new QStandardItem();
- model.setHorizontalHeaderItem(0, hheader);
- QStandardItem *vheader = new QStandardItem();
- model.setVerticalHeaderItem(0, vheader);
+ QScopedPointer<QStandardItem> hheader(new QStandardItem());
+ model.setHorizontalHeaderItem(0, hheader.get());
+ QScopedPointer<QStandardItem> vheader(new QStandardItem());
+ model.setVerticalHeaderItem(0, vheader.get());
// take header items
- QCOMPARE(model.takeHorizontalHeaderItem(0), hheader);
- QCOMPARE(model.takeVerticalHeaderItem(0), vheader);
- QCOMPARE(hheader->model(), static_cast<QStandardItemModel*>(0));
- QCOMPARE(vheader->model(), static_cast<QStandardItemModel*>(0));
- QCOMPARE(model.takeHorizontalHeaderItem(0), static_cast<QStandardItem*>(0));
- QCOMPARE(model.takeVerticalHeaderItem(0), static_cast<QStandardItem*>(0));
- delete hheader;
- delete vheader;
+ QCOMPARE(model.takeHorizontalHeaderItem(0), hheader.get());
+ QCOMPARE(model.takeVerticalHeaderItem(0), vheader.get());
+ QCOMPARE(hheader->model(), nullptr);
+ QCOMPARE(vheader->model(), nullptr);
+ QCOMPARE(model.takeHorizontalHeaderItem(0), nullptr);
+ QCOMPARE(model.takeVerticalHeaderItem(0), nullptr);
}
void tst_QStandardItemModel::useCase1()
@@ -1325,7 +1208,7 @@ void tst_QStandardItemModel::useCase1()
QStandardItemModel model(rows, columns);
for (int i = 0; i < model.rowCount(); ++i) {
for (int j = 0; j < model.columnCount(); ++j) {
- QCOMPARE(model.item(i, j), static_cast<QStandardItem*>(0));
+ QCOMPARE(model.item(i, j), nullptr);
QStandardItem *item = new QStandardItem();
model.setItem(i, j, item);
@@ -1360,7 +1243,7 @@ static void createChildren(QStandardItemModel *model, QStandardItem *parent, int
QStandardItem *theItem = model->itemFromIndex(index);
QCOMPARE(theItem, item);
QStandardItem *theParent = model->itemFromIndex(parentIndex);
- QCOMPARE(theParent, (level == 0) ? (QStandardItem*)0 : parent);
+ QCOMPARE(theParent, (level == 0) ? static_cast<QStandardItem *>(nullptr) : parent);
}
{
@@ -1381,7 +1264,7 @@ void tst_QStandardItemModel::useCase2()
void tst_QStandardItemModel::useCase3()
{
// create the tree structure first
- QStandardItem *childItem = 0;
+ QStandardItem *childItem = nullptr;
for (int i = 0; i < 100; ++i) {
QStandardItem *item = new QStandardItem(QStringLiteral("item ") + QString::number(i));
if (childItem)
@@ -1394,7 +1277,7 @@ void tst_QStandardItemModel::useCase3()
model.appendRow(childItem);
// make sure each item has the correct model and parent
- QStandardItem *parentItem = 0;
+ QStandardItem *parentItem = nullptr;
while (childItem) {
QCOMPARE(childItem->model(), &model);
QCOMPARE(childItem->parent(), parentItem);
@@ -1405,10 +1288,10 @@ void tst_QStandardItemModel::useCase3()
// take the item, make sure model is set to 0, but that parents are the same
childItem = model.takeItem(0);
{
- parentItem = 0;
+ parentItem = nullptr;
QStandardItem *item = childItem;
while (item) {
- QCOMPARE(item->model(), static_cast<QStandardItemModel*>(0));
+ QCOMPARE(item->model(), nullptr);
QCOMPARE(item->parent(), parentItem);
parentItem = item;
item = item->child(0);
@@ -1423,7 +1306,7 @@ void tst_QStandardItemModel::setNullChild()
model.setColumnCount(2);
createChildren(&model, model.invisibleRootItem(), 0);
QStandardItem *item = model.item(0);
- QSignalSpy spy(&model, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)));
+ QSignalSpy spy(&model, &QAbstractItemModel::dataChanged);
item->setChild(0, nullptr);
QCOMPARE(item->child(0), nullptr);
QCOMPARE(spy.count(), 1);
@@ -1435,7 +1318,7 @@ void tst_QStandardItemModel::deleteChild()
model.setColumnCount(2);
createChildren(&model, model.invisibleRootItem(), 0);
QStandardItem *item = model.item(0);
- QSignalSpy spy(&model, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)));
+ QSignalSpy spy(&model, &QAbstractItemModel::dataChanged);
delete item->child(0);
QCOMPARE(item->child(0), nullptr);
QCOMPARE(spy.count(), 1);
@@ -1470,7 +1353,7 @@ bool tst_QStandardItemModel::compareItems(QStandardItem *item1, QStandardItem *i
return true;
if (!item1 || !item2)
return false;
- if (item1->text() != item2->text()){
+ if (item1->text() != item2->text()) {
qDebug() << item1->text() << item2->text();
return false;
}
@@ -1482,39 +1365,36 @@ bool tst_QStandardItemModel::compareItems(QStandardItem *item1, QStandardItem *i
// qDebug() << "ColumnCount" << item1->text() << item1->columnCount() << item2->columnCount();
return false;
}
- for (int row = 0; row < item1->columnCount(); row++)
+ for (int row = 0; row < item1->columnCount(); row++) {
for (int col = 0; col < item1->columnCount(); col++) {
-
- if (!compareItems(item1->child(row, col), item2->child(row, col)))
- return false;
+ if (!compareItems(item1->child(row, col), item2->child(row, col)))
+ return false;
+ }
}
return true;
}
static QStandardItem *itemFromText(QStandardItem *parent, const QString &text)
{
- QStandardItem *item = 0;
- for(int i = 0; i < parent->columnCount(); i++)
- for(int j = 0; j < parent->rowCount(); j++) {
-
- QStandardItem *child = parent->child(j, i);
-
- if(!child)
- continue;
-
- if (child->text() == text) {
- if (item) {
- return 0;
+ QStandardItem *item = nullptr;
+ for (int i = 0; i < parent->columnCount(); i++) {
+ for (int j = 0; j < parent->rowCount(); j++) {
+ QStandardItem *child = parent->child(j, i);
+ if (!child)
+ continue;
+
+ if (child->text() == text) {
+ if (item)
+ return nullptr;
+ item = child;
}
- item = child;
- }
- QStandardItem *candidate = itemFromText(child, text);
- if(candidate) {
- if (item) {
- return 0;
+ QStandardItem *candidate = itemFromText(child, text);
+ if (candidate) {
+ if (item)
+ return nullptr;
+ item = candidate;
}
- item = candidate;
}
}
return item;
@@ -1811,5 +1691,26 @@ void tst_QStandardItemModel::taskQTBUG_45114_setItemData()
QVERIFY(!itemRoles.keys().contains(Qt::UserRole + 3));
}
+void tst_QStandardItemModel::setItemPersistentIndex()
+{
+ QPersistentModelIndex persistentIndex;
+ // setItem on an already existing item should not destroy the persistent index
+ QStandardItemModel m;
+ persistentIndex = m.index(0, 0);
+ QVERIFY(!persistentIndex.isValid());
+
+ m.setItem(0, 0, new QStandardItem);
+ persistentIndex = m.index(0, 0);
+ QVERIFY(persistentIndex.isValid());
+ QCOMPARE(persistentIndex.row(), 0);
+ QCOMPARE(persistentIndex.column(), 0);
+
+ m.setItem(0, 0, new QStandardItem);
+ QVERIFY(persistentIndex.isValid());
+
+ m.setItem(0, 0, nullptr);
+ QVERIFY(!persistentIndex.isValid());
+}
+
QTEST_MAIN(tst_QStandardItemModel)
#include "tst_qstandarditemmodel.moc"
diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
index 5ee25677bf..a7881b6983 100644
--- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
+++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
@@ -506,29 +506,67 @@ void tst_QGuiApplication::keyboardModifiers()
window->close();
}
+/*
+ Compare actual against expected but ignore unset roles.
+
+ Comparing palettes via operator== will compare all roles.
+*/
+static bool palettesMatch(const QPalette &actual, const QPalette &expected)
+{
+ if (actual.resolve() != expected.resolve())
+ return false;
+
+ for (int i = 0; i < QPalette::NColorGroups; i++) {
+ for (int j = 0; j < QPalette::NColorRoles; j++) {
+ const auto g = QPalette::ColorGroup(i);
+ const auto r = QPalette::ColorRole(j);
+ if (expected.isBrushSet(g, r)) {
+ if (actual.brush(g, r) != expected.brush(g, r))
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
void tst_QGuiApplication::palette()
{
+ // Getting the palette before application construction should work
+ QPalette paletteBeforeAppConstruction = QGuiApplication::palette();
+ // And should be reflected in the default constructed palette
+ QCOMPARE(paletteBeforeAppConstruction, QPalette());
+
int argc = 1;
char *argv[] = { const_cast<char*>("tst_qguiapplication") };
QGuiApplication app(argc, argv);
+
+ // The same should be true after application construction
+ QCOMPARE(QGuiApplication::palette(), QPalette());
+
+ // The default application palette is not resolved
+ QVERIFY(!QGuiApplication::palette().resolve());
+
QSignalSpy signalSpy(&app, SIGNAL(paletteChanged(QPalette)));
QPalette oldPalette = QGuiApplication::palette();
QPalette newPalette = QPalette(Qt::red);
QGuiApplication::setPalette(newPalette);
- QCOMPARE(QGuiApplication::palette(), newPalette);
+ QVERIFY(palettesMatch(QGuiApplication::palette(), newPalette));
QCOMPARE(signalSpy.count(), 1);
- QCOMPARE(signalSpy.at(0).at(0), QVariant(newPalette));
+ QVERIFY(palettesMatch(signalSpy.at(0).at(0).value<QPalette>(), newPalette));
+ QCOMPARE(QGuiApplication::palette(), QPalette());
QGuiApplication::setPalette(oldPalette);
- QCOMPARE(QGuiApplication::palette(), oldPalette);
+ QVERIFY(palettesMatch(QGuiApplication::palette(), oldPalette));
QCOMPARE(signalSpy.count(), 2);
- QCOMPARE(signalSpy.at(1).at(0), QVariant(oldPalette));
+ QVERIFY(palettesMatch(signalSpy.at(1).at(0).value<QPalette>(), oldPalette));
+ QCOMPARE(QGuiApplication::palette(), QPalette());
QGuiApplication::setPalette(oldPalette);
- QCOMPARE(QGuiApplication::palette(), oldPalette);
+ QVERIFY(palettesMatch(QGuiApplication::palette(), oldPalette));
QCOMPARE(signalSpy.count(), 2);
+ QCOMPARE(QGuiApplication::palette(), QPalette());
}
void tst_QGuiApplication::font()
@@ -1073,6 +1111,9 @@ void tst_QGuiApplication::testSetPaletteAttribute()
QGuiApplication::setPalette(palette);
QVERIFY(QCoreApplication::testAttribute(Qt::AA_SetPalette));
+
+ QGuiApplication::setPalette(QPalette());
+ QVERIFY(!QCoreApplication::testAttribute(Qt::AA_SetPalette));
}
// Test that static functions do not crash if there is no application instance.
diff --git a/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp b/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp
index 3ce65a6785..81f0183728 100644
--- a/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp
+++ b/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp
@@ -193,9 +193,14 @@ template<> struct TestValueFactory<QMetaType::QTextLength> {
template<> struct TestValueFactory<QMetaType::QTextFormat> {
static QTextFormat *create() { return new QTextFormat(QTextFormat::FrameFormat); }
};
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
template<> struct TestValueFactory<QMetaType::QMatrix> {
static QMatrix *create() { return new QMatrix(10, 20, 30, 40, 50, 60); }
};
+QT_WARNING_POP
+#endif
template<> struct TestValueFactory<QMetaType::QTransform> {
static QTransform *create() { return new QTransform(10, 20, 30, 40, 50, 60); }
};
diff --git a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp
index 0b9fc3c9ae..8b301c145a 100644
--- a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp
+++ b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp
@@ -402,6 +402,9 @@ void tst_QGuiVariant::toString()
QCOMPARE( str, result );
}
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
void tst_QGuiVariant::matrix()
{
QVariant variant;
@@ -414,6 +417,8 @@ void tst_QGuiVariant::matrix()
QVERIFY(mmatrix);
QMetaType::destroy(QVariant::Matrix, mmatrix);
}
+QT_WARNING_POP
+#endif
void tst_QGuiVariant::matrix4x4()
{
diff --git a/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp b/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp
index 8e6ca486d5..758aeb42b9 100644
--- a/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp
+++ b/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp
@@ -42,6 +42,19 @@ class TstWidget;
class TstDialog;
QT_FORWARD_DECLARE_CLASS(QPushButton)
+class TestButton : public QPushButton
+{
+public:
+ TestButton(const QString &title, QWidget *parent = nullptr)
+ : QPushButton(title, parent)
+ {}
+protected:
+ bool hitButton(const QPoint &pos) const override
+ {
+ return rect().contains(pos);
+ }
+};
+
class tst_qmouseevent_modal : public QObject
{
Q_OBJECT
@@ -63,7 +76,7 @@ public:
public slots:
void buttonPressed();
public:
- QPushButton *pb;
+ TestButton *pb;
TstDialog *d;
};
@@ -135,7 +148,7 @@ void tst_qmouseevent_modal::mousePressRelease()
TstWidget::TstWidget()
{
- pb = new QPushButton( "Press me", this );
+ pb = new TestButton( "Press me", this );
pb->setObjectName("testbutton");
QSize s = pb->sizeHint();
pb->setGeometry( 5, 5, s.width(), s.height() );
diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
index 60f89fcb4e..34de756ab5 100644
--- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
+++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
@@ -1031,6 +1031,23 @@ public:
Qt::MouseButtons buttonStateInGeneratedMove;
};
+static void simulateMouseClick(QWindow *target, const QPointF &local, const QPointF &global)
+{
+ QWindowSystemInterface::handleMouseEvent(target, local, global,
+ {}, Qt::LeftButton, QEvent::MouseButtonPress);
+ QWindowSystemInterface::handleMouseEvent(target, local, global,
+ Qt::LeftButton, Qt::LeftButton, QEvent::MouseButtonRelease);
+}
+
+static void simulateMouseClick(QWindow *target, ulong &timeStamp,
+ const QPointF &local, const QPointF &global)
+{
+ QWindowSystemInterface::handleMouseEvent(target, timeStamp++, local, global,
+ {}, Qt::LeftButton, QEvent::MouseButtonPress);
+ QWindowSystemInterface::handleMouseEvent(target, timeStamp++, local, global,
+ Qt::LeftButton, Qt::LeftButton, QEvent::MouseButtonRelease);
+}
+
void tst_QWindow::testInputEvents()
{
InputTestWindow window;
@@ -1072,15 +1089,13 @@ void tst_QWindow::testInputEvents()
window.mousePressButton = window.mouseReleaseButton = 0;
const QPointF nonWindowGlobal(window.geometry().topRight() + QPoint(200, 50)); // not inside the window
const QPointF deviceNonWindowGlobal = QHighDpi::toNativePixels(nonWindowGlobal, window.screen());
- QWindowSystemInterface::handleMouseEvent(nullptr, deviceNonWindowGlobal, deviceNonWindowGlobal, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(nullptr, deviceNonWindowGlobal, deviceNonWindowGlobal, Qt::NoButton);
+ simulateMouseClick(nullptr, deviceNonWindowGlobal, deviceNonWindowGlobal);
QCoreApplication::processEvents();
QCOMPARE(window.mousePressButton, 0);
QCOMPARE(window.mouseReleaseButton, 0);
const QPointF windowGlobal = window.mapToGlobal(local.toPoint());
const QPointF deviceWindowGlobal = QHighDpi::toNativePixels(windowGlobal, window.screen());
- QWindowSystemInterface::handleMouseEvent(nullptr, deviceWindowGlobal, deviceWindowGlobal, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(nullptr, deviceWindowGlobal, deviceWindowGlobal, Qt::NoButton);
+ simulateMouseClick(nullptr, deviceWindowGlobal, deviceWindowGlobal);
QCoreApplication::processEvents();
QCOMPARE(window.mousePressButton, int(Qt::LeftButton));
QCOMPARE(window.mouseReleaseButton, int(Qt::LeftButton));
@@ -1204,8 +1219,7 @@ void tst_QWindow::mouseToTouchTranslation()
window.show();
QVERIFY(QTest::qWaitForWindowExposed(&window));
- QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::NoButton);
+ QTest::mouseClick(&window, Qt::LeftButton, {}, QPoint(10, 10));
QCoreApplication::processEvents();
QCoreApplication::setAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents, false);
@@ -1217,8 +1231,7 @@ void tst_QWindow::mouseToTouchTranslation()
window.ignoreMouse = false;
- QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::NoButton);
+ QTest::mouseClick(&window, Qt::LeftButton, {}, QPoint(10, 10));
QCoreApplication::processEvents();
QCoreApplication::setAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents, false);
@@ -1229,8 +1242,7 @@ void tst_QWindow::mouseToTouchTranslation()
window.ignoreMouse = true;
- QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::NoButton);
+ QTest::mouseClick(&window, Qt::LeftButton, {}, QPoint(10, 10));
QCoreApplication::processEvents();
// touch event synthesis disabled
@@ -1255,8 +1267,7 @@ void tst_QWindow::mouseToTouchLoop()
window.show();
QVERIFY(QTest::qWaitForWindowExposed(&window));
- QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, QPoint(10, 10), window.mapToGlobal(QPoint(10, 10)), Qt::NoButton);
+ QTest::mouseClick(&window, Qt::LeftButton, {}, QPoint(10, 10));
QCoreApplication::processEvents();
QCoreApplication::setAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents, false);
@@ -1551,8 +1562,8 @@ void tst_QWindow::mouseEventSequence()
ulong timestamp = 0;
QPointF local(12, 34);
const QPointF deviceLocal = QHighDpi::toNativePixels(local, &window);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, deviceLocal, deviceLocal, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, deviceLocal, deviceLocal, Qt::NoButton);
+
+ simulateMouseClick(&window, timestamp, deviceLocal, deviceLocal);
QCoreApplication::processEvents();
QCOMPARE(window.mousePressedCount, 1);
QCOMPARE(window.mouseReleasedCount, 1);
@@ -1564,10 +1575,8 @@ void tst_QWindow::mouseEventSequence()
// A double click must result in press, release, press, doubleclick, release.
// Check that no unexpected event suppression occurs and that the order is correct.
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ simulateMouseClick(&window, timestamp, local, local);
+ simulateMouseClick(&window, timestamp, local, local);
QCoreApplication::processEvents();
QCOMPARE(window.mousePressedCount, 2);
QCOMPARE(window.mouseReleasedCount, 2);
@@ -1578,12 +1587,9 @@ void tst_QWindow::mouseEventSequence()
window.resetCounters();
// Triple click = double + single click
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ simulateMouseClick(&window, timestamp, local, local);
+ simulateMouseClick(&window, timestamp, local, local);
+ simulateMouseClick(&window, timestamp, local, local);
QCoreApplication::processEvents();
QCOMPARE(window.mousePressedCount, 3);
QCOMPARE(window.mouseReleasedCount, 3);
@@ -1594,14 +1600,10 @@ void tst_QWindow::mouseEventSequence()
window.resetCounters();
// Two double clicks.
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ simulateMouseClick(&window, timestamp, local, local);
+ simulateMouseClick(&window, timestamp, local, local);
+ simulateMouseClick(&window, timestamp, local, local);
+ simulateMouseClick(&window, timestamp, local, local);
QCoreApplication::processEvents();
QCOMPARE(window.mousePressedCount, 4);
QCOMPARE(window.mouseReleasedCount, 4);
@@ -1612,17 +1614,13 @@ void tst_QWindow::mouseEventSequence()
window.resetCounters();
// Four clicks, none of which qualifies as a double click.
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ simulateMouseClick(&window, timestamp, local, local);
timestamp += doubleClickInterval;
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ simulateMouseClick(&window, timestamp, local, local);
timestamp += doubleClickInterval;
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ simulateMouseClick(&window, timestamp, local, local);
timestamp += doubleClickInterval;
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, timestamp++, local, local, Qt::NoButton);
+ simulateMouseClick(&window, timestamp, local, local);
timestamp += doubleClickInterval;
QCoreApplication::processEvents();
QCOMPARE(window.mousePressedCount, 4);
@@ -1674,10 +1672,13 @@ void tst_QWindow::inputReentrancy()
// Queue three events.
QPointF local(12, 34);
- QWindowSystemInterface::handleMouseEvent(&window, local, local, Qt::LeftButton);
+ QWindowSystemInterface::handleMouseEvent(&window, local, local, {},
+ Qt::LeftButton, QEvent::MouseButtonPress);
local += QPointF(2, 2);
- QWindowSystemInterface::handleMouseEvent(&window, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&window, local, local, Qt::NoButton);
+ QWindowSystemInterface::handleMouseEvent(&window, local, local,
+ Qt::LeftButton, Qt::LeftButton, QEvent::MouseMove);
+ QWindowSystemInterface::handleMouseEvent(&window, local, local, Qt::LeftButton,
+ Qt::LeftButton, QEvent::MouseButtonRelease);
// Process them. However, the event handler for the press will also call
// processEvents() so the move and release will be delivered before returning
// from mousePressEvent(). The point is that no events should get lost.
@@ -1747,12 +1748,14 @@ void tst_QWindow::tabletEvents()
const QPoint global = window.mapToGlobal(local);
const QPoint deviceLocal = QHighDpi::toNativeLocalPosition(local, &window);
const QPoint deviceGlobal = QHighDpi::toNativePixels(global, window.screen());
- QWindowSystemInterface::handleTabletEvent(&window, true, deviceLocal, deviceGlobal, 1, 2, 0.5, 1, 2, 0.1, 0, 0, 0);
+ QWindowSystemInterface::handleTabletEvent(&window, deviceLocal, deviceGlobal,
+ 1, 2, Qt::LeftButton, 0.5, 1, 2, 0.1, 0, 0, 0);
QCoreApplication::processEvents();
QTRY_VERIFY(window.eventType == QEvent::TabletPress);
QTRY_COMPARE(window.eventGlobal.toPoint(), global);
QTRY_COMPARE(window.eventLocal.toPoint(), local);
- QWindowSystemInterface::handleTabletEvent(&window, false, deviceLocal, deviceGlobal, 1, 2, 0.5, 1, 2, 0.1, 0, 0, 0);
+ QWindowSystemInterface::handleTabletEvent(&window, deviceLocal, deviceGlobal, 1, 2,
+ {}, 0.5, 1, 2, 0.1, 0, 0, 0);
QCoreApplication::processEvents();
QTRY_COMPARE(window.eventType, QEvent::TabletRelease);
@@ -1788,11 +1791,9 @@ void tst_QWindow::windowModality_QTBUG27039()
modalB.setModality(Qt::ApplicationModal);
modalB.show();
- QPointF local(5, 5);
- QWindowSystemInterface::handleMouseEvent(&modalA, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&modalA, local, local, Qt::NoButton);
- QWindowSystemInterface::handleMouseEvent(&modalB, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&modalB, local, local, Qt::NoButton);
+ QPoint local(5, 5);
+ QTest::mouseClick(&modalA, Qt::LeftButton, {}, local);
+ QTest::mouseClick(&modalB, Qt::LeftButton, {}, local);
QCoreApplication::processEvents();
// modal A should be blocked since it was shown first, but modal B should not be blocked
@@ -1800,8 +1801,7 @@ void tst_QWindow::windowModality_QTBUG27039()
QCOMPARE(modalA.mousePressedCount, 0);
modalB.hide();
- QWindowSystemInterface::handleMouseEvent(&modalA, local, local, Qt::LeftButton);
- QWindowSystemInterface::handleMouseEvent(&modalA, local, local, Qt::NoButton);
+ QTest::mouseClick(&modalA, Qt::LeftButton, {}, local);
QCoreApplication::processEvents();
// modal B has been hidden, modal A should be unblocked again
diff --git a/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp b/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp
index e19f76d830..3c4f2f2e75 100644
--- a/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp
+++ b/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp
@@ -3061,6 +3061,9 @@ void tst_QMatrixNxN::columnsAndRows()
QVERIFY(m1.row(3) == QVector4D(4, 8, 12, 16));
}
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
// Test converting QMatrix objects into QMatrix4x4 and then
// checking that transformations in the original perform the
// equivalent transformations in the new matrix.
@@ -3107,6 +3110,8 @@ void tst_QMatrixNxN::convertQMatrix()
QVERIFY(qFuzzyCompare(float(m5.dx()), float(m7.dx())));
QVERIFY(qFuzzyCompare(float(m5.dy()), float(m7.dy())));
}
+QT_WARNING_POP
+#endif
// Test converting QTransform objects into QMatrix4x4 and then
// checking that transformations in the original perform the
diff --git a/tests/auto/gui/painting/qbrush/tst_qbrush.cpp b/tests/auto/gui/painting/qbrush/tst_qbrush.cpp
index f35d4f330b..ac357c92db 100644
--- a/tests/auto/gui/painting/qbrush/tst_qbrush.cpp
+++ b/tests/auto/gui/painting/qbrush/tst_qbrush.cpp
@@ -341,12 +341,6 @@ void tst_QBrush::gradientPresets()
QCOMPARE(lg->stops().at(0), QGradientStop(0, QColor(QLatin1String("#ff9a9e"))));
QCOMPARE(lg->stops().at(1), QGradientStop(0.99, QColor(QLatin1String("#fad0c4"))));
QCOMPARE(lg->stops().at(2), QGradientStop(1, QColor(QLatin1String("#fad0c4"))));
-
-
- QGradient invalidPreset(QGradient::Preset(-1));
- QCOMPARE(invalidPreset.type(), QGradient::NoGradient);
- QBrush brush(invalidPreset);
- QCOMPARE(brush.style(), Qt::NoBrush);
}
void fill(QPaintDevice *pd) {
diff --git a/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp b/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp
index 531e14d25b..99fb3d3e72 100644
--- a/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp
+++ b/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp
@@ -105,37 +105,47 @@ void tst_QColorSpace::movable()
void tst_QColorSpace::namedColorSpaces_data()
{
QTest::addColumn<QColorSpace::NamedColorSpace>("namedColorSpace");
+ QTest::addColumn<bool>("isValid");
QTest::addColumn<QColorSpace::Primaries>("primariesId");
QTest::addColumn<QColorSpace::TransferFunction>("transferFunctionId");
- QTest::newRow("sRGB") << QColorSpace::SRgb
+ QTest::newRow("sRGB") << QColorSpace::SRgb << true
<< QColorSpace::Primaries::SRgb
<< QColorSpace::TransferFunction::SRgb;
- QTest::newRow("sRGB Linear") << QColorSpace::SRgbLinear
+ QTest::newRow("sRGB Linear") << QColorSpace::SRgbLinear << true
<< QColorSpace::Primaries::SRgb
<< QColorSpace::TransferFunction::Linear;
- QTest::newRow("Adobe RGB") << QColorSpace::AdobeRgb
+ QTest::newRow("Adobe RGB") << QColorSpace::AdobeRgb << true
<< QColorSpace::Primaries::AdobeRgb
<< QColorSpace::TransferFunction::Gamma;
- QTest::newRow("Display-P3") << QColorSpace::DisplayP3
+ QTest::newRow("Display-P3") << QColorSpace::DisplayP3 << true
<< QColorSpace::Primaries::DciP3D65
<< QColorSpace::TransferFunction::SRgb;
- QTest::newRow("ProPhoto RGB") << QColorSpace::ProPhotoRgb
+ QTest::newRow("ProPhoto RGB") << QColorSpace::ProPhotoRgb << true
<< QColorSpace::Primaries::ProPhotoRgb
<< QColorSpace::TransferFunction::ProPhotoRgb;
+ QTest::newRow("0") << QColorSpace::NamedColorSpace(0)
+ << false
+ << QColorSpace::Primaries::Custom
+ << QColorSpace::TransferFunction::Custom;
+ QTest::newRow("1027") << QColorSpace::NamedColorSpace(1027)
+ << false
+ << QColorSpace::Primaries::Custom
+ << QColorSpace::TransferFunction::Custom;
}
void tst_QColorSpace::namedColorSpaces()
{
QFETCH(QColorSpace::NamedColorSpace, namedColorSpace);
+ QFETCH(bool, isValid);
QFETCH(QColorSpace::Primaries, primariesId);
QFETCH(QColorSpace::TransferFunction, transferFunctionId);
+ if (!isValid)
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("QColorSpace attempted constructed from invalid QColorSpace::NamedColorSpace"));
QColorSpace colorSpace = namedColorSpace;
- QVERIFY(colorSpace.isValid());
-
- QCOMPARE(colorSpace, namedColorSpace);
+ QCOMPARE(colorSpace.isValid(), isValid);
QCOMPARE(colorSpace.primaries(), primariesId);
QCOMPARE(colorSpace.transferFunction(), transferFunctionId);
}
@@ -149,15 +159,21 @@ void tst_QColorSpace::toIccProfile_data()
void tst_QColorSpace::toIccProfile()
{
QFETCH(QColorSpace::NamedColorSpace, namedColorSpace);
+ QFETCH(bool, isValid);
QFETCH(QColorSpace::Primaries, primariesId);
QFETCH(QColorSpace::TransferFunction, transferFunctionId);
Q_UNUSED(primariesId);
Q_UNUSED(transferFunctionId);
+ if (!isValid)
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("QColorSpace attempted constructed from invalid QColorSpace::NamedColorSpace"));
QColorSpace colorSpace = namedColorSpace;
QByteArray iccProfile = colorSpace.iccProfile();
- QVERIFY(!iccProfile.isEmpty());
+ QCOMPARE(iccProfile.isEmpty(), !isValid);
+
+ if (!isValid)
+ return;
QColorSpace colorSpace2 = QColorSpace::fromIccProfile(iccProfile);
QVERIFY(colorSpace2.isValid());
@@ -397,6 +413,7 @@ void tst_QColorSpace::primaries2()
void tst_QColorSpace::invalidPrimaries()
{
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("QColorSpace attempted constructed from invalid primaries"));
QColorSpace custom(QPointF(), QPointF(), QPointF(), QPointF(), QColorSpace::TransferFunction::Linear);
QVERIFY(!custom.isValid());
}
@@ -428,8 +445,15 @@ void tst_QColorSpace::changeTransferFunction()
QColorSpace undefined;
QCOMPARE(undefined.withTransferFunction(QColorSpace::TransferFunction::Linear), undefined);
- undefined.setTransferFunction(QColorSpace::TransferFunction::SRgb);
- QCOMPARE(undefined, QColorSpace());
+
+ QColorSpace partial;
+ partial.setTransferFunction(QColorSpace::TransferFunction::SRgb);
+ QCOMPARE(partial.transferFunction(), QColorSpace::TransferFunction::SRgb);
+ QVERIFY(!partial.isValid());
+
+ partial.setPrimaries(QColorSpace::Primaries::SRgb);
+ QVERIFY(partial.isValid());
+ QCOMPARE(partial, QColorSpace(QColorSpace::SRgb));
}
void tst_QColorSpace::changePrimaries()
diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
index 6e48439944..9eb62ceab2 100644
--- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
+++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
@@ -715,7 +715,7 @@ void tst_QPainter::drawBorderPixmap()
QPainter p(&pm);
p.setTransform(QTransform(-1,0,0,-1,173.5,153.5));
qDrawBorderPixmap(&p, QRect(0,0,75,105), QMargins(39,39,39,39), src, QRect(0,0,79,79), QMargins(39,39,39,39),
- QTileRules(Qt::StretchTile,Qt::StretchTile), 0);
+ QTileRules(Qt::StretchTile,Qt::StretchTile), { });
}
#endif
@@ -1704,8 +1704,11 @@ void tst_QPainter::combinedMatrix()
QTransform ct = p.combinedTransform();
#if QT_DEPRECATED_SINCE(5, 13)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
QMatrix cm = p.combinedMatrix();
QCOMPARE(cm, ct.toAffine());
+QT_WARNING_POP
#endif
QPointF pt = QPointF(0, 0) * ct.toAffine();
@@ -1739,7 +1742,7 @@ void tst_QPainter::renderHints()
// Turn off all...
p.setRenderHints(QPainter::RenderHints(0xffffffff), false);
- QCOMPARE(p.renderHints(), QPainter::RenderHints(0));
+ QCOMPARE(p.renderHints(), QPainter::RenderHints{});
// Single set/get
p.setRenderHint(QPainter::Antialiasing);
@@ -2245,7 +2248,7 @@ void tst_QPainter::clippedPolygon()
{
QFETCH(QSize, imageSize);
QFETCH(QPainterPath, path);
- QPolygonF polygon = path.toFillPolygon();
+ QPolygonF polygon = path.toFillPolygon(QTransform());
QFETCH(QRect, clipRect);
QPainterPath clipPath;
clipPath.addRect(clipRect);
@@ -3066,7 +3069,7 @@ void tst_QPainter::fpe_steepSlopes_data()
const qreal dsin = 0.000014946676875461832484392500630665523431162000633776187896728515625;
const qreal dcos = 0.9999999998882984630910186751862056553363800048828125;
- const QTransform transform = QTransform(QMatrix(dcos, dsin, -dsin, dcos, 64, 64));
+ const QTransform transform = QTransform(dcos, dsin, -dsin, dcos, 64, 64);
const QLineF line(2, 2, 2, 6);
QTest::newRow("task 207147 aa") << transform << line << true;
@@ -4064,7 +4067,7 @@ void tst_QPainter::drawPolygon()
path.moveTo(2, 34);
path.lineTo(34, 2);
- QPolygonF poly = stroker.createStroke(path).toFillPolygon();
+ QPolygonF poly = stroker.createStroke(path).toFillPolygon(QTransform());
img.fill(0xffffffff);
QPainter p(&img);
@@ -4133,7 +4136,10 @@ void tst_QPainter::inactivePainter()
p.setClipping(true);
#if QT_DEPRECATED_SINCE(5, 13)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
p.combinedMatrix();
+QT_WARNING_POP
#endif
p.combinedTransform();
@@ -4142,7 +4148,10 @@ void tst_QPainter::inactivePainter()
p.device();
#if QT_DEPRECATED_SINCE(5, 13)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
p.deviceMatrix();
+QT_WARNING_POP
#endif
p.deviceTransform();
@@ -4168,7 +4177,10 @@ void tst_QPainter::inactivePainter()
p.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, false);
#if QT_DEPRECATED_SINCE(5, 13)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
p.resetMatrix();
+QT_WARNING_POP
#endif
p.resetTransform();
p.rotate(1);
@@ -4186,8 +4198,11 @@ void tst_QPainter::inactivePainter()
p.setWindow(QRect(10, 10, 620, 460));
#if QT_DEPRECATED_SINCE(5, 13)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
p.worldMatrix();
p.setWorldMatrix(QMatrix().translate(43, 21), true);
+QT_WARNING_POP
#endif
p.setWorldMatrixEnabled(true);
diff --git a/tests/auto/gui/painting/qpathclipper/paths.cpp b/tests/auto/gui/painting/qpathclipper/paths.cpp
index 1328befd1b..a814958394 100644
--- a/tests/auto/gui/painting/qpathclipper/paths.cpp
+++ b/tests/auto/gui/painting/qpathclipper/paths.cpp
@@ -713,9 +713,5 @@ QPainterPath Paths::bezierQuadrant()
path.closeSubpath();
}
- QMatrix m(2, 0,
- 0, 2,
- 0, 0);
-
return path;
}
diff --git a/tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp b/tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp
index 93035af7d3..01853d841a 100644
--- a/tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp
+++ b/tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp
@@ -152,9 +152,9 @@ void tst_QPathClipper::initTestCase()
for (int i = 0; i < paths.size(); ++i) {
QRectF bounds = paths[i].boundingRect();
- QMatrix m(1, 0,
- 0, 1,
- -bounds.center().x(), -bounds.center().y());
+ QTransform m(1, 0,
+ 0, 1,
+ -bounds.center().x(), -bounds.center().y());
paths[i] = m.map(paths[i]);
}
diff --git a/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp b/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp
index 9e9b0db366..3fbe16575d 100644
--- a/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp
+++ b/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp
@@ -73,12 +73,12 @@ void tst_QPdfWriter::basics()
QCOMPARE(writer.pageSize(), QPdfWriter::A5);
QCOMPARE(writer.pageSizeMM(), QSizeF(148, 210));
- writer.setPageSize(QPdfWriter::A3);
+ writer.setPageSize(QPageSize(QPageSize::A3));
QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::A3);
QCOMPARE(writer.pageSize(), QPdfWriter::A3);
QCOMPARE(writer.pageSizeMM(), QSizeF(297, 420));
- writer.setPageSizeMM(QSize(210, 297));
+ writer.setPageSize(QPageSize(QSize(210, 297), QPageSize::Millimeter));
QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::A4);
QCOMPARE(writer.pageSize(), QPdfWriter::A4);
QCOMPARE(writer.pageSizeMM(), QSizeF(210, 297));
@@ -101,9 +101,9 @@ void tst_QPdfWriter::basics()
QCOMPARE(writer.margins().right, 20.0);
QCOMPARE(writer.margins().top, 20.0);
QCOMPARE(writer.margins().bottom, 20.0);
- QPdfWriter::Margins margins = {50, 50, 50, 50};
- writer.setMargins(margins);
- QCOMPARE(writer.pageLayout().margins(), QMarginsF(50, 50, 50, 50));
+ const QMarginsF margins = {50, 50, 50, 50};
+ writer.setPageMargins(margins, QPageLayout::Millimeter);
+ QCOMPARE(writer.pageLayout().margins(), margins);
QCOMPARE(writer.pageLayout().units(), QPageLayout::Millimeter);
QCOMPARE(writer.margins().left, 50.0);
QCOMPARE(writer.margins().right, 50.0);
@@ -112,12 +112,35 @@ void tst_QPdfWriter::basics()
QCOMPARE(writer.pageLayout().fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
QCOMPARE(writer.pageLayout().paintRect(QPageLayout::Millimeter), QRectF(50, 50, 197, 110));
+
+ QByteArray metadata (
+ "<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>\n"
+ "<x:xmpmeta xmlns:x=\"adobe:ns:meta/\">\n"
+ " <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\"\n"
+ " <rdf:Description xmlns:dc=\"http://purl.org/dc/elements/1.1/\" rdf:about=\"\">\n"
+ " <dc:title>\n"
+ " <rdf:Alt>\n"
+ " <rdf:li xml:lang=\"x-default\">TITLE</rdf:li>\n"
+ " </rdf:Alt>\n"
+ " </dc:title>\n"
+ " </rdf:Description>\n"
+ " <rdf:Description xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\" rdf:about="" xmp:CreatorTool=\"OUR_OWN_XMP\" xmp:CreateDate=\"2019-12-16T00:00:00+01:00\" xmp:ModifyDate=\"2019-12-16T00:00:00+01:00\"/>\n"
+ " <rdf:Description xmlns:pdf=\"http://ns.adobe.com/pdf/1.3/\" rdf:about="" pdf:Producer=\"MetaType Info Producer\"/>\n"
+ " <rdf:Description xmlns:pdfaid=\"http://www.aiim.org/pdfa/ns/id/\" rdf:about=\"THI IS ALL ABOUT\" pdfaid:part=\"1\" pdfaid:conformance=\"B\"/>\n"
+ " </rdf:RDF>\n"
+ "</x:xmpmeta>\n"
+ "<?xpacket end='w'?>\n"
+ );
+
+ QCOMPARE(writer.documentXmpMetadata(), QByteArray());
+ writer.setDocumentXmpMetadata(metadata);
+ QCOMPARE(writer.documentXmpMetadata(), metadata);
}
// Test the old page metrics methods, see also QPrinter tests for the same.
void tst_QPdfWriter::testPageMetrics_data()
{
- QTest::addColumn<int>("pageSize");
+ QTest::addColumn<QPageSize::PageSizeId>("pageSizeId");
QTest::addColumn<qreal>("widthMMf");
QTest::addColumn<qreal>("heightMMf");
QTest::addColumn<bool>("setMargins");
@@ -126,17 +149,24 @@ void tst_QPdfWriter::testPageMetrics_data()
QTest::addColumn<qreal>("topMMf");
QTest::addColumn<qreal>("bottomMMf");
- QTest::newRow("A4") << int(QPdfWriter::A4) << 210.0 << 297.0 << false << 3.53 << 3.53 << 3.53 << 3.53;
- QTest::newRow("A4 Margins") << int(QPdfWriter::A4) << 210.0 << 297.0 << true << 20.0 << 30.0 << 40.0 << 50.0;
- QTest::newRow("Portrait") << -1 << 345.0 << 678.0 << false << 3.53 << 3.53 << 3.53 << 3.53;
- QTest::newRow("Portrait Margins") << -1 << 345.0 << 678.0 << true << 20.0 << 30.0 << 40.0 << 50.0;
- QTest::newRow("Landscape") << -1 << 678.0 << 345.0 << false << 3.53 << 3.53 << 3.53 << 3.53;
- QTest::newRow("Landscape Margins") << -1 << 678.0 << 345.0 << true << 20.0 << 30.0 << 40.0 << 50.0;
+ QTest::newRow("A4") << QPageSize::A4 << 210.0 << 297.0 << false
+ << 3.53 << 3.53 << 3.53 << 3.53;
+ QTest::newRow("A4 Margins") << QPageSize::A4 << 210.0 << 297.0 << true
+ << 20.0 << 30.0 << 40.0 << 50.0;
+
+ QTest::newRow("Portrait") << QPageSize::Custom << 345.0 << 678.0 << false
+ << 3.53 << 3.53 << 3.53 << 3.53;
+ QTest::newRow("Portrait Margins") << QPageSize::Custom << 345.0 << 678.0 << true
+ << 20.0 << 30.0 << 40.0 << 50.0;
+ QTest::newRow("Landscape") << QPageSize::Custom << 678.0 << 345.0 << false
+ << 3.53 << 3.53 << 3.53 << 3.53;
+ QTest::newRow("Landscape Margins") << QPageSize::Custom << 678.0 << 345.0 << true
+ << 20.0 << 30.0 << 40.0 << 50.0;
}
void tst_QPdfWriter::testPageMetrics()
{
- QFETCH(int, pageSize);
+ QFETCH(QPageSize::PageSizeId, pageSizeId);
QFETCH(qreal, widthMMf);
QFETCH(qreal, heightMMf);
QFETCH(bool, setMargins);
@@ -161,17 +191,13 @@ void tst_QPdfWriter::testPageMetrics()
QCOMPARE(writer.margins().bottom, bottomMMf);
}
-
// Set the given size, in Portrait mode
- if (pageSize < 0) {
- writer.setPageSize(QPageSize(sizeMMf, QPageSize::Millimeter));
- QCOMPARE(writer.pageSize(), QPdfWriter::Custom);
- QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::Custom);
- } else {
- writer.setPageSize(QPdfWriter::PageSize(pageSize));
- QCOMPARE(writer.pageSize(), QPdfWriter::PageSize(pageSize));
- QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::PageSizeId(pageSize));
- }
+ const QPageSize pageSize = pageSizeId == QPageSize::Custom
+ ? QPageSize(sizeMMf, QPageSize::Millimeter) : QPageSize(pageSizeId);
+ writer.setPageSize(pageSize);
+ QCOMPARE(writer.pageLayout().pageSize().id(), pageSizeId);
+ QCOMPARE(int(writer.pageSize()), int(pageSizeId));
+
QCOMPARE(writer.pageLayout().orientation(), QPageLayout::Portrait);
QCOMPARE(writer.margins().left, leftMMf);
QCOMPARE(writer.margins().right, rightMMf);
@@ -187,13 +213,8 @@ void tst_QPdfWriter::testPageMetrics()
// Now switch to Landscape mode, size should be unchanged, but rect and metrics should change
writer.setPageOrientation(QPageLayout::Landscape);
- if (pageSize < 0) {
- QCOMPARE(writer.pageSize(), QPdfWriter::Custom);
- QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::Custom);
- } else {
- QCOMPARE(writer.pageSize(), QPdfWriter::PageSize(pageSize));
- QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::PageSizeId(pageSize));
- }
+ QCOMPARE(writer.pageLayout().pageSize().id(), pageSizeId);
+ QCOMPARE(int(writer.pageSize()), int(pageSizeId));
QCOMPARE(writer.pageLayout().orientation(), QPageLayout::Landscape);
QCOMPARE(writer.margins().left, leftMMf);
QCOMPARE(writer.margins().right, rightMMf);
@@ -215,15 +236,9 @@ void tst_QPdfWriter::testPageMetrics()
// Now while in Landscape mode, set the size again, results should be the same
- if (pageSize < 0) {
- writer.setPageSize(QPageSize(sizeMMf, QPageSize::Millimeter));
- QCOMPARE(writer.pageSize(), QPdfWriter::Custom);
- QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::Custom);
- } else {
- writer.setPageSize(QPdfWriter::PageSize(pageSize));
- QCOMPARE(writer.pageSize(), QPdfWriter::PageSize(pageSize));
- QCOMPARE(writer.pageLayout().pageSize().id(), QPageSize::PageSizeId(pageSize));
- }
+ writer.setPageSize(pageSize);
+ QCOMPARE(writer.pageLayout().pageSize().id(), pageSizeId);
+ QCOMPARE(int(writer.pageSize()), int(pageSizeId));
QCOMPARE(writer.pageLayout().orientation(), QPageLayout::Landscape);
QCOMPARE(writer.margins().left, leftMMf);
QCOMPARE(writer.margins().right, rightMMf);
diff --git a/tests/auto/gui/painting/qtransform/tst_qtransform.cpp b/tests/auto/gui/painting/qtransform/tst_qtransform.cpp
index f9366c9227..78638a7518 100644
--- a/tests/auto/gui/painting/qtransform/tst_qtransform.cpp
+++ b/tests/auto/gui/painting/qtransform/tst_qtransform.cpp
@@ -331,17 +331,13 @@ void tst_QTransform::mapToPolygon()
void tst_QTransform::qhash()
{
- QMatrix m1;
- m1.shear(3.0, 2.0);
- m1.rotate(44);
+ QTransform t1;
+ t1.shear(3.0, 2.0);
+ t1.rotate(44);
- QMatrix m2 = m1;
-
- QTransform t1(m1);
- QTransform t2(m2);
+ QTransform t2 = t1;
// not really much to test here, so just the bare minimum:
- QCOMPARE(qHash(m1), qHash(m2));
QCOMPARE(qHash(t1), qHash(t2));
}
@@ -376,6 +372,9 @@ void tst_QTransform::scale()
QVERIFY( QTransform::fromScale( 1, 1 ) == QTransform());
}
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
void tst_QTransform::matrix()
{
QMatrix mat1;
@@ -414,7 +413,7 @@ void tst_QTransform::matrix()
QRect rect(43, 70, 200, 200);
QPoint pt(43, 66);
- QCOMPARE(tranInv.map(pt), matInv.map(pt));
+ QCOMPARE(tranInv.mapRect(rect), matInv.mapRect(rect));
QCOMPARE(tranInv.map(pt), matInv.map(pt));
QPainterPath path;
@@ -431,6 +430,8 @@ void tst_QTransform::testOffset()
const QMatrix &aff = trans.toAffine();
QCOMPARE((void*)(&aff), (void*)(&trans));
}
+QT_WARNING_POP
+#endif
void tst_QTransform::types()
{
diff --git a/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp b/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp
index da88a868f3..281639c27a 100644
--- a/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp
+++ b/tests/auto/gui/painting/qwmatrix/tst_qwmatrix.cpp
@@ -32,6 +32,9 @@
#include <qmath.h>
#include <qpolygon.h>
+#if QT_DEPRECATED_SINCE(5, 15)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
class tst_QWMatrix : public QObject
{
@@ -324,5 +327,8 @@ void tst_QWMatrix::mapPolygon()
}
}
+QT_WARNING_POP
+#endif
+
QTEST_APPLESS_MAIN(tst_QWMatrix)
#include "tst_qwmatrix.moc"
diff --git a/tests/auto/gui/rhi/qrhi/data/compile.bat b/tests/auto/gui/rhi/qrhi/data/buildshaders.bat
index 5b8a77b833..5b8a77b833 100644
--- a/tests/auto/gui/rhi/qrhi/data/compile.bat
+++ b/tests/auto/gui/rhi/qrhi/data/buildshaders.bat
diff --git a/tests/auto/gui/rhi/qrhi/data/simple.frag.qsb b/tests/auto/gui/rhi/qrhi/data/simple.frag.qsb
index 264b71ec0f..c235108d39 100644
--- a/tests/auto/gui/rhi/qrhi/data/simple.frag.qsb
+++ b/tests/auto/gui/rhi/qrhi/data/simple.frag.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/simple.vert.qsb b/tests/auto/gui/rhi/qrhi/data/simple.vert.qsb
index 59080b60c6..68cfeb8f1d 100644
--- a/tests/auto/gui/rhi/qrhi/data/simple.vert.qsb
+++ b/tests/auto/gui/rhi/qrhi/data/simple.vert.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/simpletextured.frag.qsb b/tests/auto/gui/rhi/qrhi/data/simpletextured.frag.qsb
index f302702aa9..397961c238 100644
--- a/tests/auto/gui/rhi/qrhi/data/simpletextured.frag.qsb
+++ b/tests/auto/gui/rhi/qrhi/data/simpletextured.frag.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/simpletextured.vert.qsb b/tests/auto/gui/rhi/qrhi/data/simpletextured.vert.qsb
index e4f12bfb9e..a9067949a5 100644
--- a/tests/auto/gui/rhi/qrhi/data/simpletextured.vert.qsb
+++ b/tests/auto/gui/rhi/qrhi/data/simpletextured.vert.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/textured.frag.qsb b/tests/auto/gui/rhi/qrhi/data/textured.frag.qsb
index 0a039137ec..018d732e2f 100644
--- a/tests/auto/gui/rhi/qrhi/data/textured.frag.qsb
+++ b/tests/auto/gui/rhi/qrhi/data/textured.frag.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/textured.vert.qsb b/tests/auto/gui/rhi/qrhi/data/textured.vert.qsb
index 7853f77943..44454d226e 100644
--- a/tests/auto/gui/rhi/qrhi/data/textured.vert.qsb
+++ b/tests/auto/gui/rhi/qrhi/data/textured.vert.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp b/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp
index 533d6b17b1..191260fd41 100644
--- a/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp
+++ b/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp
@@ -52,7 +52,7 @@
# define TST_D3D11
#endif
-#ifdef Q_OS_DARWIN
+#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
# include <QtGui/private/qrhimetal_p.h>
# define TST_MTL
#endif
@@ -73,6 +73,8 @@ private slots:
void create();
void nativeHandles_data();
void nativeHandles();
+ void nativeTexture_data();
+ void nativeTexture();
void resourceUpdateBatchBuffer_data();
void resourceUpdateBatchBuffer();
void resourceUpdateBatchRGBATextureUpload_data();
@@ -91,6 +93,10 @@ private slots:
void renderToTextureTexturedQuadAndUniformBuffer();
void renderToWindowSimple_data();
void renderToWindowSimple();
+ void srbLayoutCompatibility_data();
+ void srbLayoutCompatibility();
+ void renderPassDescriptorCompatibility_data();
+ void renderPassDescriptorCompatibility();
private:
struct {
@@ -375,56 +381,6 @@ void tst_QRhi::nativeHandles()
}
}
- // QRhiTexture::nativeHandles()
- {
- QScopedPointer<QRhiTexture> tex(rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 256)));
- QVERIFY(tex->build());
-
- const QRhiNativeHandles *texHandles = tex->nativeHandles();
- QVERIFY(texHandles);
-
- switch (impl) {
- case QRhi::Null:
- break;
-#ifdef TST_VK
- case QRhi::Vulkan:
- {
- const QRhiVulkanTextureNativeHandles *vkHandles = static_cast<const QRhiVulkanTextureNativeHandles *>(texHandles);
- QVERIFY(vkHandles->image);
- QVERIFY(vkHandles->layout >= 1); // VK_IMAGE_LAYOUT_GENERAL
- QVERIFY(vkHandles->layout <= 8); // VK_IMAGE_LAYOUT_PREINITIALIZED
- }
- break;
-#endif
-#ifdef TST_GL
- case QRhi::OpenGLES2:
- {
- const QRhiGles2TextureNativeHandles *glHandles = static_cast<const QRhiGles2TextureNativeHandles *>(texHandles);
- QVERIFY(glHandles->texture);
- }
- break;
-#endif
-#ifdef TST_D3D11
- case QRhi::D3D11:
- {
- const QRhiD3D11TextureNativeHandles *d3dHandles = static_cast<const QRhiD3D11TextureNativeHandles *>(texHandles);
- QVERIFY(d3dHandles->texture);
- }
- break;
-#endif
-#ifdef TST_MTL
- case QRhi::Metal:
- {
- const QRhiMetalTextureNativeHandles *mtlHandles = static_cast<const QRhiMetalTextureNativeHandles *>(texHandles);
- QVERIFY(mtlHandles->texture);
- }
- break;
-#endif
- default:
- Q_ASSERT(false);
- }
- }
-
// QRhiCommandBuffer::nativeHandles()
{
QRhiCommandBuffer *cb = nullptr;
@@ -524,6 +480,71 @@ void tst_QRhi::nativeHandles()
}
}
+void tst_QRhi::nativeTexture_data()
+{
+ rhiTestData();
+}
+
+void tst_QRhi::nativeTexture()
+{
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing native texture");
+
+ QScopedPointer<QRhiTexture> tex(rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 256)));
+ QVERIFY(tex->build());
+
+ const QRhiTexture::NativeTexture nativeTex = tex->nativeTexture();
+
+ switch (impl) {
+ case QRhi::Null:
+ break;
+#ifdef TST_VK
+ case QRhi::Vulkan:
+ {
+ auto *image = static_cast<const VkImage *>(nativeTex.object);
+ QVERIFY(image);
+ QVERIFY(*image);
+ QVERIFY(nativeTex.layout >= 1); // VK_IMAGE_LAYOUT_GENERAL
+ QVERIFY(nativeTex.layout <= 8); // VK_IMAGE_LAYOUT_PREINITIALIZED
+ }
+ break;
+#endif
+#ifdef TST_GL
+ case QRhi::OpenGLES2:
+ {
+ auto *textureId = static_cast<const uint *>(nativeTex.object);
+ QVERIFY(textureId);
+ QVERIFY(*textureId);
+ }
+ break;
+#endif
+#ifdef TST_D3D11
+ case QRhi::D3D11:
+ {
+ auto *texture = static_cast<void * const *>(nativeTex.object);
+ QVERIFY(texture);
+ QVERIFY(*texture);
+ }
+ break;
+#endif
+#ifdef TST_MTL
+ case QRhi::Metal:
+ {
+ void * const * texture = (void * const *)nativeTex.object;
+ QVERIFY(texture);
+ QVERIFY(*texture);
+ }
+ break;
+#endif
+ default:
+ Q_ASSERT(false);
+ }
+}
+
static bool submitResourceUpdates(QRhi *rhi, QRhiResourceUpdateBatch *batch)
{
QRhiCommandBuffer *cb = nullptr;
@@ -1728,5 +1749,318 @@ void tst_QRhi::renderToWindowSimple()
QVERIFY(redCount < blueCount);
}
+void tst_QRhi::srbLayoutCompatibility_data()
+{
+ rhiTestData();
+}
+
+void tst_QRhi::srbLayoutCompatibility()
+{
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing texture resource updates");
+
+ QScopedPointer<QRhiTexture> texture(rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512)));
+ QVERIFY(texture->build());
+ QScopedPointer<QRhiSampler> sampler(rhi->newSampler(QRhiSampler::Nearest, QRhiSampler::Nearest, QRhiSampler::None,
+ QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge));
+ QVERIFY(sampler->build());
+ QScopedPointer<QRhiSampler> otherSampler(rhi->newSampler(QRhiSampler::Nearest, QRhiSampler::Nearest, QRhiSampler::None,
+ QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge));
+ QVERIFY(otherSampler->build());
+ QScopedPointer<QRhiBuffer> buf(rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 1024));
+ QVERIFY(buf->build());
+ QScopedPointer<QRhiBuffer> otherBuf(rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 256));
+ QVERIFY(otherBuf->build());
+
+ // empty (compatible)
+ {
+ QScopedPointer<QRhiShaderResourceBindings> srb1(rhi->newShaderResourceBindings());
+ QVERIFY(srb1->build());
+
+ QScopedPointer<QRhiShaderResourceBindings> srb2(rhi->newShaderResourceBindings());
+ QVERIFY(srb2->build());
+
+ QVERIFY(srb1->isLayoutCompatible(srb2.data()));
+ QVERIFY(srb2->isLayoutCompatible(srb1.data()));
+ }
+
+ // different count (not compatible)
+ {
+ QScopedPointer<QRhiShaderResourceBindings> srb1(rhi->newShaderResourceBindings());
+ QVERIFY(srb1->build());
+
+ QScopedPointer<QRhiShaderResourceBindings> srb2(rhi->newShaderResourceBindings());
+ srb2->setBindings({
+ QRhiShaderResourceBinding::sampledTexture(0, QRhiShaderResourceBinding::FragmentStage, texture.data(), sampler.data())
+ });
+ QVERIFY(srb2->build());
+
+ QVERIFY(!srb1->isLayoutCompatible(srb2.data()));
+ QVERIFY(!srb2->isLayoutCompatible(srb1.data()));
+ }
+
+ // full match (compatible)
+ {
+ QScopedPointer<QRhiShaderResourceBindings> srb1(rhi->newShaderResourceBindings());
+ srb1->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, buf.data()),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, texture.data(), sampler.data())
+ });
+ QVERIFY(srb1->build());
+
+ QScopedPointer<QRhiShaderResourceBindings> srb2(rhi->newShaderResourceBindings());
+ srb2->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, buf.data()),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, texture.data(), sampler.data())
+ });
+ QVERIFY(srb2->build());
+
+ QVERIFY(srb1->isLayoutCompatible(srb2.data()));
+ QVERIFY(srb2->isLayoutCompatible(srb1.data()));
+ }
+
+ // different visibility (not compatible)
+ {
+ QScopedPointer<QRhiShaderResourceBindings> srb1(rhi->newShaderResourceBindings());
+ srb1->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, buf.data()),
+ });
+ QVERIFY(srb1->build());
+
+ QScopedPointer<QRhiShaderResourceBindings> srb2(rhi->newShaderResourceBindings());
+ srb2->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, buf.data()),
+ });
+ QVERIFY(srb2->build());
+
+ QVERIFY(!srb1->isLayoutCompatible(srb2.data()));
+ QVERIFY(!srb2->isLayoutCompatible(srb1.data()));
+ }
+
+ // different binding points (not compatible)
+ {
+ QScopedPointer<QRhiShaderResourceBindings> srb1(rhi->newShaderResourceBindings());
+ srb1->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, buf.data()),
+ });
+ QVERIFY(srb1->build());
+
+ QScopedPointer<QRhiShaderResourceBindings> srb2(rhi->newShaderResourceBindings());
+ srb2->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(1, QRhiShaderResourceBinding::VertexStage, buf.data()),
+ });
+ QVERIFY(srb2->build());
+
+ QVERIFY(!srb1->isLayoutCompatible(srb2.data()));
+ QVERIFY(!srb2->isLayoutCompatible(srb1.data()));
+ }
+
+ // different buffer region offset and size (compatible)
+ {
+ QScopedPointer<QRhiShaderResourceBindings> srb1(rhi->newShaderResourceBindings());
+ srb1->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, buf.data(), rhi->ubufAligned(1), 128),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, texture.data(), sampler.data())
+ });
+ QVERIFY(srb1->build());
+
+ QScopedPointer<QRhiShaderResourceBindings> srb2(rhi->newShaderResourceBindings());
+ srb2->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, buf.data()),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, texture.data(), sampler.data())
+ });
+ QVERIFY(srb2->build());
+
+ QVERIFY(srb1->isLayoutCompatible(srb2.data()));
+ QVERIFY(srb2->isLayoutCompatible(srb1.data()));
+ }
+
+ // different resources (compatible)
+ {
+ QScopedPointer<QRhiShaderResourceBindings> srb1(rhi->newShaderResourceBindings());
+ srb1->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, otherBuf.data()),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, texture.data(), otherSampler.data())
+ });
+ QVERIFY(srb1->build());
+
+ QScopedPointer<QRhiShaderResourceBindings> srb2(rhi->newShaderResourceBindings());
+ srb2->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage, buf.data()),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, texture.data(), sampler.data())
+ });
+ QVERIFY(srb2->build());
+
+ QVERIFY(srb1->isLayoutCompatible(srb2.data()));
+ QVERIFY(srb2->isLayoutCompatible(srb1.data()));
+ }
+}
+
+void tst_QRhi::renderPassDescriptorCompatibility_data()
+{
+ rhiTestData();
+}
+
+void tst_QRhi::renderPassDescriptorCompatibility()
+{
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing texture resource updates");
+
+ // Note that checking compatibility is only relevant with backends where
+ // there is a concept of renderpass descriptions (Vulkan, and partially
+ // Metal). It is perfectly fine for isCompatible() to always return true
+ // when that is not the case (D3D11, OpenGL). Hence the 'if (Vulkan or
+ // Metal)' for all the negative tests. Also note "partial" for Metal:
+ // resolve textures for examples have no effect on compatibility with Metal.
+
+ // tex and tex2 have the same format
+ QScopedPointer<QRhiTexture> tex(rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 1, QRhiTexture::RenderTarget));
+ QVERIFY(tex->build());
+ QScopedPointer<QRhiTexture> tex2(rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 1, QRhiTexture::RenderTarget));
+ QVERIFY(tex2->build());
+
+ QScopedPointer<QRhiRenderBuffer> ds(rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil, QSize(512, 512)));
+ QVERIFY(ds->build());
+
+ // two texture rendertargets with tex and tex2 as color0 (compatible)
+ {
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget({ tex.data() }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(rt->build());
+
+ QScopedPointer<QRhiTextureRenderTarget> rt2(rhi->newTextureRenderTarget({ tex2.data() }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc2(rt2->newCompatibleRenderPassDescriptor());
+ rt2->setRenderPassDescriptor(rpDesc2.data());
+ QVERIFY(rt2->build());
+
+ QVERIFY(rpDesc->isCompatible(rpDesc2.data()));
+ QVERIFY(rpDesc2->isCompatible(rpDesc.data()));
+ }
+
+ // two texture rendertargets with tex and tex2 as color0, and a depth-stencil attachment as well (compatible)
+ {
+ QRhiTextureRenderTargetDescription desc({ tex.data() }, ds.data());
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget(desc));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(rt->build());
+
+ QScopedPointer<QRhiTextureRenderTarget> rt2(rhi->newTextureRenderTarget(desc));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc2(rt2->newCompatibleRenderPassDescriptor());
+ rt2->setRenderPassDescriptor(rpDesc2.data());
+ QVERIFY(rt2->build());
+
+ QVERIFY(rpDesc->isCompatible(rpDesc2.data()));
+ QVERIFY(rpDesc2->isCompatible(rpDesc.data()));
+ }
+
+ // now one of them does not have the ds attachment (not compatible)
+ {
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget({ { tex.data() }, ds.data() }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(rt->build());
+
+ QScopedPointer<QRhiTextureRenderTarget> rt2(rhi->newTextureRenderTarget({ tex.data() }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc2(rt2->newCompatibleRenderPassDescriptor());
+ rt2->setRenderPassDescriptor(rpDesc2.data());
+ QVERIFY(rt2->build());
+
+ if (impl == QRhi::Vulkan || impl == QRhi::Metal) {
+ QVERIFY(!rpDesc->isCompatible(rpDesc2.data()));
+ QVERIFY(!rpDesc2->isCompatible(rpDesc.data()));
+ }
+ }
+
+ if (rhi->isFeatureSupported(QRhi::MultisampleRenderBuffer)) {
+ // resolve attachments (compatible)
+ {
+ QScopedPointer<QRhiRenderBuffer> msaaRenderBuffer(rhi->newRenderBuffer(QRhiRenderBuffer::Color, QSize(512, 512), 4));
+ QVERIFY(msaaRenderBuffer->build());
+ QScopedPointer<QRhiRenderBuffer> msaaRenderBuffer2(rhi->newRenderBuffer(QRhiRenderBuffer::Color, QSize(512, 512), 4));
+ QVERIFY(msaaRenderBuffer2->build());
+
+ QRhiColorAttachment colorAtt(msaaRenderBuffer.data()); // color0, multisample
+ colorAtt.setResolveTexture(tex.data()); // resolved into a non-msaa texture
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget({ colorAtt }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(rt->build());
+
+ QRhiColorAttachment colorAtt2(msaaRenderBuffer2.data()); // color0, multisample
+ colorAtt2.setResolveTexture(tex2.data()); // resolved into a non-msaa texture
+ QScopedPointer<QRhiTextureRenderTarget> rt2(rhi->newTextureRenderTarget({ colorAtt2 }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc2(rt2->newCompatibleRenderPassDescriptor());
+ rt2->setRenderPassDescriptor(rpDesc2.data());
+ QVERIFY(rt2->build());
+
+ QVERIFY(rpDesc->isCompatible(rpDesc2.data()));
+ QVERIFY(rpDesc2->isCompatible(rpDesc.data()));
+ }
+
+ // missing resolve for one of them (not compatible)
+ {
+ QScopedPointer<QRhiRenderBuffer> msaaRenderBuffer(rhi->newRenderBuffer(QRhiRenderBuffer::Color, QSize(512, 512), 4));
+ QVERIFY(msaaRenderBuffer->build());
+ QScopedPointer<QRhiRenderBuffer> msaaRenderBuffer2(rhi->newRenderBuffer(QRhiRenderBuffer::Color, QSize(512, 512), 4));
+ QVERIFY(msaaRenderBuffer2->build());
+
+ QRhiColorAttachment colorAtt(msaaRenderBuffer.data()); // color0, multisample
+ colorAtt.setResolveTexture(tex.data()); // resolved into a non-msaa texture
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget({ colorAtt }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(rt->build());
+
+ QRhiColorAttachment colorAtt2(msaaRenderBuffer2.data()); // color0, multisample
+ QScopedPointer<QRhiTextureRenderTarget> rt2(rhi->newTextureRenderTarget({ colorAtt2 }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc2(rt2->newCompatibleRenderPassDescriptor());
+ rt2->setRenderPassDescriptor(rpDesc2.data());
+ QVERIFY(rt2->build());
+
+ if (impl == QRhi::Vulkan) { // no Metal here
+ QVERIFY(!rpDesc->isCompatible(rpDesc2.data()));
+ QVERIFY(!rpDesc2->isCompatible(rpDesc.data()));
+ }
+ }
+ } else {
+ qDebug("Skipping multisample renderbuffer dependent tests");
+ }
+
+ if (rhi->isTextureFormatSupported(QRhiTexture::RGBA32F)) {
+ QScopedPointer<QRhiTexture> tex3(rhi->newTexture(QRhiTexture::RGBA32F, QSize(512, 512), 1, QRhiTexture::RenderTarget));
+ QVERIFY(tex3->build());
+
+ // different texture formats (not compatible)
+ {
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget({ tex.data() }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(rt->build());
+
+ QScopedPointer<QRhiTextureRenderTarget> rt2(rhi->newTextureRenderTarget({ tex3.data() }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc2(rt2->newCompatibleRenderPassDescriptor());
+ rt2->setRenderPassDescriptor(rpDesc2.data());
+ QVERIFY(rt2->build());
+
+ if (impl == QRhi::Vulkan || impl == QRhi::Metal) {
+ QVERIFY(!rpDesc->isCompatible(rpDesc2.data()));
+ QVERIFY(!rpDesc2->isCompatible(rpDesc.data()));
+ }
+ }
+ } else {
+ qDebug("Skipping texture format dependent tests");
+ }
+}
+
#include <tst_qrhi.moc>
QTEST_MAIN(tst_QRhi)
diff --git a/tests/auto/gui/rhi/qshader/data/README b/tests/auto/gui/rhi/qshader/data/README
new file mode 100644
index 0000000000..3d89f2a0c5
--- /dev/null
+++ b/tests/auto/gui/rhi/qshader/data/README
@@ -0,0 +1,15 @@
+Warning: Do NOT regenerate the .qsb files without proper planning and understanding
+the following.
+
+Among other things, we are also testing backwards compatibility for QShader
+deserialization.
+
+.qsb files with _v1 in the name were produced with an older qtshadertools
+and have a QSB_VERSION of 1.
+
+Files with _v2 are generated with a newer qsb, those have QSB_VERSION 2.
+The difference is the support for nativeResourceBindingMap() which is only
+present in v2.
+
+Files with _v3 come from an even newer qsb, and have QSB_VERSION 3. The
+difference to 2 is the use of CBOR instead of binary JSON for QShaderDescription.
diff --git a/tests/auto/gui/rhi/qshader/data/color.vert.qsb b/tests/auto/gui/rhi/qshader/data/color_all_v1.vert.qsb
index 7d02d823d2..7d02d823d2 100644
--- a/tests/auto/gui/rhi/qshader/data/color.vert.qsb
+++ b/tests/auto/gui/rhi/qshader/data/color_all_v1.vert.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qshader/data/color_simple.vert.qsb b/tests/auto/gui/rhi/qshader/data/color_spirv_v1.vert.qsb
index c82ba7e8e7..c82ba7e8e7 100644
--- a/tests/auto/gui/rhi/qshader/data/color_simple.vert.qsb
+++ b/tests/auto/gui/rhi/qshader/data/color_spirv_v1.vert.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qshader/data/texture.frag b/tests/auto/gui/rhi/qshader/data/texture.frag
new file mode 100644
index 0000000000..bd22f817e0
--- /dev/null
+++ b/tests/auto/gui/rhi/qshader/data/texture.frag
@@ -0,0 +1,16 @@
+#version 440
+
+layout(location = 0) in vec2 qt_TexCoord;
+layout(location = 0) out vec4 fragColor;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 qt_Matrix;
+ float opacity;
+} ubuf;
+
+layout(binding = 1) uniform sampler2D qt_Texture;
+
+void main()
+{
+ fragColor = texture(qt_Texture, qt_TexCoord) * ubuf.opacity;
+}
diff --git a/tests/auto/gui/rhi/qshader/data/texture_all_v2.frag.qsb b/tests/auto/gui/rhi/qshader/data/texture_all_v2.frag.qsb
new file mode 100644
index 0000000000..79f5486945
--- /dev/null
+++ b/tests/auto/gui/rhi/qshader/data/texture_all_v2.frag.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qshader/data/texture_all_v3.frag.qsb b/tests/auto/gui/rhi/qshader/data/texture_all_v3.frag.qsb
new file mode 100644
index 0000000000..b6e49aa03d
--- /dev/null
+++ b/tests/auto/gui/rhi/qshader/data/texture_all_v3.frag.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qshader/data/texture_all_v4.frag.qsb b/tests/auto/gui/rhi/qshader/data/texture_all_v4.frag.qsb
new file mode 100644
index 0000000000..4292d67b7c
--- /dev/null
+++ b/tests/auto/gui/rhi/qshader/data/texture_all_v4.frag.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qshader/tst_qshader.cpp b/tests/auto/gui/rhi/qshader/tst_qshader.cpp
index 21f0cc7895..ab7115b74a 100644
--- a/tests/auto/gui/rhi/qshader/tst_qshader.cpp
+++ b/tests/auto/gui/rhi/qshader/tst_qshader.cpp
@@ -40,6 +40,11 @@ private slots:
void genVariants();
void shaderDescImplicitSharing();
void bakedShaderImplicitSharing();
+ void mslResourceMapping();
+ void loadV3();
+ void serializeShaderDesc();
+ void comparison();
+ void loadV4();
};
static QShader getShader(const QString &name)
@@ -53,8 +58,9 @@ static QShader getShader(const QString &name)
void tst_QShader::simpleCompileCheckResults()
{
- QShader s = getShader(QLatin1String(":/data/color_simple.vert.qsb"));
+ QShader s = getShader(QLatin1String(":/data/color_spirv_v1.vert.qsb"));
QVERIFY(s.isValid());
+ QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 1);
QCOMPARE(s.availableShaders().count(), 1);
const QShaderCode shader = s.shader(QShaderKey(QShader::SpirvShader,
@@ -125,10 +131,11 @@ void tst_QShader::simpleCompileCheckResults()
void tst_QShader::genVariants()
{
- QShader s = getShader(QLatin1String(":/data/color.vert.qsb"));
+ QShader s = getShader(QLatin1String(":/data/color_all_v1.vert.qsb"));
// spirv, glsl 100, glsl 330, glsl 120, hlsl 50, msl 12
// + batchable variants
QVERIFY(s.isValid());
+ QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 1);
QCOMPARE(s.availableShaders().count(), 2 * 6);
int batchableVariantCount = 0;
@@ -149,8 +156,9 @@ void tst_QShader::genVariants()
void tst_QShader::shaderDescImplicitSharing()
{
- QShader s = getShader(QLatin1String(":/data/color_simple.vert.qsb"));
+ QShader s = getShader(QLatin1String(":/data/color_spirv_v1.vert.qsb"));
QVERIFY(s.isValid());
+ QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 1);
QCOMPARE(s.availableShaders().count(), 1);
QVERIFY(s.availableShaders().contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
@@ -168,6 +176,7 @@ void tst_QShader::shaderDescImplicitSharing()
QCOMPARE(d1.inputVariables().count(), 2);
QCOMPARE(d1.outputVariables().count(), 1);
QCOMPARE(d1.uniformBlocks().count(), 1);
+ QCOMPARE(d0, d1);
d1.detach();
QVERIFY(QShaderDescriptionPrivate::get(&d0) != QShaderDescriptionPrivate::get(&d1));
@@ -177,12 +186,17 @@ void tst_QShader::shaderDescImplicitSharing()
QCOMPARE(d1.inputVariables().count(), 2);
QCOMPARE(d1.outputVariables().count(), 1);
QCOMPARE(d1.uniformBlocks().count(), 1);
+ QCOMPARE(d0, d1);
+
+ d1 = QShaderDescription();
+ QVERIFY(d0 != d1);
}
void tst_QShader::bakedShaderImplicitSharing()
{
- QShader s0 = getShader(QLatin1String(":/data/color_simple.vert.qsb"));
+ QShader s0 = getShader(QLatin1String(":/data/color_spirv_v1.vert.qsb"));
QVERIFY(s0.isValid());
+ QCOMPARE(QShaderPrivate::get(&s0)->qsbVersion, 1);
QCOMPARE(s0.availableShaders().count(), 1);
QVERIFY(s0.availableShaders().contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
@@ -229,5 +243,273 @@ void tst_QShader::bakedShaderImplicitSharing()
}
}
+void tst_QShader::mslResourceMapping()
+{
+ QShader s = getShader(QLatin1String(":/data/texture_all_v2.frag.qsb"));
+ QVERIFY(s.isValid());
+ QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 2);
+
+ const QVector<QShaderKey> availableShaders = s.availableShaders();
+ QCOMPARE(availableShaders.count(), 7);
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::MslShader, QShaderVersion(12))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::HlslShader, QShaderVersion(50))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(100, QShaderVersion::GlslEs))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(120))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(150))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(330))));
+
+ const QShader::NativeResourceBindingMap *resMap =
+ s.nativeResourceBindingMap(QShaderKey(QShader::GlslShader, QShaderVersion(330)));
+ QVERIFY(!resMap);
+
+ // The Metal shader must come with a mapping table for binding points 0
+ // (uniform buffer) and 1 (combined image sampler mapped to a texture and
+ // sampler in the shader).
+ resMap = s.nativeResourceBindingMap(QShaderKey(QShader::MslShader, QShaderVersion(12)));
+ QVERIFY(resMap);
+
+ QCOMPARE(resMap->count(), 2);
+ QCOMPARE(resMap->value(0).first, 0); // mapped to native buffer index 0
+ QCOMPARE(resMap->value(1), qMakePair(0, 0)); // mapped to native texture index 0 and sampler index 0
+}
+
+void tst_QShader::loadV3()
+{
+ // qsb version 3: QShaderDescription is serialized as CBOR. Ensure the deserialized data is as expected.
+ QShader s = getShader(QLatin1String(":/data/texture_all_v3.frag.qsb"));
+ QVERIFY(s.isValid());
+ QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 3);
+
+ const QVector<QShaderKey> availableShaders = s.availableShaders();
+ QCOMPARE(availableShaders.count(), 7);
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::MslShader, QShaderVersion(12))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::HlslShader, QShaderVersion(50))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(100, QShaderVersion::GlslEs))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(120))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(150))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(330))));
+
+ const QShaderDescription desc = s.description();
+ QVERIFY(desc.isValid());
+ QCOMPARE(desc.inputVariables().count(), 1);
+ for (const QShaderDescription::InOutVariable &v : desc.inputVariables()) {
+ switch (v.location) {
+ case 0:
+ QCOMPARE(v.name, QLatin1String("qt_TexCoord"));
+ QCOMPARE(v.type, QShaderDescription::Vec2);
+ break;
+ default:
+ QVERIFY(false);
+ break;
+ }
+ }
+ QCOMPARE(desc.outputVariables().count(), 1);
+ for (const QShaderDescription::InOutVariable &v : desc.outputVariables()) {
+ switch (v.location) {
+ case 0:
+ QCOMPARE(v.name, QLatin1String("fragColor"));
+ QCOMPARE(v.type, QShaderDescription::Vec4);
+ break;
+ default:
+ QVERIFY(false);
+ break;
+ }
+ }
+ QCOMPARE(desc.uniformBlocks().count(), 1);
+ const QShaderDescription::UniformBlock blk = desc.uniformBlocks().first();
+ QCOMPARE(blk.blockName, QLatin1String("buf"));
+ QCOMPARE(blk.structName, QLatin1String("ubuf"));
+ QCOMPARE(blk.size, 68);
+ QCOMPARE(blk.binding, 0);
+ QCOMPARE(blk.descriptorSet, 0);
+ QCOMPARE(blk.members.count(), 2);
+ for (int i = 0; i < blk.members.count(); ++i) {
+ const QShaderDescription::BlockVariable v = blk.members[i];
+ switch (i) {
+ case 0:
+ QCOMPARE(v.offset, 0);
+ QCOMPARE(v.size, 64);
+ QCOMPARE(v.name, QLatin1String("qt_Matrix"));
+ QCOMPARE(v.type, QShaderDescription::Mat4);
+ QCOMPARE(v.matrixStride, 16);
+ break;
+ case 1:
+ QCOMPARE(v.offset, 64);
+ QCOMPARE(v.size, 4);
+ QCOMPARE(v.name, QLatin1String("opacity"));
+ QCOMPARE(v.type, QShaderDescription::Float);
+ break;
+ default:
+ QVERIFY(false);
+ break;
+ }
+ }
+}
+
+void tst_QShader::serializeShaderDesc()
+{
+ // default constructed QShaderDescription
+ {
+ QShaderDescription desc;
+ QVERIFY(!desc.isValid());
+
+ QByteArray data;
+ {
+ QBuffer buf(&data);
+ QDataStream ds(&buf);
+ QVERIFY(buf.open(QIODevice::WriteOnly));
+ desc.serialize(&ds);
+ }
+ QVERIFY(!data.isEmpty());
+
+ {
+ QBuffer buf(&data);
+ QDataStream ds(&buf);
+ QVERIFY(buf.open(QIODevice::ReadOnly));
+ QShaderDescription desc2 = QShaderDescription::deserialize(&ds);
+ QVERIFY(!desc2.isValid());
+ }
+ }
+
+ // a QShaderDescription with inputs, outputs, uniform block and combined image sampler
+ {
+ QShader s = getShader(QLatin1String(":/data/texture_all_v4.frag.qsb"));
+ QVERIFY(s.isValid());
+ const QShaderDescription desc = s.description();
+ QVERIFY(desc.isValid());
+
+ QByteArray data;
+ {
+ QBuffer buf(&data);
+ QDataStream ds(&buf);
+ QVERIFY(buf.open(QIODevice::WriteOnly));
+ desc.serialize(&ds);
+ }
+ QVERIFY(!data.isEmpty());
+
+ {
+ QShaderDescription desc2;
+ QVERIFY(!desc2.isValid());
+ QVERIFY(!(desc == desc2));
+ QVERIFY(desc != desc2);
+ }
+
+ {
+ QBuffer buf(&data);
+ QDataStream ds(&buf);
+ QVERIFY(buf.open(QIODevice::ReadOnly));
+ QShaderDescription desc2 = QShaderDescription::deserialize(&ds);
+ QVERIFY(desc2.isValid());
+ QCOMPARE(desc, desc2);
+ }
+ }
+}
+
+void tst_QShader::comparison()
+{
+ // exercise QShader and QShaderDescription comparisons
+ {
+ QShader s1 = getShader(QLatin1String(":/data/texture_all_v4.frag.qsb"));
+ QVERIFY(s1.isValid());
+ QShader s2 = getShader(QLatin1String(":/data/color_all_v1.vert.qsb"));
+ QVERIFY(s2.isValid());
+
+ QVERIFY(s1.description().isValid());
+ QVERIFY(s2.description().isValid());
+
+ QVERIFY(s1 != s2);
+ QVERIFY(s1.description() != s2.description());
+ }
+
+ {
+ QShader s1 = getShader(QLatin1String(":/data/texture_all_v4.frag.qsb"));
+ QVERIFY(s1.isValid());
+ QShader s2 = getShader(QLatin1String(":/data/texture_all_v4.frag.qsb"));
+ QVERIFY(s2.isValid());
+
+ QVERIFY(s1.description().isValid());
+ QVERIFY(s2.description().isValid());
+
+ QVERIFY(s1 == s2);
+ QVERIFY(s1.description() == s2.description());
+ }
+}
+
+void tst_QShader::loadV4()
+{
+ // qsb version 4: QShaderDescription is serialized via QDataStream. Ensure the deserialized data is as expected.
+ QShader s = getShader(QLatin1String(":/data/texture_all_v4.frag.qsb"));
+ QVERIFY(s.isValid());
+ QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 4);
+
+ const QVector<QShaderKey> availableShaders = s.availableShaders();
+ QCOMPARE(availableShaders.count(), 7);
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::MslShader, QShaderVersion(12))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::HlslShader, QShaderVersion(50))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(100, QShaderVersion::GlslEs))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(120))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(150))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(330))));
+
+ const QShaderDescription desc = s.description();
+ QVERIFY(desc.isValid());
+ QCOMPARE(desc.inputVariables().count(), 1);
+ for (const QShaderDescription::InOutVariable &v : desc.inputVariables()) {
+ switch (v.location) {
+ case 0:
+ QCOMPARE(v.name, QLatin1String("qt_TexCoord"));
+ QCOMPARE(v.type, QShaderDescription::Vec2);
+ break;
+ default:
+ QVERIFY(false);
+ break;
+ }
+ }
+ QCOMPARE(desc.outputVariables().count(), 1);
+ for (const QShaderDescription::InOutVariable &v : desc.outputVariables()) {
+ switch (v.location) {
+ case 0:
+ QCOMPARE(v.name, QLatin1String("fragColor"));
+ QCOMPARE(v.type, QShaderDescription::Vec4);
+ break;
+ default:
+ QVERIFY(false);
+ break;
+ }
+ }
+ QCOMPARE(desc.uniformBlocks().count(), 1);
+ const QShaderDescription::UniformBlock blk = desc.uniformBlocks().first();
+ QCOMPARE(blk.blockName, QLatin1String("buf"));
+ QCOMPARE(blk.structName, QLatin1String("ubuf"));
+ QCOMPARE(blk.size, 68);
+ QCOMPARE(blk.binding, 0);
+ QCOMPARE(blk.descriptorSet, 0);
+ QCOMPARE(blk.members.count(), 2);
+ for (int i = 0; i < blk.members.count(); ++i) {
+ const QShaderDescription::BlockVariable v = blk.members[i];
+ switch (i) {
+ case 0:
+ QCOMPARE(v.offset, 0);
+ QCOMPARE(v.size, 64);
+ QCOMPARE(v.name, QLatin1String("qt_Matrix"));
+ QCOMPARE(v.type, QShaderDescription::Mat4);
+ QCOMPARE(v.matrixStride, 16);
+ break;
+ case 1:
+ QCOMPARE(v.offset, 64);
+ QCOMPARE(v.size, 4);
+ QCOMPARE(v.name, QLatin1String("opacity"));
+ QCOMPARE(v.type, QShaderDescription::Float);
+ break;
+ default:
+ QVERIFY(false);
+ break;
+ }
+ }
+}
+
#include <tst_qshader.moc>
QTEST_MAIN(tst_QShader)
diff --git a/tests/auto/gui/text/qfontdatabase/testdata.qrc b/tests/auto/gui/text/qfontdatabase/testdata.qrc
index 224e845601..a590099b20 100644
--- a/tests/auto/gui/text/qfontdatabase/testdata.qrc
+++ b/tests/auto/gui/text/qfontdatabase/testdata.qrc
@@ -4,5 +4,6 @@
<file alias="testfont.ttf">../../../shared/resources/testfont.ttf</file>
<file alias="testfont_condensed.ttf">../../../shared/resources/testfont_condensed.ttf</file>
<file alias="testfont_italic.ttf">../../../shared/resources/testfont_italic.ttf</file>
+ <file alias="testfont_open.otf">../../../shared/resources/testfont_open.otf</file>
</qresource>
</RCC>
diff --git a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
index 2b69801b59..12e8083622 100644
--- a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
+++ b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
@@ -76,6 +76,9 @@ private slots:
void rasterFonts();
void smoothFonts();
+ void registerOpenTypePreferredNamesSystem();
+ void registerOpenTypePreferredNamesApplication();
+
private:
QString m_ledFont;
QString m_testFont;
@@ -440,5 +443,31 @@ void tst_QFontDatabase::smoothFonts()
QVERIFY(!QFontDatabase().isBitmapScalable(font.family()));
}
+void tst_QFontDatabase::registerOpenTypePreferredNamesSystem()
+{
+ QFontDatabase db;
+ // This font family was picked because it was the only one I had installed which showcased the
+ // problem
+ if (!db.hasFamily(QString::fromLatin1("Source Code Pro ExtraLight")))
+ QSKIP("Source Code Pro ExtraLight is not installed");
+
+ QStringList styles = db.styles(QString::fromLatin1("Source Code Pro"));
+ QVERIFY(styles.contains(QLatin1String("ExtraLight")));
+}
+
+void tst_QFontDatabase::registerOpenTypePreferredNamesApplication()
+{
+ QFontDatabase db;
+
+ int id = QFontDatabase::addApplicationFont(QString::fromLatin1(":/testfont_open.otf"));
+ if (id == -1)
+ QSKIP("Skip the test since app fonts are not supported on this system");
+
+ QStringList styles = db.styles(QString::fromLatin1("QtBidiTestFont"));
+ QVERIFY(styles.contains(QLatin1String("Open")));
+
+ QFontDatabase::removeApplicationFont(id);
+}
+
QTEST_MAIN(tst_QFontDatabase)
#include "tst_qfontdatabase.moc"
diff --git a/tests/auto/gui/text/qsyntaxhighlighter/qsyntaxhighlighter.pro b/tests/auto/gui/text/qsyntaxhighlighter/qsyntaxhighlighter.pro
index a78c429433..c91eaad944 100644
--- a/tests/auto/gui/text/qsyntaxhighlighter/qsyntaxhighlighter.pro
+++ b/tests/auto/gui/text/qsyntaxhighlighter/qsyntaxhighlighter.pro
@@ -2,4 +2,4 @@ CONFIG += testcase
TARGET = tst_qsyntaxhighlighter
SOURCES += tst_qsyntaxhighlighter.cpp
QT += testlib
-qtHaveModule(widgets) QT += widgets
+qtHaveModule(widgets): QT += widgets
diff --git a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
index 2944e88d70..10a627bb82 100644
--- a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
+++ b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
@@ -1796,6 +1796,12 @@ void tst_QTextDocument::toHtml()
QCOMPARE(output, expectedOutput);
QDomDocument document;
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ QEXPECT_FAIL("charfmt-for-list-item",
+ "The attribute \"style\" is redefined in the generated HTML, which is not valid "
+ "according to XML standard. The new QDomDocument implementation follows the XML "
+ "standard.", Continue);
+#endif
QVERIFY2(document.setContent(output), "Output was not valid XML");
}
diff --git a/tests/auto/gui/text/qtextdocumentlayout/qtextdocumentlayout.pro b/tests/auto/gui/text/qtextdocumentlayout/qtextdocumentlayout.pro
index 5d31ee3930..322690e4cc 100644
--- a/tests/auto/gui/text/qtextdocumentlayout/qtextdocumentlayout.pro
+++ b/tests/auto/gui/text/qtextdocumentlayout/qtextdocumentlayout.pro
@@ -1,7 +1,7 @@
CONFIG += testcase
TARGET = tst_qtextdocumentlayout
QT += testlib
-qtHaveModule(widgets) QT += widgets
+qtHaveModule(widgets): QT += widgets
SOURCES += tst_qtextdocumentlayout.cpp
diff --git a/tests/auto/gui/text/qtexttable/tst_qtexttable.cpp b/tests/auto/gui/text/qtexttable/tst_qtexttable.cpp
index 7b2ff4cc10..474079037b 100644
--- a/tests/auto/gui/text/qtexttable/tst_qtexttable.cpp
+++ b/tests/auto/gui/text/qtexttable/tst_qtexttable.cpp
@@ -1041,7 +1041,7 @@ public:
QList<QRectF> rects;
PaintEngine()
- : QPaintEngine(0)
+ : QPaintEngine(QPaintEngine::PaintEngineFeatures{ })
{}
virtual Type type() const
{
diff --git a/tests/auto/gui/util/qdoublevalidator/tst_qdoublevalidator.cpp b/tests/auto/gui/util/qdoublevalidator/tst_qdoublevalidator.cpp
index 012a7e2ce3..366f3b6fdf 100644
--- a/tests/auto/gui/util/qdoublevalidator/tst_qdoublevalidator.cpp
+++ b/tests/auto/gui/util/qdoublevalidator/tst_qdoublevalidator.cpp
@@ -73,6 +73,7 @@ void tst_QDoubleValidator::validateThouSep_data()
QTest::newRow("1.000,1de_reject") << "de" << QString("1.000,1") << true << INV;
QTest::newRow(",C") << "C" << QString(",") << false << INV;
QTest::newRow(",de") << "de" << QString(",") << false << ITM;
+ QTest::newRow("1,23") << "en_AU" << QString("1,00") << false << ITM;
}
void tst_QDoubleValidator::validateThouSep()