summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp28
-rw-r--r--tests/auto/corelib/text/qstring/tst_qstring.cpp119
-rw-r--r--tests/auto/gui/itemmodels/qstandarditem/tst_qstandarditem.cpp69
-rw-r--r--tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp457
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp51
-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.cpp142
-rw-r--r--tests/auto/network/access/http2/tst_http2.cpp20
-rw-r--r--tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp10
-rw-r--r--tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp327
-rw-r--r--tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp2
-rw-r--r--tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp22
-rwxr-xr-xtests/manual/rhi/cubemap_render/buildshader.bat6
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_mrt.frag28
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_mrt.frag.qsbbin0 -> 1688 bytes
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_mrt.vert20
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_mrt.vert.qsbbin0 -> 1223 bytes
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_oneface.frag13
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_oneface.frag.qsbbin0 -> 993 bytes
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_oneface.vert15
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_oneface.vert.qsbbin0 -> 1073 bytes
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_render.cpp466
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_render.pro8
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_render.qrc10
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_sample.frag10
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_sample.frag.qsbbin0 -> 1028 bytes
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_sample.vert16
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_sample.vert.qsbbin0 -> 1145 bytes
-rwxr-xr-xtests/manual/rhi/float16texture_with_compute/buildshaders.sh3
-rw-r--r--tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.cpp312
-rw-r--r--tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.pro8
-rw-r--r--tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.qrc9
-rw-r--r--tests/manual/rhi/float16texture_with_compute/load.comp19
-rw-r--r--tests/manual/rhi/float16texture_with_compute/load.comp.qsbbin0 -> 1596 bytes
-rw-r--r--tests/manual/rhi/float16texture_with_compute/prefilter.comp50
-rw-r--r--tests/manual/rhi/float16texture_with_compute/prefilter.comp.qsbbin0 -> 3659 bytes
-rw-r--r--tests/manual/rhi/rhi.pro2
-rw-r--r--tests/manual/rhi/shared/examplefw.h3
38 files changed, 1665 insertions, 580 deletions
diff --git a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
index cdd1f6361e..7d88601e54 100644
--- a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
+++ b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
@@ -34,6 +34,9 @@
#include <QElapsedTimer>
#include <QTextStream>
#include <QDir>
+#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
+#include <windows.h>
+#endif
/* All tests need to run in temporary directories not used
* by the application to avoid non-deterministic failures on Windows
@@ -79,6 +82,9 @@ private slots:
void signalsEmittedAfterFileMoved();
void watchUnicodeCharacters();
+#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
+ void watchDirectoryAttributeChanges();
+#endif
private:
QString m_tempDirPattern;
@@ -813,5 +819,27 @@ void tst_QFileSystemWatcher::watchUnicodeCharacters()
QTRY_COMPARE(changedSpy.count(), 1);
}
+#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
+void tst_QFileSystemWatcher::watchDirectoryAttributeChanges()
+{
+ QTemporaryDir temporaryDirectory(m_tempDirPattern);
+ QVERIFY2(temporaryDirectory.isValid(), qPrintable(temporaryDirectory.errorString()));
+
+ QDir testDir(temporaryDirectory.path());
+ const QString subDir(QString::fromLatin1("attrib_test"));
+ QVERIFY(testDir.mkdir(subDir));
+ testDir = QDir(temporaryDirectory.path() + QDir::separator() + subDir);
+
+ QFileSystemWatcher watcher;
+ QVERIFY(watcher.addPath(temporaryDirectory.path()));
+ FileSystemWatcherSpy changedSpy(&watcher, FileSystemWatcherSpy::SpyOnDirectoryChanged);
+ QCOMPARE(changedSpy.count(), 0);
+ QVERIFY(SetFileAttributes(reinterpret_cast<LPCWSTR>(testDir.absolutePath().utf16()), FILE_ATTRIBUTE_HIDDEN) != 0);
+ QTRY_COMPARE(changedSpy.count(), 1);
+ QVERIFY(SetFileAttributes(reinterpret_cast<LPCWSTR>(testDir.absolutePath().utf16()), FILE_ATTRIBUTE_NORMAL) != 0);
+ QTRY_COMPARE(changedSpy.count(), 2);
+}
+#endif
+
QTEST_MAIN(tst_QFileSystemWatcher)
#include "tst_qfilesystemwatcher.moc"
diff --git a/tests/auto/corelib/text/qstring/tst_qstring.cpp b/tests/auto/corelib/text/qstring/tst_qstring.cpp
index 84e12cd46b..e5b5e526de 100644
--- a/tests/auto/corelib/text/qstring/tst_qstring.cpp
+++ b/tests/auto/corelib/text/qstring/tst_qstring.cpp
@@ -459,8 +459,8 @@ private slots:
void trimmed();
void toUpper();
void toLower();
- void isUpper();
- void isLower();
+ void isLower_isUpper_data();
+ void isLower_isUpper();
void toCaseFolded();
void rightJustified();
void leftJustified();
@@ -2290,44 +2290,83 @@ void tst_QString::toLower()
#endif // icu
}
-void tst_QString::isUpper()
-{
- QVERIFY(!QString().isUpper());
- QVERIFY(!QString("").isUpper());
- QVERIFY(QString("TEXT").isUpper());
- QVERIFY(!QString("text").isUpper());
- QVERIFY(!QString("Text").isUpper());
- QVERIFY(!QString("tExt").isUpper());
- QVERIFY(!QString("teXt").isUpper());
- QVERIFY(!QString("texT").isUpper());
- QVERIFY(!QString("TExt").isUpper());
- QVERIFY(!QString("teXT").isUpper());
- QVERIFY(!QString("tEXt").isUpper());
- QVERIFY(!QString("tExT").isUpper());
- QVERIFY(!QString("@ABYZ[").isUpper());
- QVERIFY(!QString("@abyz[").isUpper());
- QVERIFY(!QString("`ABYZ{").isUpper());
- QVERIFY(!QString("`abyz{").isUpper());
-}
-
-void tst_QString::isLower()
-{
- QVERIFY(!QString().isLower());
- QVERIFY(!QString("").isLower());
- QVERIFY(QString("text").isLower());
- QVERIFY(!QString("Text").isLower());
- QVERIFY(!QString("tExt").isLower());
- QVERIFY(!QString("teXt").isLower());
- QVERIFY(!QString("texT").isLower());
- QVERIFY(!QString("TExt").isLower());
- QVERIFY(!QString("teXT").isLower());
- QVERIFY(!QString("tEXt").isLower());
- QVERIFY(!QString("tExT").isLower());
- QVERIFY(!QString("TEXT").isLower());
- QVERIFY(!QString("@ABYZ[").isLower());
- QVERIFY(!QString("@abyz[").isLower());
- QVERIFY(!QString("`ABYZ{").isLower());
- QVERIFY(!QString("`abyz{").isLower());
+void tst_QString::isLower_isUpper_data()
+{
+ QTest::addColumn<QString>("string");
+ QTest::addColumn<bool>("isLower");
+ QTest::addColumn<bool>("isUpper");
+
+ int row = 0;
+ QTest::addRow("lower-and-upper-%02d", row++) << QString() << true << true;
+ QTest::addRow("lower-and-upper-%02d", row++) << QString("") << true << true;
+ QTest::addRow("lower-and-upper-%02d", row++) << QString(" ") << true << true;
+ QTest::addRow("lower-and-upper-%02d", row++) << QString("123") << true << true;
+ QTest::addRow("lower-and-upper-%02d", row++) << QString("@123$#") << true << true;
+ QTest::addRow("lower-and-upper-%02d", row++) << QString("π„žπ„΄π†β™«") << true << true; // Unicode Block 'Musical Symbols'
+ // not foldable
+ QTest::addRow("lower-and-upper-%02d", row++) << QString("πšŠπš‹πšŒπšπšŽ") << true << true; // MATHEMATICAL MONOSPACE SMALL A, ... E
+ QTest::addRow("lower-and-upper-%02d", row++) << QString("𝙖,𝙗,π™˜,𝙙,π™š") << true << true; // MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A, ... E
+ QTest::addRow("lower-and-upper-%02d", row++) << QString("π—”π—•π—–π——π—˜") << true << true; // MATHEMATICAL SANS-SERIF BOLD CAPITAL A, ... E
+ QTest::addRow("lower-and-upper-%02d", row++) << QString("𝐀,𝐁,𝐂,𝐃,𝐄") << true << true; // MATHEMATICAL BOLD CAPITAL A, ... E
+
+ row = 0;
+ QTest::addRow("only-lower-%02d", row++) << QString("text") << true << false;
+ QTest::addRow("only-lower-%02d", row++) << QString("Γ aa") << true << false;
+ QTest::addRow("only-lower-%02d", row++) << QString("øæß") << true << false;
+ QTest::addRow("only-lower-%02d", row++) << QString("text ") << true << false;
+ QTest::addRow("only-lower-%02d", row++) << QString(" text") << true << false;
+ QTest::addRow("only-lower-%02d", row++) << QString("hello, world!") << true << false;
+ QTest::addRow("only-lower-%02d", row++) << QString("123@abyz[") << true << false;
+ QTest::addRow("only-lower-%02d", row++) << QString("`abyz{") << true << false;
+ QTest::addRow("only-lower-%02d", row++) << QString("a𝙖a|b𝙗b|cπ™˜c|d𝙙d|eπ™še") << true << false; // MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A, ... E
+ QTest::addRow("only-lower-%02d", row++) << QString("𐐨") << true << false; // DESERET SMALL LETTER LONG I
+ // uppercase letters, not foldable
+ QTest::addRow("only-lower-%02d", row++) << QString("text𝗔text") << true << false; // MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+
+ row = 0;
+ QTest::addRow("only-upper-%02d", row++) << QString("TEXT") << false << true;
+ QTest::addRow("only-upper-%02d", row++) << QString("Γ€AA") << false << true;
+ QTest::addRow("only-upper-%02d", row++) << QString("Γ˜Γ†αΊž") << false << true;
+ QTest::addRow("only-upper-%02d", row++) << QString("TEXT ") << false << true;
+ QTest::addRow("only-upper-%02d", row++) << QString(" TEXT") << false << true;
+ QTest::addRow("only-upper-%02d", row++) << QString("HELLO, WORLD!") << false << true;
+ QTest::addRow("only-upper-%02d", row++) << QString("123@ABYZ[") << false << true;
+ QTest::addRow("only-upper-%02d", row++) << QString("`ABYZ{") << false << true;
+ QTest::addRow("only-upper-%02d", row++) << QString("A𝐀A|B𝐁B|C𝐂C|D𝐃D|E𝐄E") << false << true; // MATHEMATICAL BOLD CAPITAL A, ... E
+ QTest::addRow("only-upper-%02d", row++) << QString("𐐀") << false << true; // DESERET CAPITAL LETTER LONG I
+ // lowercase letters, not foldable
+ QTest::addRow("only-upper-%02d", row++) << QString("TEXT𝚊TEXT") << false << true; // MATHEMATICAL MONOSPACE SMALL A
+
+ row = 0;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("Text") << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("tExt") << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("teXt") << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("texT") << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("TExt") << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("teXT") << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("tEXt") << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("tExT") << false << false;
+ // not foldable
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("TEXT𝚊text") << false << false; // MATHEMATICAL MONOSPACE SMALL A
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("text𝗔TEXT") << false << false; // MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+ // titlecase, foldable
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("abcLjdef") << false << false; // LATIN CAPITAL LETTER L WITH SMALL LETTER J
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("ABCLjDEF") << false << false; // LATIN CAPITAL LETTER L WITH SMALL LETTER J
+}
+
+void tst_QString::isLower_isUpper()
+{
+ QFETCH(QString, string);
+ QFETCH(bool, isLower);
+ QFETCH(bool, isUpper);
+
+ QCOMPARE(string.isLower(), isLower);
+ QCOMPARE(string.toLower() == string, isLower);
+ QVERIFY(string.toLower().isLower());
+
+ QCOMPARE(string.isUpper(), isUpper);
+ QCOMPARE(string.toUpper() == string, isUpper);
+ QVERIFY(string.toUpper().isUpper());
}
void tst_QString::toCaseFolded()
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 032f17c0a7..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>
@@ -134,28 +134,30 @@ private slots:
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>");
}
/*
@@ -171,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)
@@ -201,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()
@@ -241,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);
}
}
@@ -307,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)));
@@ -318,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);
}
}
@@ -357,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);
}
}
@@ -475,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);
@@ -593,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
@@ -635,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()
@@ -654,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());
@@ -664,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,
@@ -738,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);
@@ -787,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);
@@ -806,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
@@ -943,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);
@@ -964,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);
}
@@ -989,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);
@@ -1002,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));
@@ -1033,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()
@@ -1066,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);
@@ -1081,7 +973,7 @@ void tst_QStandardItemModel::indexFromItem()
QVERIFY(!noSuchIndex.isValid());
delete dummy;
- noSuchIndex = model.indexFromItem(0);
+ noSuchIndex = model.indexFromItem(nullptr);
QVERIFY(!noSuchIndex.isValid());
}
@@ -1089,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);
@@ -1110,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()
@@ -1175,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));
@@ -1187,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");
}
@@ -1233,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(),
@@ -1257,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);
@@ -1304,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()
@@ -1326,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);
@@ -1361,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);
}
{
@@ -1382,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)
@@ -1395,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);
@@ -1406,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);
@@ -1424,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);
@@ -1436,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);
@@ -1471,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;
}
@@ -1483,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;
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/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 a0082f1e3b..ab7115b74a 100644
--- a/tests/auto/gui/rhi/qshader/tst_qshader.cpp
+++ b/tests/auto/gui/rhi/qshader/tst_qshader.cpp
@@ -43,6 +43,8 @@ private slots:
void mslResourceMapping();
void loadV3();
void serializeShaderDesc();
+ void comparison();
+ void loadV4();
};
static QShader getShader(const QString &name)
@@ -353,36 +355,63 @@ void tst_QShader::serializeShaderDesc()
QShaderDescription desc;
QVERIFY(!desc.isValid());
- const QByteArray data = desc.toCbor();
+ QByteArray data;
+ {
+ QBuffer buf(&data);
+ QDataStream ds(&buf);
+ QVERIFY(buf.open(QIODevice::WriteOnly));
+ desc.serialize(&ds);
+ }
QVERIFY(!data.isEmpty());
- QShaderDescription desc2 = QShaderDescription::fromCbor(data);
- QVERIFY(!desc2.isValid());
+ {
+ 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_v3.frag.qsb"));
+ QShader s = getShader(QLatin1String(":/data/texture_all_v4.frag.qsb"));
QVERIFY(s.isValid());
const QShaderDescription desc = s.description();
QVERIFY(desc.isValid());
- const QByteArray data = desc.toCbor();
+ 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);
+ {
+ QShaderDescription desc2;
+ QVERIFY(!desc2.isValid());
+ QVERIFY(!(desc == desc2));
+ QVERIFY(desc != desc2);
+ }
- desc2 = QShaderDescription::fromCbor(data);
- QVERIFY(desc2.isValid());
- QCOMPARE(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_v3.frag.qsb"));
+ 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());
@@ -393,6 +422,93 @@ void tst_QShader::serializeShaderDesc()
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>
diff --git a/tests/auto/network/access/http2/tst_http2.cpp b/tests/auto/network/access/http2/tst_http2.cpp
index 904cfd52b0..38db74e52c 100644
--- a/tests/auto/network/access/http2/tst_http2.cpp
+++ b/tests/auto/network/access/http2/tst_http2.cpp
@@ -279,7 +279,7 @@ void tst_Http2::singleRequest()
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(reply->isFinished());
}
@@ -444,7 +444,7 @@ void tst_Http2::pushPromise()
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(reply->isFinished());
// Now, the most interesting part!
@@ -466,7 +466,7 @@ void tst_Http2::pushPromise()
QCOMPARE(nSentRequests, 0);
// Decreased by replyFinished():
QCOMPARE(nRequests, 0);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(reply->isFinished());
}
@@ -511,7 +511,7 @@ void tst_Http2::goaway()
QNetworkRequest request(url);
request.setAttribute(QNetworkRequest::Http2AllowedAttribute, QVariant(true));
replies[i] = manager->get(request);
- QCOMPARE(replies[i]->error(), QNetworkReply::NoError);
+ QCOMPARE(replies[i]->networkError(), QNetworkReply::NoError);
void (QNetworkReply::*errorSignal)(QNetworkReply::NetworkError) =
&QNetworkReply::error;
connect(replies[i], errorSignal, this, &tst_Http2::replyFinishedWithError);
@@ -671,7 +671,7 @@ void tst_Http2::connectToHost()
connect(reply, &QNetworkReply::finished, [this, reply]() {
--nRequests;
eventLoop.exitLoop();
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(reply->isFinished());
// Nothing received back:
QVERIFY(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).isNull());
@@ -698,7 +698,7 @@ void tst_Http2::connectToHost()
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(reply->isFinished());
}
@@ -927,10 +927,10 @@ void tst_Http2::replyFinished()
QVERIFY(nRequests);
if (const auto reply = qobject_cast<QNetworkReply *>(sender())) {
- if (reply->error() != QNetworkReply::NoError)
+ if (reply->networkError() != QNetworkReply::NoError)
stopEventLoop();
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
const QVariant http2Used(reply->attribute(QNetworkRequest::Http2WasUsedAttribute));
if (!http2Used.isValid() || !http2Used.toBool())
@@ -960,9 +960,9 @@ void tst_Http2::replyFinishedWithError()
if (const auto reply = qobject_cast<QNetworkReply *>(sender())) {
// For now this is a 'generic' code, it just verifies some error was
// reported without testing its type.
- if (reply->error() == QNetworkReply::NoError)
+ if (reply->networkError() == QNetworkReply::NoError)
stopEventLoop();
- QVERIFY(reply->error() != QNetworkReply::NoError);
+ QVERIFY(reply->networkError() != QNetworkReply::NoError);
}
--nRequests;
diff --git a/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp b/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp
index 182e3e9547..4b6e04f467 100644
--- a/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp
+++ b/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp
@@ -322,10 +322,10 @@ void tst_QAbstractNetworkCache::runTest()
QByteArray secondData = reply2->readAll();
if (!fetchFromCache && cacheLoadControl == QNetworkRequest::AlwaysCache) {
- QCOMPARE(reply2->error(), QNetworkReply::ContentNotFoundError);
+ QCOMPARE(reply2->networkError(), QNetworkReply::ContentNotFoundError);
QCOMPARE(secondData, QByteArray());
} else {
- QCOMPARE(reply2->error(), QNetworkReply::NoError);
+ QCOMPARE(reply2->networkError(), QNetworkReply::NoError);
QCOMPARE(QString(secondData), QString(goodData));
QCOMPARE(secondData, goodData);
QCOMPARE(reply2->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
@@ -375,12 +375,12 @@ void tst_QAbstractNetworkCache::checkSynchronous()
QByteArray secondData = reply2->readAll();
if (!fetchFromCache && cacheLoadControl == QNetworkRequest::AlwaysCache) {
- QCOMPARE(reply2->error(), QNetworkReply::ContentNotFoundError);
+ QCOMPARE(reply2->networkError(), QNetworkReply::ContentNotFoundError);
QCOMPARE(secondData, QByteArray());
} else {
- if (reply2->error() != QNetworkReply::NoError)
+ if (reply2->networkError() != QNetworkReply::NoError)
qDebug() << reply2->errorString();
- QCOMPARE(reply2->error(), QNetworkReply::NoError);
+ QCOMPARE(reply2->networkError(), QNetworkReply::NoError);
QCOMPARE(QString(secondData), QString(goodData));
QCOMPARE(secondData, goodData);
QCOMPARE(reply2->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
index b0b9560d5a..b8f69cb393 100644
--- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -1426,7 +1426,7 @@ QString tst_QNetworkReply::runSimpleRequest(QNetworkAccessManager::Operation op,
if (request.attribute(QNetworkRequest::SynchronousRequestAttribute).toBool()) {
if (reply->isFinished())
- code = reply->error() != QNetworkReply::NoError ? Failure : Success;
+ code = reply->networkError() != QNetworkReply::NoError ? Failure : Success;
else
code = Failure;
} else {
@@ -1491,10 +1491,10 @@ static QByteArray msgWaitForFinished(QNetworkReplyPtr &reply)
debug << reply->url();
if (!reply->isFinished())
debug << "timed out.";
- else if (reply->error() == QNetworkReply::NoError)
+ else if (reply->networkError() == QNetworkReply::NoError)
debug << "finished.";
else
- debug << "failed: #" << reply->error() << reply->errorString();
+ debug << "failed: #" << reply->networkError() << reply->errorString();
return result.toLocal8Bit();
}
@@ -1642,7 +1642,7 @@ void tst_QNetworkReply::stateChecking()
QCOMPARE(int(reply->operation()), int(QNetworkAccessManager::GetOperation));
// error and not error are OK since we might change underlying behaviour again
if (!reply->isFinished())
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->url(), url);
reply->abort();
@@ -1659,7 +1659,7 @@ void tst_QNetworkReply::invalidProtocol()
QCOMPARE(result, errorMsg);
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::ProtocolUnknownError);
+ QCOMPARE(reply->networkError(), QNetworkReply::ProtocolUnknownError);
}
void tst_QNetworkReply::getFromData_data()
@@ -1751,7 +1751,7 @@ void tst_QNetworkReply::getFromData()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, req, reply));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentTypeHeader).toString(), mimeType);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), qint64(expected.size()));
@@ -1790,7 +1790,7 @@ void tst_QNetworkReply::getFromFile()
QVERIFY(waitForFinish(reply) != Timeout);
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), file.size());
QCOMPARE(reply->readAll(), data);
@@ -1807,7 +1807,7 @@ void tst_QNetworkReply::getFromFile()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply));
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), file.size());
QCOMPARE(qint64(reply->readAll().size()), file.size());
@@ -1846,7 +1846,7 @@ void tst_QNetworkReply::getFromFileSpecial()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply));
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), resource.size());
QCOMPARE(reply->readAll(), resource.readAll());
@@ -1879,7 +1879,7 @@ void tst_QNetworkReply::getFromFtp()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply));
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size());
QCOMPARE(reply->readAll(), reference.readAll());
@@ -1892,7 +1892,7 @@ void tst_QNetworkReply::getFromFtpAfterError()
invalidReply.reset(manager.get(invalidRequest));
QSignalSpy spy(invalidReply.data(), SIGNAL(error(QNetworkReply::NetworkError)));
QVERIFY(spy.wait());
- QCOMPARE(invalidReply->error(), QNetworkReply::ContentNotFoundError);
+ QCOMPARE(invalidReply->networkError(), QNetworkReply::ContentNotFoundError);
QFile reference(testDataDir + "/rfc3252.txt");
QVERIFY(reference.open(QIODevice::ReadOnly));
@@ -1900,7 +1900,7 @@ void tst_QNetworkReply::getFromFtpAfterError()
QNetworkReplyPtr validReply;
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, validRequest, validReply));
QCOMPARE(validReply->url(), validRequest.url());
- QCOMPARE(validReply->error(), QNetworkReply::NoError);
+ QCOMPARE(validReply->networkError(), QNetworkReply::NoError);
QCOMPARE(validReply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size());
QCOMPARE(validReply->readAll(), reference.readAll());
}
@@ -1932,7 +1932,7 @@ void tst_QNetworkReply::getFromHttp()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply));
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QCOMPARE(reply->size(), reference.size());
// only compare when the header is set.
@@ -2027,7 +2027,7 @@ void tst_QNetworkReply::headFromHttp()
QVERIFY(time.elapsed() < 8000); //check authentication didn't wait for the server to timeout the http connection (15s on qt test server)
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
// only compare when the header is set.
if (reply->header(QNetworkRequest::ContentLengthHeader).isValid() && referenceSize >= 0)
@@ -2101,8 +2101,8 @@ static QByteArray msgGetErrors(int waitResult, const QNetworkReplyPtr &reply)
QByteArray result ="waitResult=" + QByteArray::number(waitResult);
if (reply->isFinished())
result += ", finished";
- if (reply->error() != QNetworkReply::NoError)
- result += ", error: " + QByteArray::number(int(reply->error()));
+ if (reply->networkError() != QNetworkReply::NoError)
+ result += ", error: " + QByteArray::number(int(reply->networkError()));
return result;
}
@@ -2132,7 +2132,7 @@ void tst_QNetworkReply::getErrors()
reply->setParent(this); // we have expect-fails
if (!reply->isFinished())
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
// now run the request:
const int waitResult = waitForFinish(reply);
@@ -2142,7 +2142,7 @@ void tst_QNetworkReply::getErrors()
QEXPECT_FAIL("ftp-is-dir", "QFtp cannot provide enough detail", Abort);
// the line below is not necessary
QEXPECT_FAIL("ftp-dir-not-readable", "QFtp cannot provide enough detail", Abort);
- QCOMPARE(reply->error(), QNetworkReply::NetworkError(error));
+ QCOMPARE(reply->networkError(), QNetworkReply::NetworkError(error));
QTEST(reply->readAll().isEmpty(), "dataIsEmpty");
@@ -2201,7 +2201,7 @@ void tst_QNetworkReply::putToFile()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, request, reply, data));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0));
QVERIFY(reply->readAll().isEmpty());
@@ -2231,7 +2231,7 @@ void tst_QNetworkReply::putToFtp()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, request, reply, data));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0));
QVERIFY(reply->readAll().isEmpty());
@@ -2279,7 +2279,7 @@ void tst_QNetworkReply::putToFtpWithInvalidCredentials()
QVERIFY(r->isFinished());
QCOMPARE(r->url(), url);
- QCOMPARE(r->error(), QNetworkReply::AuthenticationRequiredError);
+ QCOMPARE(r->networkError(), QNetworkReply::AuthenticationRequiredError);
r->close();
}
}
@@ -2304,7 +2304,7 @@ void tst_QNetworkReply::putToHttp()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, request, reply, data));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 201); // 201 Created
@@ -2345,7 +2345,7 @@ void tst_QNetworkReply::putToHttpSynchronous()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, request, reply, data));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 201); // 201 Created
@@ -2379,7 +2379,7 @@ void tst_QNetworkReply::postToHttp()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
@@ -2411,7 +2411,7 @@ void tst_QNetworkReply::postToHttpSynchronous()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
@@ -2674,7 +2674,7 @@ void tst_QNetworkReply::postToHttpMultipart()
multiPart->deleteLater();
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
@@ -2716,7 +2716,7 @@ void tst_QNetworkReply::multipartSkipIndices() // QTBUG-32534
QNetworkReplyPtr reply;
RUN_REQUEST(runMultipartRequest(request, reply, multiPart, "POST"));
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
QByteArray line;
@@ -2762,7 +2762,7 @@ void tst_QNetworkReply::putToHttpMultipart()
multiPart->deleteLater();
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
@@ -2801,7 +2801,7 @@ void tst_QNetworkReply::putToHttps()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, request, reply, data));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 201); // 201 Created
@@ -2846,7 +2846,7 @@ void tst_QNetworkReply::putToHttpsSynchronous()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, request, reply, data));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 201); // 201 Created
@@ -2884,7 +2884,7 @@ void tst_QNetworkReply::postToHttps()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
@@ -2920,7 +2920,7 @@ void tst_QNetworkReply::postToHttpsSynchronous()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
@@ -2965,7 +2965,7 @@ void tst_QNetworkReply::postToHttpsMultipart()
multiPart->deleteLater();
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
@@ -3018,7 +3018,7 @@ void tst_QNetworkReply::deleteFromHttp()
QNetworkReplyPtr reply;
runSimpleRequest(QNetworkAccessManager::DeleteOperation, request, reply, 0);
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), error);
+ QCOMPARE(reply->networkError(), error);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), resultCode);
}
@@ -3068,19 +3068,19 @@ void tst_QNetworkReply::putGetDeleteGetFromHttp()
QNetworkReplyPtr reply;
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PutOperation, putRequest, reply, 0));
- QCOMPARE(reply->error(), putError);
+ QCOMPARE(reply->networkError(), putError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), putResultCode);
runSimpleRequest(QNetworkAccessManager::GetOperation, putRequest, reply, 0);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
runSimpleRequest(QNetworkAccessManager::DeleteOperation, deleteRequest, reply, 0);
- QCOMPARE(reply->error(), deleteError);
+ QCOMPARE(reply->networkError(), deleteError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), deleteResultCode);
runSimpleRequest(QNetworkAccessManager::GetOperation, get2Request, reply, 0);
- QCOMPARE(reply->error(), get2Error);
+ QCOMPARE(reply->networkError(), get2Error);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), get2ResultCode);
}
@@ -3125,7 +3125,7 @@ void tst_QNetworkReply::connectToIPv6Address()
QVERIFY(server.receivedData.contains(hostinfo));
QCOMPARE(content, dataToSend);
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), error);
+ QCOMPARE(reply->networkError(), error);
}
void tst_QNetworkReply::sendCustomRequestToHttp_data()
@@ -3171,7 +3171,7 @@ void tst_QNetworkReply::sendCustomRequestToHttp()
runCustomRequest(request, reply, verb, device);
QCOMPARE(reply->url(), url);
QFETCH(QNetworkReply::NetworkError, error);
- QCOMPARE(reply->error(), error);
+ QCOMPARE(reply->networkError(), error);
QFETCH(int, resultCode);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), resultCode);
QFETCH(QByteArray, expectedContent);
@@ -3207,7 +3207,7 @@ void tst_QNetworkReply::ioGetFromData()
QVERIFY(!QTestEventLoop::instance().timeout());
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QFETCH(QByteArray, data);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toInt(), data.size());
@@ -3243,7 +3243,7 @@ void tst_QNetworkReply::ioGetFromFileSpecial()
QVERIFY(!QTestEventLoop::instance().timeout());
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), resource.size());
QCOMPARE(qint64(reader.data.size()), resource.size());
@@ -3276,7 +3276,7 @@ void tst_QNetworkReply::ioGetFromFile()
QVERIFY(!QTestEventLoop::instance().timeout());
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), file.size());
QCOMPARE(qint64(reader.data.size()), file.size());
@@ -3307,7 +3307,7 @@ void tst_QNetworkReply::ioGetFromFtp()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QFETCH(qint64, expectedSize);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), expectedSize);
@@ -3337,8 +3337,8 @@ void tst_QNetworkReply::ioGetFromFtpWithReuse()
QCOMPARE(reply1->url(), request.url());
QCOMPARE(reply2->url(), request.url());
- QCOMPARE(reply1->error(), QNetworkReply::NoError);
- QCOMPARE(reply2->error(), QNetworkReply::NoError);
+ QCOMPARE(reply1->networkError(), QNetworkReply::NoError);
+ QCOMPARE(reply2->networkError(), QNetworkReply::NoError);
QCOMPARE(qint64(reader1.data.size()), reference.size());
QCOMPARE(qint64(reader2.data.size()), reference.size());
@@ -3362,7 +3362,7 @@ void tst_QNetworkReply::ioGetFromHttp()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size());
@@ -3388,8 +3388,8 @@ void tst_QNetworkReply::ioGetFromHttpWithReuseParallel()
QCOMPARE(reply1->url(), request.url());
QCOMPARE(reply2->url(), request.url());
- QCOMPARE(reply1->error(), QNetworkReply::NoError);
- QCOMPARE(reply2->error(), QNetworkReply::NoError);
+ QCOMPARE(reply1->networkError(), QNetworkReply::NoError);
+ QCOMPARE(reply2->networkError(), QNetworkReply::NoError);
QCOMPARE(reply1->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QCOMPARE(reply2->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
@@ -3416,7 +3416,7 @@ void tst_QNetworkReply::ioGetFromHttpWithReuseSequential()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size());
@@ -3434,7 +3434,7 @@ void tst_QNetworkReply::ioGetFromHttpWithReuseSequential()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size());
@@ -3557,7 +3557,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuth()
QVERIFY(replySync->isFinished()); // synchronous
if (expectedAuth) {
// bad credentials in a synchronous request should just fail
- QCOMPARE(replySync->error(), QNetworkReply::AuthenticationRequiredError);
+ QCOMPARE(replySync->networkError(), QNetworkReply::AuthenticationRequiredError);
} else {
QCOMPARE(authspy.count(), 0);
@@ -3583,7 +3583,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuth()
QVERIFY(replySync->isFinished()); // synchronous
if (expectedAuth) {
// bad credentials in a synchronous request should just fail
- QCOMPARE(replySync->error(), QNetworkReply::AuthenticationRequiredError);
+ QCOMPARE(replySync->networkError(), QNetworkReply::AuthenticationRequiredError);
} else {
QCOMPARE(authspy.count(), 0);
@@ -3610,7 +3610,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuthSynchronous()
QSignalSpy authspy(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)));
QNetworkReplyPtr replySync(manager.get(request));
QVERIFY(replySync->isFinished()); // synchronous
- QCOMPARE(replySync->error(), QNetworkReply::AuthenticationRequiredError);
+ QCOMPARE(replySync->networkError(), QNetworkReply::AuthenticationRequiredError);
QCOMPARE(authspy.count(), 0);
QCOMPARE(replySync->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 401);
}
@@ -3715,7 +3715,7 @@ void tst_QNetworkReply::ioGetFromHttpWithProxyAuthSynchronous()
QNetworkReplyPtr replySync(manager.get(request));
manager.setProxy(QNetworkProxy()); // reset
QVERIFY(replySync->isFinished()); // synchronous
- QCOMPARE(replySync->error(), QNetworkReply::ProxyAuthenticationRequiredError);
+ QCOMPARE(replySync->networkError(), QNetworkReply::ProxyAuthenticationRequiredError);
QCOMPARE(authspy.count(), 0);
QCOMPARE(replySync->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 407);
}
@@ -3771,9 +3771,9 @@ void tst_QNetworkReply::ioGetFromHttpWithSocksProxy()
QVERIFY(!reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).isValid());
QVERIFY(reader.data.isEmpty());
- QVERIFY(int(reply->error()) > 0);
+ QVERIFY(int(reply->networkError()) > 0);
QEXPECT_FAIL("", "QTcpSocket doesn't return enough information yet", Continue);
- QCOMPARE(int(reply->error()), int(QNetworkReply::ProxyConnectionRefusedError));
+ QCOMPARE(int(reply->networkError()), int(QNetworkReply::ProxyConnectionRefusedError));
QCOMPARE(authspy.count(), 0);
}
@@ -3853,7 +3853,7 @@ void tst_QNetworkReply::ioGetFromHttpsWithSslHandshakeError()
QCOMPARE(waitForFinish(reply), int(Failure));
- QCOMPARE(reply->error(), QNetworkReply::SslHandshakeFailedError);
+ QCOMPARE(reply->networkError(), QNetworkReply::SslHandshakeFailedError);
QCOMPARE(sslspy.count(), 0);
}
#endif
@@ -3913,7 +3913,7 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer()
QCOMPARE(reply->url(), request.url());
QCOMPARE(spy.count(), 1);
- QVERIFY(reply->error() != QNetworkReply::NoError);
+ QVERIFY(reply->networkError() != QNetworkReply::NoError);
}
void tst_QNetworkReply::ioGetFromHttpStatus100_data()
@@ -3942,7 +3942,7 @@ void tst_QNetworkReply::ioGetFromHttpStatus100()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), statusCode);
QVERIFY(reply->rawHeader("bla").isNull());
}
@@ -3965,7 +3965,7 @@ void tst_QNetworkReply::ioGetFromHttpNoHeaders()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
}
@@ -4404,7 +4404,7 @@ void tst_QNetworkReply::ioGetWithManyProxies()
QFETCH(QNetworkReply::NetworkError, expectedError);
QEXPECT_FAIL("ftp-on-socks", "QFtp is too limited and won't accept non-FTP proxies", Abort);
- QCOMPARE(reply->error(), expectedError);
+ QCOMPARE(reply->networkError(), expectedError);
// Verify that the factory was called properly
QCOMPARE(proxyFactory->callCount, 1);
@@ -4456,7 +4456,7 @@ void tst_QNetworkReply::ioPutToFileFromFile()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0));
QVERIFY(reply->readAll().isEmpty());
@@ -4489,10 +4489,10 @@ void tst_QNetworkReply::ioPutToFileFromSocket()
socketpair.endPoints[0]->close();
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0));
QVERIFY(reply->readAll().isEmpty());
@@ -4537,10 +4537,10 @@ void tst_QNetworkReply::ioPutToFileFromLocalSocket()
QEXPECT_FAIL("", "QTBUG-18385", Abort);
#endif
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0));
QVERIFY(reply->readAll().isEmpty());
@@ -4589,7 +4589,7 @@ void tst_QNetworkReply::ioPutToFileFromProcess()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0));
QVERIFY(reply->readAll().isEmpty());
@@ -4623,7 +4623,7 @@ void tst_QNetworkReply::ioPutToFtpFromFile()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0));
QVERIFY(reply->readAll().isEmpty());
@@ -4672,7 +4672,7 @@ void tst_QNetworkReply::ioPutToHttpFromFile()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
// verify that the HTTP status code is 201 Created
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 201);
@@ -4687,7 +4687,7 @@ void tst_QNetworkReply::ioPutToHttpFromFile()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
QCOMPARE(reply->readAll(), sourceFile.readAll());
@@ -4713,7 +4713,7 @@ void tst_QNetworkReply::ioPostToHttpFromFile()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
// verify that the HTTP status code is 200 Ok
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
@@ -4803,10 +4803,10 @@ void tst_QNetworkReply::ioPostToHttpFromSocket()
this, SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
disconnect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
this, SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
// verify that the HTTP status code is 200 Ok
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
@@ -4866,10 +4866,10 @@ void tst_QNetworkReply::ioPostToHttpFromSocketSynchronous()
QVERIFY(reply->isFinished());
socketpair.endPoints[0]->close();
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
// verify that the HTTP status code is 200 Ok
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
@@ -4989,7 +4989,7 @@ void tst_QNetworkReply::ioPostToHttpNoBufferFlag()
this, SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
// verify: error code is QNetworkReply::ContentReSendError
- QCOMPARE(reply->error(), QNetworkReply::ContentReSendError);
+ QCOMPARE(reply->networkError(), QNetworkReply::ContentReSendError);
}
#ifndef QT_NO_SSL
@@ -5171,7 +5171,7 @@ void tst_QNetworkReply::ioGetFromBuiltinHttp()
<< "(it received" << reader.totalBytesRead << "bytes in" << elapsedTime << "ms)";
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), (qint64)testData.size());
@@ -5407,7 +5407,7 @@ void tst_QNetworkReply::httpCanReadLine()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(reply->canReadLine());
QVERIFY(!reply->readAll().isEmpty());
@@ -5466,7 +5466,7 @@ void tst_QNetworkReply::rateControl()
sender.wait();
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(sender.transferRate != -1);
int minRate = rate * 1024 * 9 / 10;
@@ -5616,11 +5616,11 @@ void tst_QNetworkReply::chaining()
QCOMPARE(waitForFinish(putReply), int(Success));
QCOMPARE(getReply->url(), QUrl::fromLocalFile(sourceFile.fileName()));
- QCOMPARE(getReply->error(), QNetworkReply::NoError);
+ QCOMPARE(getReply->networkError(), QNetworkReply::NoError);
QCOMPARE(getReply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), sourceFile.size());
QCOMPARE(putReply->url(), url);
- QCOMPARE(putReply->error(), QNetworkReply::NoError);
+ QCOMPARE(putReply->networkError(), QNetworkReply::NoError);
QCOMPARE(putReply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), Q_INT64_C(0));
QVERIFY(putReply->readAll().isEmpty());
@@ -5691,7 +5691,7 @@ void tst_QNetworkReply::receiveCookiesFromHttp()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
@@ -5723,7 +5723,7 @@ void tst_QNetworkReply::receiveCookiesFromHttpSynchronous()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::PostOperation, request, reply, data));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
@@ -5786,7 +5786,7 @@ void tst_QNetworkReply::sendCookies()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
@@ -5815,7 +5815,7 @@ void tst_QNetworkReply::sendCookiesSynchronous()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
@@ -5908,9 +5908,6 @@ void tst_QNetworkReply::httpProxyCommands()
// wait for the finished signal
QVERIFY(waitForFinish(reply) != Timeout);
- //qDebug() << reply->error() << reply->errorString();
- //qDebug() << proxyServer.receivedData;
-
// we don't really care if the request succeeded
// especially since it won't succeed in the HTTPS case
// so just check that the command was correct
@@ -5993,8 +5990,6 @@ void tst_QNetworkReply::httpProxyCommandsSynchronous()
QVERIFY(reply->isFinished()); // synchronous
manager.setProxy(QNetworkProxy());
- //qDebug() << reply->error() << reply->errorString();
-
// we don't really care if the request succeeded
// especially since it won't succeed in the HTTPS case
// so just check that the command was correct
@@ -6034,11 +6029,11 @@ void tst_QNetworkReply::proxyChange()
QVERIFY(!QTestEventLoop::instance().timeout());
// verify that the replies succeeded
- QCOMPARE(reply1->error(), QNetworkReply::NoError);
+ QCOMPARE(reply1->networkError(), QNetworkReply::NoError);
QCOMPARE(reply1->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QCOMPARE(reply1->size(), 1);
- QCOMPARE(reply2->error(), QNetworkReply::NoError);
+ QCOMPARE(reply2->networkError(), QNetworkReply::NoError);
QCOMPARE(reply2->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QVERIFY(reply2->size() > 1);
@@ -6055,7 +6050,7 @@ void tst_QNetworkReply::proxyChange()
QCOMPARE(waitForFinish(reply3), int(Failure));
- QVERIFY(int(reply3->error()) > 0);
+ QVERIFY(int(reply3->networkError()) > 0);
}
#endif // !QT_NO_NETWORKPROXY
@@ -6088,7 +6083,7 @@ void tst_QNetworkReply::authorizationError()
QNetworkRequest request(url);
QNetworkReplyPtr reply(manager.get(request));
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QSignalSpy errorSpy(reply.data(), SIGNAL(error(QNetworkReply::NetworkError)));
QSignalSpy finishedSpy(reply.data(), SIGNAL(finished()));
@@ -6100,7 +6095,7 @@ void tst_QNetworkReply::authorizationError()
QFETCH(int, finishedSignalCount);
QCOMPARE(finishedSpy.count(), finishedSignalCount);
QFETCH(int, error);
- QCOMPARE(reply->error(), QNetworkReply::NetworkError(error));
+ QCOMPARE(reply->networkError(), QNetworkReply::NetworkError(error));
QFETCH(int, httpStatusCode);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), httpStatusCode);
@@ -6168,7 +6163,7 @@ void tst_QNetworkReply::httpReUsingConnectionSequential()
connect(reply1, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
QTestEventLoop::instance().enterLoop(2);
QVERIFY(!QTestEventLoop::instance().timeout());
- QVERIFY(!reply1->error());
+ QVERIFY(!reply1->networkError());
int reply1port = server.client->peerPort();
if (doDeleteLater)
@@ -6179,7 +6174,7 @@ void tst_QNetworkReply::httpReUsingConnectionSequential()
connect(reply2, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
QTestEventLoop::instance().enterLoop(2);
QVERIFY(!QTestEventLoop::instance().timeout());
- QVERIFY(!reply2->error());
+ QVERIFY(!reply2->networkError());
int reply2port = server.client->peerPort(); // should still be the same object
QVERIFY(reply1port > 0);
@@ -6202,7 +6197,7 @@ public:
public slots:
void finishedSlot()
{
- QVERIFY(!reply1->error());
+ QVERIFY(!reply1->networkError());
QFETCH(bool, doDeleteLater);
if (doDeleteLater) {
@@ -6244,7 +6239,7 @@ void tst_QNetworkReply::httpReUsingConnectionFromFinishedSlot()
QVERIFY(!QTestEventLoop::instance().timeout());
QVERIFY(helper.reply2);
- QVERIFY(!helper.reply2->error());
+ QVERIFY(!helper.reply2->networkError());
QCOMPARE(server.totalConnections, 1);
}
@@ -6271,7 +6266,7 @@ public slots:
requestsFinishedCount++;
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
- QVERIFY(!reply->error());
+ QVERIFY(!reply->networkError());
QCOMPARE(reply->bytesAvailable(), 27906);
if (requestsFinishedCount == 60) {
@@ -6289,7 +6284,7 @@ public slots:
void readyReadSlot()
{
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
- QVERIFY(!reply->error());
+ QVERIFY(!reply->networkError());
if (requestsStartedCount_readyRead < 30 && reply->bytesAvailable() > 27906/2) {
startOne();
@@ -6351,7 +6346,7 @@ void tst_QNetworkReply::ignoreSslErrorsList()
QVERIFY(waitForFinish(reply) != Timeout);
QFETCH(QNetworkReply::NetworkError, expectedNetworkError);
- QCOMPARE(reply->error(), expectedNetworkError);
+ QCOMPARE(reply->networkError(), expectedNetworkError);
}
void tst_QNetworkReply::ignoreSslErrorsListWithSlot_data()
@@ -6382,7 +6377,7 @@ void tst_QNetworkReply::ignoreSslErrorsListWithSlot()
QVERIFY(waitForFinish(reply) != Timeout);
QFETCH(QNetworkReply::NetworkError, expectedNetworkError);
- QCOMPARE(reply->error(), expectedNetworkError);
+ QCOMPARE(reply->networkError(), expectedNetworkError);
}
void tst_QNetworkReply::sslConfiguration_data()
@@ -6461,7 +6456,7 @@ void tst_QNetworkReply::sslConfiguration()
QFETCH(bool, works);
QNetworkReply::NetworkError expectedError = works ? QNetworkReply::NoError : QNetworkReply::SslHandshakeFailedError;
- QCOMPARE(reply->error(), expectedError);
+ QCOMPARE(reply->networkError(), expectedError);
}
#ifdef QT_BUILD_INTERNAL
@@ -6496,7 +6491,7 @@ void tst_QNetworkReply::sslSessionSharing()
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
QTestEventLoop::instance().enterLoop(20);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
reply->deleteLater();
// now send several requests at the same time, so we open more sockets and reuse the SSL session
@@ -6521,7 +6516,7 @@ void tst_QNetworkReply::sslSessionSharingHelperSlot()
sslSessionSharingWasUsed = true;
QString urlQueryString = reply->url().query();
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
count++;
@@ -6562,7 +6557,7 @@ void tst_QNetworkReply::sslSessionSharingFromPersistentSession()
connect(warmupReply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
QTestEventLoop::instance().enterLoop(20);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(warmupReply->error(), QNetworkReply::NoError);
+ QCOMPARE(warmupReply->networkError(), QNetworkReply::NoError);
QByteArray sslSession = warmupReply->sslConfiguration().sessionTicket();
QCOMPARE(!sslSession.isEmpty(), sessionPersistenceEnabled);
@@ -6590,7 +6585,7 @@ void tst_QNetworkReply::sslSessionSharingFromPersistentSession()
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
QTestEventLoop::instance().enterLoop(20);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
bool sslSessionSharingWasUsedInReply = QSslConfigurationPrivate::peerSessionWasShared(
reply->sslConfiguration());
@@ -6644,7 +6639,7 @@ void tst_QNetworkReply::symbianOpenCDataUrlCrash()
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, req, reply));
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), qint64(598));
}
@@ -6864,7 +6859,7 @@ void tst_QNetworkReply::getFromHttpIntoBuffer2()
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
QTestEventLoop::instance().enterLoop(40);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(!QTestEventLoop::instance().timeout());
}
@@ -6882,7 +6877,7 @@ void tst_QNetworkReply::getFromHttpIntoBufferCanReadLine()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(reply->canReadLine());
QCOMPARE(reply->read(1), QByteArray("x"));
QVERIFY(reply->canReadLine());
@@ -6908,7 +6903,7 @@ void tst_QNetworkReply::ioGetFromHttpWithoutContentLength()
QCOMPARE(reply->url(), request.url());
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
}
// Is handled somewhere else too, introduced this special test to have it more accessible
@@ -6930,7 +6925,7 @@ void tst_QNetworkReply::ioGetFromHttpBrokenChunkedEncoding()
QVERIFY(!QTestEventLoop::instance().timeout());
QEXPECT_FAIL(0, "We should close the socket and not just do nothing", Continue);
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
}
// TODO:
@@ -6954,7 +6949,7 @@ void tst_QNetworkReply::qtbug12908compressedHttpReply()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->size(), qint64(16384));
QCOMPARE(reply->readAll(), QByteArray(16384, '\0'));
}
@@ -6977,7 +6972,7 @@ void tst_QNetworkReply::compressedHttpReplyBrokenGzip()
QCOMPARE(waitForFinish(reply), int(Failure));
- QCOMPARE(reply->error(), QNetworkReply::ProtocolFailure);
+ QCOMPARE(reply->networkError(), QNetworkReply::ProtocolFailure);
}
// TODO add similar test for FTP
@@ -7032,7 +7027,7 @@ void tst_QNetworkReply::getFromUnreachableIp()
QCOMPARE(waitForFinish(reply), int(Failure));
- QVERIFY(reply->error() != QNetworkReply::NoError);
+ QVERIFY(reply->networkError() != QNetworkReply::NoError);
}
void tst_QNetworkReply::qtbug4121unknownAuthentication()
@@ -7056,7 +7051,7 @@ void tst_QNetworkReply::qtbug4121unknownAuthentication()
QCOMPARE(finishedSpy.count(), 1);
QCOMPARE(errorSpy.count(), 1);
- QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError);
+ QCOMPARE(reply->networkError(), QNetworkReply::AuthenticationRequiredError);
}
#ifndef QT_NO_NETWORKPROXY
@@ -7147,7 +7142,7 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
QTestEventLoop::instance().enterLoop(10);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(reply->error(), QNetworkReply::ProxyAuthenticationRequiredError);
+ QCOMPARE(reply->networkError(), QNetworkReply::ProxyAuthenticationRequiredError);
QCOMPARE(authSpy.count(), 0);
QCOMPARE(proxyAuthSpy.count(), 1);
proxyAuthSpy.clear();
@@ -7161,8 +7156,8 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
QVERIFY(!QTestEventLoop::instance().timeout());
// Work round known quirk in the old test server (danted -v < v1.1.19):
- if (reply->error() != QNetworkReply::HostNotFoundError)
- QCOMPARE(reply->error(), QNetworkReply::ProxyAuthenticationRequiredError);
+ if (reply->networkError() != QNetworkReply::HostNotFoundError)
+ QCOMPARE(reply->networkError(), QNetworkReply::ProxyAuthenticationRequiredError);
QCOMPARE(authSpy.count(), 0);
QVERIFY(proxyAuthSpy.count() > 0);
proxyAuthSpy.clear();
@@ -7188,7 +7183,7 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
QTestEventLoop::instance().enterLoop(10);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError);
+ QCOMPARE(reply->networkError(), QNetworkReply::AuthenticationRequiredError);
QVERIFY(authSpy.count() > 0);
authSpy.clear();
if (proxyAuth) {
@@ -7204,7 +7199,7 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
QTestEventLoop::instance().enterLoop(10);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError);
+ QCOMPARE(reply->networkError(), QNetworkReply::AuthenticationRequiredError);
QVERIFY(authSpy.count() > 0);
authSpy.clear();
if (proxyAuth) {
@@ -7222,7 +7217,7 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
QTestEventLoop::instance().enterLoop(10);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(authSpy.count() > 0);
authSpy.clear();
if (proxyAuth) {
@@ -7237,7 +7232,7 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
QTestEventLoop::instance().enterLoop(10);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
//should be supplied from cache
QCOMPARE(authSpy.count(), 0);
authSpy.clear();
@@ -7268,7 +7263,7 @@ void tst_QNetworkReply::authenticationWithDifferentRealm()
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
QTestEventLoop::instance().enterLoop(10);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
helper.httpUserName = "httptest";
helper.httpPassword = "httptest";
@@ -7278,7 +7273,7 @@ void tst_QNetworkReply::authenticationWithDifferentRealm()
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
QTestEventLoop::instance().enterLoop(10);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
}
#endif // !QT_NO_NETWORKPROXY
@@ -7329,7 +7324,7 @@ void tst_QNetworkReply::qtbug13431replyThrottling()
QTestEventLoop::instance().enterLoop(30);
QVERIFY(!QTestEventLoop::instance().timeout());
QVERIFY(helper.m_reply->isFinished());
- QCOMPARE(helper.m_reply->error(), QNetworkReply::NoError);
+ QCOMPARE(helper.m_reply->networkError(), QNetworkReply::NoError);
}
void tst_QNetworkReply::httpWithNoCredentialUsage()
@@ -7378,7 +7373,7 @@ void tst_QNetworkReply::httpWithNoCredentialUsage()
QCOMPARE(finishedSpy.count(), 1);
QCOMPARE(errorSpy.count(), 1);
- QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError);
+ QCOMPARE(reply->networkError(), QNetworkReply::AuthenticationRequiredError);
}
}
@@ -7394,7 +7389,7 @@ void tst_QNetworkReply::qtbug15311doubleContentLength()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->size(), qint64(3));
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), qint64(3));
QCOMPARE(reply->rawHeader("Content-length"), QByteArray("3, 3"));
@@ -7413,7 +7408,7 @@ void tst_QNetworkReply::qtbug18232gzipContentLengthZero()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->size(), qint64(0));
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), qint64(0));
QCOMPARE(reply->readAll(), QByteArray());
@@ -7434,7 +7429,7 @@ void tst_QNetworkReply::qtbug22660gzipNoContentLengthEmptyContent()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->size(), qint64(0));
QVERIFY(!reply->header(QNetworkRequest::ContentLengthHeader).isValid());
QCOMPARE(reply->readAll(), QByteArray());
@@ -7507,7 +7502,7 @@ void tst_QNetworkReply::qtbug27161httpHeaderMayBeDamaged(){
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->size(), qint64(3));
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), qint64(3));
QCOMPARE(reply->rawHeader("Content-length"), QByteArray("3"));
@@ -7558,7 +7553,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->readAll(), QByteArray("GET"));
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
@@ -7568,7 +7563,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->readAll(), QByteArray("GET"));
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), true);
@@ -7580,7 +7575,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->rawHeader("Content-length"), QByteArray("4"));
QCOMPARE(reply->readAll(), QByteArray("POST"));
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
@@ -7592,7 +7587,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->readAll(), QByteArray("GET"));
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
@@ -7603,7 +7598,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->readAll(), QByteArray("GET"));
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), true);
@@ -7614,7 +7609,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
server.clearHeaderParserState();
@@ -7624,7 +7619,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->readAll(), QByteArray("GET"));
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
@@ -7635,7 +7630,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->readAll(), QByteArray("GET"));
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), true);
}
@@ -7786,7 +7781,7 @@ void tst_QNetworkReply::synchronousRequestSslFailure()
QSignalSpy sslErrorsSpy(&manager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)));
runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply, 0);
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::SslHandshakeFailedError);
+ QCOMPARE(reply->networkError(), QNetworkReply::SslHandshakeFailedError);
QCOMPARE(sslErrorsSpy.count(), 0);
}
#endif
@@ -7828,14 +7823,14 @@ void tst_QNetworkReply::httpAbort()
HttpAbortHelper replyHolder(reply.data());
QTestEventLoop::instance().enterLoop(10);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(reply->error(), QNetworkReply::OperationCanceledError);
+ QCOMPARE(reply->networkError(), QNetworkReply::OperationCanceledError);
QVERIFY(reply->isFinished());
// Abort immediately after the get()
QNetworkReplyPtr reply2(manager.get(request));
connect(reply2, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
reply2->abort();
- QCOMPARE(reply2->error(), QNetworkReply::OperationCanceledError);
+ QCOMPARE(reply2->networkError(), QNetworkReply::OperationCanceledError);
QVERIFY(reply2->isFinished());
// Abort after the finished()
@@ -7846,7 +7841,7 @@ void tst_QNetworkReply::httpAbort()
QVERIFY(reply3->isFinished());
reply3->abort();
- QCOMPARE(reply3->error(), QNetworkReply::NoError);
+ QCOMPARE(reply3->networkError(), QNetworkReply::NoError);
}
void tst_QNetworkReply::dontInsertPartialContentIntoTheCache()
@@ -7893,7 +7888,7 @@ void tst_QNetworkReply::httpUserAgent()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(server.receivedData.contains("\r\nUser-Agent: abcDEFghi\r\n"));
}
@@ -7946,7 +7941,7 @@ void tst_QNetworkReply::synchronousAuthenticationCache()
QNetworkReplyPtr reply(manager.get(request));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError);
+ QCOMPARE(reply->networkError(), QNetworkReply::AuthenticationRequiredError);
}
//2) URL with credentials, we are authenticated
@@ -7957,7 +7952,7 @@ void tst_QNetworkReply::synchronousAuthenticationCache()
QNetworkReplyPtr reply(manager.get(request));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->readAll().constData(), "OK");
}
@@ -7969,7 +7964,7 @@ void tst_QNetworkReply::synchronousAuthenticationCache()
QNetworkReplyPtr reply(manager.get(request));
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->readAll().constData(), "OK");
}
}
@@ -8063,7 +8058,7 @@ void tst_QNetworkReply::ftpAuthentication()
runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply);
QCOMPARE(reply->url(), request.url());
- QCOMPARE(reply->error(), QNetworkReply::NetworkError(error));
+ QCOMPARE(reply->networkError(), QNetworkReply::NetworkError(error));
}
void tst_QNetworkReply::emitErrorForAllReplies() // QTBUG-36890
@@ -8166,7 +8161,7 @@ void tst_QNetworkReply::backgroundRequest()
QNetworkSessionPrivate::setUsagePolicies(*session, original);
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), error);
+ QCOMPARE(reply->networkError(), error);
#endif
}
#endif
@@ -8244,7 +8239,7 @@ void tst_QNetworkReply::backgroundRequestInterruption()
QNetworkSessionPrivate::setUsagePolicies(*session, original);
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), error);
+ QCOMPARE(reply->networkError(), error);
#endif
}
#endif
@@ -8391,7 +8386,7 @@ void tst_QNetworkReply::putWithRateLimiting()
rateLimitedUploadDevice.open(QIODevice::ReadOnly);
RUN_REQUEST(runCustomRequest(request, reply,QByteArray("POST"), &rateLimitedUploadDevice));
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QByteArray uploadedData = reply->readAll();
@@ -8439,7 +8434,7 @@ void tst_QNetworkReply::ioHttpSingleRedirect()
// Reply url is set to the redirect url
QCOMPARE(reply->url(), redirectUrl);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(validateRedirectedResponseHeaders(reply));
}
@@ -8476,7 +8471,7 @@ void tst_QNetworkReply::ioHttpChangeMaxRedirects()
QCOMPARE(redSpy.count(), request.maximumRedirectsAllowed());
QCOMPARE(spy.count(), 1);
- QCOMPARE(reply->error(), QNetworkReply::TooManyRedirectsError);
+ QCOMPARE(reply->networkError(), QNetworkReply::TooManyRedirectsError);
// Increase max redirects to allow successful completion
request.setMaximumRedirectsAllowed(3);
@@ -8488,7 +8483,7 @@ void tst_QNetworkReply::ioHttpChangeMaxRedirects()
QCOMPARE(redSpy2.count(), 2);
QCOMPARE(reply2->url(), server3Url);
- QCOMPARE(reply2->error(), QNetworkReply::NoError);
+ QCOMPARE(reply2->networkError(), QNetworkReply::NoError);
QVERIFY(validateRedirectedResponseHeaders(reply2));
}
@@ -8546,7 +8541,7 @@ void tst_QNetworkReply::ioHttpRedirectErrors()
watchDog.start(5000);
QCOMPARE(eventLoop.exec(), int(Failure));
- QCOMPARE(reply->error(), error);
+ QCOMPARE(reply->networkError(), error);
}
struct SameOriginRedirector : MiniHttpServer
@@ -8704,7 +8699,7 @@ void tst_QNetworkReply::ioHttpRedirectPolicyErrors()
QCOMPARE(waitForFinish(reply), int(Failure));
QCOMPARE(spy.count(), 1);
- QCOMPARE(reply->error(), expectedError);
+ QCOMPARE(reply->networkError(), expectedError);
}
void tst_QNetworkReply::ioHttpUserVerifiedRedirect_data()
@@ -8847,7 +8842,7 @@ void tst_QNetworkReply::ioHttpRedirectFromLocalToRemote()
QCOMPARE(waitForFinish(reply), int(Success));
QCOMPARE(reply->url(), targetUrl);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size());
QCOMPARE(reply->readAll(), reference.readAll());
}
@@ -8966,7 +8961,7 @@ void tst_QNetworkReply::ioHttpRedirectMultipartPost()
multiPart->deleteLater();
QCOMPARE(reply->url(), url);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 OK
@@ -9353,7 +9348,7 @@ void tst_QNetworkReply::getWithTimeout()
QCOMPARE(waitForFinish(reply), int(Success));
QCOMPARE(spy.count(), 0);
- QVERIFY(reply->error() == QNetworkReply::NoError);
+ QVERIFY(reply->networkError() == QNetworkReply::NoError);
request.setTransferTimeout(1000);
server.stopTransfer = true;
@@ -9364,7 +9359,7 @@ void tst_QNetworkReply::getWithTimeout()
QCOMPARE(waitForFinish(reply2), int(Failure));
QCOMPARE(spy2.count(), 1);
- QVERIFY(reply2->error() == QNetworkReply::OperationCanceledError);
+ QVERIFY(reply2->networkError() == QNetworkReply::OperationCanceledError);
request.setTransferTimeout(0);
manager.setTransferTimeout(1000);
@@ -9375,7 +9370,7 @@ void tst_QNetworkReply::getWithTimeout()
QCOMPARE(waitForFinish(reply3), int(Failure));
QCOMPARE(spy3.count(), 1);
- QVERIFY(reply3->error() == QNetworkReply::OperationCanceledError);
+ QVERIFY(reply3->networkError() == QNetworkReply::OperationCanceledError);
manager.setTransferTimeout(0);
}
@@ -9393,7 +9388,7 @@ void tst_QNetworkReply::postWithTimeout()
QCOMPARE(waitForFinish(reply), int(Success));
QCOMPARE(spy.count(), 0);
- QVERIFY(reply->error() == QNetworkReply::NoError);
+ QVERIFY(reply->networkError() == QNetworkReply::NoError);
request.setTransferTimeout(1000);
server.stopTransfer = true;
@@ -9404,7 +9399,7 @@ void tst_QNetworkReply::postWithTimeout()
QCOMPARE(waitForFinish(reply2), int(Failure));
QCOMPARE(spy2.count(), 1);
- QVERIFY(reply2->error() == QNetworkReply::OperationCanceledError);
+ QVERIFY(reply2->networkError() == QNetworkReply::OperationCanceledError);
request.setTransferTimeout(0);
manager.setTransferTimeout(1000);
@@ -9415,7 +9410,7 @@ void tst_QNetworkReply::postWithTimeout()
QCOMPARE(waitForFinish(reply3), int(Failure));
QCOMPARE(spy3.count(), 1);
- QVERIFY(reply3->error() == QNetworkReply::OperationCanceledError);
+ QVERIFY(reply3->networkError() == QNetworkReply::OperationCanceledError);
manager.setTransferTimeout(0);
}
diff --git a/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp b/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp
index afdcc825d8..5dce69bd8c 100644
--- a/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp
+++ b/tests/auto/xml/sax/qxmlinputsource/tst_qxmlinputsource.cpp
@@ -149,7 +149,7 @@ public slots:
void requestFinished(QNetworkReply *reply)
{
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
reply->deleteLater();
}
diff --git a/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp
index 6dd7eaee6b..913316070f 100644
--- a/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -536,7 +536,7 @@ void tst_qnetworkreply::echoPerformance()
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
QTestEventLoop::instance().enterLoop(5);
QVERIFY(!QTestEventLoop::instance().timeout());
- QVERIFY(reply->error() == QNetworkReply::NoError);
+ QVERIFY(reply->networkError() == QNetworkReply::NoError);
delete reply;
}
}
@@ -561,7 +561,7 @@ void tst_qnetworkreply::preConnectEncrypted()
QPair<QNetworkReply *, qint64> normalResult = runGetRequest(&manager, request);
QNetworkReply *normalReply = normalResult.first;
QVERIFY(!QTestEventLoop::instance().timeout());
- QVERIFY(normalReply->error() == QNetworkReply::NoError);
+ QVERIFY(normalReply->networkError() == QNetworkReply::NoError);
qint64 normalElapsed = normalResult.second;
// clear all caches again
@@ -580,7 +580,7 @@ void tst_qnetworkreply::preConnectEncrypted()
QPair<QNetworkReply *, qint64> preConnectResult = runGetRequest(&manager, request);
QNetworkReply *preConnectReply = normalResult.first;
QVERIFY(!QTestEventLoop::instance().timeout());
- QVERIFY(preConnectReply->error() == QNetworkReply::NoError);
+ QVERIFY(preConnectReply->networkError() == QNetworkReply::NoError);
qint64 preConnectElapsed = preConnectResult.second;
qDebug() << request.url().toString() << "full request:" << normalElapsed
<< "ms, pre-connect request:" << preConnectElapsed << "ms, difference:"
@@ -635,7 +635,7 @@ void tst_qnetworkreply::uploadPerformance()
QTimer::singleShot(5000, &generator, SLOT(stop()));
QTestEventLoop::instance().enterLoop(30);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(!QTestEventLoop::instance().timeout());
}
@@ -661,7 +661,7 @@ void tst_qnetworkreply::httpUploadPerformance()
reader.exit();
reader.wait();
QVERIFY(reply->isFinished());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(!QTestEventLoop::instance().timeout());
qDebug() << "tst_QNetworkReply::httpUploadPerformance" << elapsed << "msec, "
@@ -722,7 +722,7 @@ void tst_qnetworkreply::httpDownloadPerformance()
QTime time;
time.start();
QTestEventLoop::instance().enterLoop(40);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(!QTestEventLoop::instance().timeout());
qint64 elapsed = time.elapsed();
@@ -804,7 +804,7 @@ void tst_qnetworkreply::httpDownloadPerformanceDownloadBuffer()
QBENCHMARK_ONCE {
QTestEventLoop::instance().enterLoop(40);
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
QVERIFY(reply->isFinished());
QVERIFY(!QTestEventLoop::instance().timeout());
}
@@ -839,7 +839,7 @@ public slots:
}
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
if (reply) {
- QVERIFY(reply->error() == QNetworkReply::NoError);
+ QVERIFY(reply->networkError() == QNetworkReply::NoError);
qDebug() << "time =" << timeOneRequest.elapsed() << "ms";
timeList.append(timeOneRequest.elapsed());
}
@@ -894,7 +894,7 @@ void tst_qnetworkreply::runHttpsUploadRequest(const QByteArray &data, const QNet
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
QTestEventLoop::instance().enterLoop(15);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->networkError(), QNetworkReply::NoError);
reply->deleteLater();
}
@@ -934,7 +934,7 @@ void tst_qnetworkreply::preConnect()
QPair<QNetworkReply *, qint64> normalResult = runGetRequest(&manager, request);
QNetworkReply *normalReply = normalResult.first;
QVERIFY(!QTestEventLoop::instance().timeout());
- QVERIFY(normalReply->error() == QNetworkReply::NoError);
+ QVERIFY(normalReply->networkError() == QNetworkReply::NoError);
qint64 normalElapsed = normalResult.second;
// clear all caches again
@@ -954,7 +954,7 @@ void tst_qnetworkreply::preConnect()
QPair<QNetworkReply *, qint64> preConnectResult = runGetRequest(&manager, request);
QNetworkReply *preConnectReply = normalResult.first;
QVERIFY(!QTestEventLoop::instance().timeout());
- QVERIFY(preConnectReply->error() == QNetworkReply::NoError);
+ QVERIFY(preConnectReply->networkError() == QNetworkReply::NoError);
qint64 preConnectElapsed = preConnectResult.second;
qDebug() << request.url().toString() << "full request:" << normalElapsed
<< "ms, pre-connect request:" << preConnectElapsed << "ms, difference:"
diff --git a/tests/manual/rhi/cubemap_render/buildshader.bat b/tests/manual/rhi/cubemap_render/buildshader.bat
new file mode 100755
index 0000000000..3886c138d8
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/buildshader.bat
@@ -0,0 +1,6 @@
+qsb --glsl "300 es,120" --hlsl 50 --msl 12 cubemap_oneface.vert -o cubemap_oneface.vert.qsb
+qsb --glsl "300 es,120" --hlsl 50 --msl 12 cubemap_oneface.frag -o cubemap_oneface.frag.qsb
+qsb --glsl "300 es,120" --hlsl 50 --msl 12 cubemap_mrt.vert -o cubemap_mrt.vert.qsb
+qsb --glsl "300 es,120" --hlsl 50 --msl 12 cubemap_mrt.frag -o cubemap_mrt.frag.qsb
+qsb --glsl "300 es,120" --hlsl 50 --msl 12 cubemap_sample.vert -o cubemap_sample.vert.qsb
+qsb --glsl "300 es,120" --hlsl 50 --msl 12 cubemap_sample.frag -o cubemap_sample.frag.qsb
diff --git a/tests/manual/rhi/cubemap_render/cubemap_mrt.frag b/tests/manual/rhi/cubemap_render/cubemap_mrt.frag
new file mode 100644
index 0000000000..06a08f6cd6
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_mrt.frag
@@ -0,0 +1,28 @@
+#version 440
+
+layout(location = 0) out vec4 c0;
+layout(location = 1) out vec4 c1;
+layout(location = 2) out vec4 c2;
+layout(location = 3) out vec4 c3;
+layout(location = 4) out vec4 c4;
+layout(location = 5) out vec4 c5;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ vec3 color0;
+ vec3 color1;
+ vec3 color2;
+ vec3 color3;
+ vec3 color4;
+ vec3 color5;
+} ubuf;
+
+void main()
+{
+ c0 = vec4(ubuf.color0, 1.0);
+ c1 = vec4(ubuf.color1, 1.0);
+ c2 = vec4(ubuf.color2, 1.0);
+ c3 = vec4(ubuf.color3, 1.0);
+ c4 = vec4(ubuf.color4, 1.0);
+ c5 = vec4(ubuf.color5, 1.0);
+}
diff --git a/tests/manual/rhi/cubemap_render/cubemap_mrt.frag.qsb b/tests/manual/rhi/cubemap_render/cubemap_mrt.frag.qsb
new file mode 100644
index 0000000000..7a0be83a81
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_mrt.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/cubemap_render/cubemap_mrt.vert b/tests/manual/rhi/cubemap_render/cubemap_mrt.vert
new file mode 100644
index 0000000000..6d82feccc8
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_mrt.vert
@@ -0,0 +1,20 @@
+#version 440
+
+layout(location = 0) in vec4 position;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ vec3 color0;
+ vec3 color1;
+ vec3 color2;
+ vec3 color3;
+ vec3 color4;
+ vec3 color5;
+} ubuf;
+
+out gl_PerVertex { vec4 gl_Position; };
+
+void main()
+{
+ gl_Position = ubuf.mvp * position;
+}
diff --git a/tests/manual/rhi/cubemap_render/cubemap_mrt.vert.qsb b/tests/manual/rhi/cubemap_render/cubemap_mrt.vert.qsb
new file mode 100644
index 0000000000..9358ac2792
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_mrt.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/cubemap_render/cubemap_oneface.frag b/tests/manual/rhi/cubemap_render/cubemap_oneface.frag
new file mode 100644
index 0000000000..8bafe689be
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_oneface.frag
@@ -0,0 +1,13 @@
+#version 440
+
+layout(location = 0) out vec4 fragColor;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ vec3 color;
+} ubuf;
+
+void main()
+{
+ fragColor = vec4(ubuf.color, 1.0);
+}
diff --git a/tests/manual/rhi/cubemap_render/cubemap_oneface.frag.qsb b/tests/manual/rhi/cubemap_render/cubemap_oneface.frag.qsb
new file mode 100644
index 0000000000..a6187939a0
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_oneface.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/cubemap_render/cubemap_oneface.vert b/tests/manual/rhi/cubemap_render/cubemap_oneface.vert
new file mode 100644
index 0000000000..2db9076a74
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_oneface.vert
@@ -0,0 +1,15 @@
+#version 440
+
+layout(location = 0) in vec4 position;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ vec3 color;
+} ubuf;
+
+out gl_PerVertex { vec4 gl_Position; };
+
+void main()
+{
+ gl_Position = ubuf.mvp * position;
+}
diff --git a/tests/manual/rhi/cubemap_render/cubemap_oneface.vert.qsb b/tests/manual/rhi/cubemap_render/cubemap_oneface.vert.qsb
new file mode 100644
index 0000000000..58772179e5
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_oneface.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/cubemap_render/cubemap_render.cpp b/tests/manual/rhi/cubemap_render/cubemap_render.cpp
new file mode 100644
index 0000000000..a08e96f0c6
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_render.cpp
@@ -0,0 +1,466 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+// Demonstrates rendering to two cubemaps in two different ways:
+// - one by one, to each face,
+// - if the supported max number of color attachments is greater than 4: in
+// one go with all 6 faces attached as render targets.
+//
+// Finally, show what we got in a skybox-ish thing. Press the arrow keys to
+// switch between the two cubemaps. (the only difference should be their
+// background clear color)
+
+#define EXAMPLEFW_KEYPRESS_EVENTS
+#include "../shared/examplefw.h"
+#include "../shared/cube.h"
+
+// each face is 512x512
+static const QSize cubemapSize(512, 512);
+
+// each cubemap face gets a 256x256 quad in the center
+static float halfQuadVertexData[] =
+{ // Y up, CCW
+ -0.5f, 0.5f,
+ -0.5f, -0.5f,
+ 0.5f, -0.5f,
+ 0.5f, 0.5f,
+};
+
+static quint16 halfQuadIndexData[] =
+{
+ 0, 1, 2, 0, 2, 3
+};
+
+struct {
+ QVector<QRhiResource *> releasePool;
+
+ QRhiTexture *cubemap1 = nullptr;
+ QRhiTexture *cubemap2 = nullptr;
+ bool canDoMrt = false;
+
+ QRhiBuffer *half_quad_vbuf = nullptr;
+ QRhiBuffer *half_quad_ibuf = nullptr;
+
+ QRhiBuffer *oneface_ubuf = nullptr;
+ int ubufSizePerFace;
+ QRhiTextureRenderTarget *oneface_rt[6];
+ QRhiRenderPassDescriptor *oneface_rp = nullptr;
+ QRhiShaderResourceBindings *oneface_srb = nullptr;
+ QRhiGraphicsPipeline *oneface_ps = nullptr;
+
+ QRhiBuffer *mrt_ubuf = nullptr;
+ QRhiTextureRenderTarget *mrt_rt = nullptr;
+ QRhiRenderPassDescriptor *mrt_rp = nullptr;
+ QRhiShaderResourceBindings *mrt_srb = nullptr;
+ QRhiGraphicsPipeline *mrt_ps = nullptr;
+
+ QRhiBuffer *vbuf = nullptr;
+ QRhiBuffer *ubuf = nullptr;
+ QRhiSampler *sampler = nullptr;
+ QRhiShaderResourceBindings *srb = nullptr;
+ QRhiGraphicsPipeline *ps = nullptr;
+
+ QRhiResourceUpdateBatch *initialUpdates = nullptr;
+ QMatrix4x4 winProj;
+ float rx = 0;
+} d;
+
+void initializePerFaceRendering(QRhi *rhi)
+{
+ d.cubemap1 = rhi->newTexture(QRhiTexture::RGBA8, cubemapSize, 1, QRhiTexture::CubeMap | QRhiTexture::RenderTarget);
+ d.cubemap1->build();
+ d.releasePool << d.cubemap1;
+
+ d.ubufSizePerFace = rhi->ubufAligned(64 + 12);
+ d.oneface_ubuf = rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, d.ubufSizePerFace * 6);
+ d.oneface_ubuf->build();
+ d.releasePool << d.oneface_ubuf;
+
+ for (int face = 0; face < 6; ++face) {
+ QRhiColorAttachment att(d.cubemap1);
+ att.setLayer(face);
+ QRhiTextureRenderTargetDescription rtDesc(att);
+ d.oneface_rt[face] = rhi->newTextureRenderTarget(rtDesc);
+ if (face == 0) {
+ d.oneface_rp = d.oneface_rt[0]->newCompatibleRenderPassDescriptor();
+ d.releasePool << d.oneface_rp;
+ }
+ d.oneface_rt[face]->setRenderPassDescriptor(d.oneface_rp);
+ d.oneface_rt[face]->build();
+ d.releasePool << d.oneface_rt[face];
+ }
+
+ d.oneface_srb = rhi->newShaderResourceBindings();
+ const QRhiShaderResourceBinding::StageFlags visibility =
+ QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage;
+ d.oneface_srb->setBindings({
+ QRhiShaderResourceBinding::uniformBufferWithDynamicOffset(0, visibility, d.oneface_ubuf, 64 + 12)
+ });
+ d.oneface_srb->build();
+ d.releasePool << d.oneface_srb;
+
+ d.oneface_ps = rhi->newGraphicsPipeline();
+ d.oneface_ps->setShaderStages({
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/cubemap_oneface.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/cubemap_oneface.frag.qsb")) }
+ });
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 2 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
+ });
+ d.oneface_ps->setVertexInputLayout(inputLayout);
+ d.oneface_ps->setShaderResourceBindings(d.oneface_srb);
+ d.oneface_ps->setRenderPassDescriptor(d.oneface_rp);
+ d.oneface_ps->build();
+ d.releasePool << d.oneface_ps;
+
+ // wasteful to duplicate the mvp as well but will do for now
+ for (int face = 0; face < 6; ++face) {
+ const int offset = d.ubufSizePerFace * face;
+ QMatrix4x4 identity;
+ d.initialUpdates->updateDynamicBuffer(d.oneface_ubuf, offset, 64, identity.constData());
+ // will use a different color for each face
+ QColor c;
+ switch (face) {
+ case 0:
+ c = Qt::red;
+ break;
+ case 1:
+ c = Qt::green;
+ break;
+ case 2:
+ c = Qt::blue;
+ break;
+ case 3:
+ c = Qt::yellow;
+ break;
+ case 4:
+ c = Qt::lightGray;
+ break;
+ case 5:
+ c = Qt::cyan;
+ break;
+ }
+ float color[] = { float(c.redF()), float(c.greenF()), float(c.blueF()) };
+ d.initialUpdates->updateDynamicBuffer(d.oneface_ubuf, offset + 64, 12, color);
+ }
+}
+
+// 6 render passes, 1 draw call each, targeting one cubemap face at a time
+void renderPerFace(QRhiCommandBuffer *cb)
+{
+ for (int face = 0; face < 6; ++face) {
+ cb->beginPass(d.oneface_rt[face], Qt::black, { 1.0f, 0 });
+ cb->setGraphicsPipeline(d.oneface_ps);
+ cb->setViewport({ 0, 0,
+ float(d.oneface_rt[face]->pixelSize().width()),
+ float(d.oneface_rt[face]->pixelSize().height()) });
+ const QRhiCommandBuffer::DynamicOffset dynamicOffset(0, face * d.ubufSizePerFace);
+ cb->setShaderResources(nullptr, 1, &dynamicOffset);
+ QRhiCommandBuffer::VertexInput vbufBinding(d.half_quad_vbuf, 0);
+ cb->setVertexInput(0, 1, &vbufBinding, d.half_quad_ibuf, 0, QRhiCommandBuffer::IndexUInt16);
+ cb->drawIndexed(6);
+ cb->endPass();
+ }
+}
+
+void initializeMrtRendering(QRhi *rhi)
+{
+ d.cubemap2 = rhi->newTexture(QRhiTexture::RGBA8, cubemapSize, 1, QRhiTexture::CubeMap | QRhiTexture::RenderTarget);
+ d.cubemap2->build();
+ d.releasePool << d.cubemap2;
+
+ d.mrt_ubuf = rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64 + 6 * 16); // note that vec3 is aligned to 16 bytes
+ d.mrt_ubuf->build();
+ d.releasePool << d.mrt_ubuf;
+
+ QVarLengthArray<QRhiColorAttachment, 6> attachments;
+ for (int face = 0; face < 6; ++face) {
+ QRhiColorAttachment att(d.cubemap2);
+ att.setLayer(face);
+ attachments.append(att);
+ }
+ QRhiTextureRenderTargetDescription rtDesc;
+ rtDesc.setColorAttachments(attachments.cbegin(), attachments.cend());
+ d.mrt_rt = rhi->newTextureRenderTarget(rtDesc);
+ d.mrt_rp = d.mrt_rt->newCompatibleRenderPassDescriptor();
+ d.releasePool << d.mrt_rp;
+ d.mrt_rt->setRenderPassDescriptor(d.mrt_rp);
+ d.mrt_rt->build();
+ d.releasePool << d.mrt_rt;
+
+ d.mrt_srb = rhi->newShaderResourceBindings();
+ const QRhiShaderResourceBinding::StageFlags visibility =
+ QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage;
+ d.mrt_srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, visibility, d.mrt_ubuf)
+ });
+ d.mrt_srb->build();
+ d.releasePool << d.mrt_srb;
+
+ d.mrt_ps = rhi->newGraphicsPipeline();
+ d.mrt_ps->setShaderStages({
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/cubemap_mrt.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/cubemap_mrt.frag.qsb")) }
+ });
+ QVarLengthArray<QRhiGraphicsPipeline::TargetBlend, 6> targetBlends;
+ for (int face = 0; face < 6; ++face)
+ targetBlends.append({}); // default to blend = false, color write = all, which is good
+ d.mrt_ps->setTargetBlends(targetBlends.cbegin(), targetBlends.cend());
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 2 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
+ });
+ d.mrt_ps->setVertexInputLayout(inputLayout);
+ d.mrt_ps->setShaderResourceBindings(d.mrt_srb);
+ d.mrt_ps->setRenderPassDescriptor(d.mrt_rp);
+ d.mrt_ps->build();
+ d.releasePool << d.mrt_ps;
+
+ QMatrix4x4 identity;
+ d.initialUpdates->updateDynamicBuffer(d.mrt_ubuf, 0, 64, identity.constData());
+ for (int face = 0; face < 6; ++face) {
+ const int offset = 64 + face * 16;
+ // will use a different color for each face
+ QColor c;
+ switch (face) {
+ case 0:
+ c = Qt::red;
+ break;
+ case 1:
+ c = Qt::green;
+ break;
+ case 2:
+ c = Qt::blue;
+ break;
+ case 3:
+ c = Qt::yellow;
+ break;
+ case 4:
+ c = Qt::lightGray;
+ break;
+ case 5:
+ c = Qt::cyan;
+ break;
+ }
+ float color[] = { float(c.redF()), float(c.greenF()), float(c.blueF()) };
+ d.initialUpdates->updateDynamicBuffer(d.mrt_ubuf, offset, 12, color);
+ }
+}
+
+// 1 render pass, 1 draw call, with all 6 faces attached and written to
+void renderWithMrt(QRhiCommandBuffer *cb)
+{
+ // use a different clear color to differentiate from cubemap1 (because the
+ // results are expected to be identical otherwise)
+ cb->beginPass(d.mrt_rt, Qt::magenta, { 1.0f, 0 });
+ cb->setGraphicsPipeline(d.mrt_ps);
+ cb->setViewport({ 0, 0,
+ float(d.mrt_rt->pixelSize().width()),
+ float(d.mrt_rt->pixelSize().height()) });
+ cb->setShaderResources();
+ QRhiCommandBuffer::VertexInput vbufBinding(d.half_quad_vbuf, 0);
+ cb->setVertexInput(0, 1, &vbufBinding, d.half_quad_ibuf, 0, QRhiCommandBuffer::IndexUInt16);
+ cb->drawIndexed(6);
+ cb->endPass();
+}
+
+void Window::customInit()
+{
+ d.half_quad_vbuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(halfQuadVertexData));
+ d.half_quad_vbuf->build();
+ d.releasePool << d.half_quad_vbuf;
+
+ d.half_quad_ibuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::IndexBuffer, sizeof(halfQuadIndexData));
+ d.half_quad_ibuf->build();
+ d.releasePool << d.half_quad_ibuf;
+
+ d.initialUpdates = m_r->nextResourceUpdateBatch();
+ d.initialUpdates->uploadStaticBuffer(d.half_quad_vbuf, 0, sizeof(halfQuadVertexData), halfQuadVertexData);
+ d.initialUpdates->uploadStaticBuffer(d.half_quad_ibuf, halfQuadIndexData);
+
+ initializePerFaceRendering(m_r);
+
+ d.canDoMrt = m_r->resourceLimit(QRhi::MaxColorAttachments) >= 6;
+ if (d.canDoMrt)
+ initializeMrtRendering(m_r);
+ else
+ qWarning("Not enough color attachments (need 6, supports %d)", m_r->resourceLimit(QRhi::MaxColorAttachments));
+
+
+ // onscreen stuff
+ d.vbuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(cube));
+ d.vbuf->build();
+ d.releasePool << d.vbuf;
+ d.initialUpdates->uploadStaticBuffer(d.vbuf, cube);
+
+ d.ubuf = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64);
+ d.ubuf->build();
+ d.releasePool << d.ubuf;
+
+ d.sampler = m_r->newSampler(QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None,
+ QRhiSampler::Repeat, QRhiSampler::Repeat);
+ d.sampler->build();
+ d.releasePool << d.sampler;
+
+ d.srb = m_r->newShaderResourceBindings();
+ d.srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, d.ubuf),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, d.cubemap1, d.sampler)
+ });
+ d.srb->build();
+ d.releasePool << d.srb;
+
+ d.ps = m_r->newGraphicsPipeline();
+ d.ps->setDepthTest(true);
+ d.ps->setDepthWrite(true);
+ d.ps->setDepthOp(QRhiGraphicsPipeline::LessOrEqual);
+ d.ps->setCullMode(QRhiGraphicsPipeline::Front); // we are inside the cube so cull front, not back
+ d.ps->setFrontFace(QRhiGraphicsPipeline::CCW); // front is ccw in the cube data
+ QShader vs = getShader(QLatin1String(":/cubemap_sample.vert.qsb"));
+ Q_ASSERT(vs.isValid());
+ QShader fs = getShader(QLatin1String(":/cubemap_sample.frag.qsb"));
+ Q_ASSERT(fs.isValid());
+ d.ps->setShaderStages({
+ { QRhiShaderStage::Vertex, vs },
+ { QRhiShaderStage::Fragment, fs }
+ });
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 3 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float3, 0 }
+ });
+ d.ps->setVertexInputLayout(inputLayout);
+ d.ps->setShaderResourceBindings(d.srb);
+ d.ps->setRenderPassDescriptor(m_rp);
+ d.ps->build();
+ d.releasePool << d.ps;
+
+ if (d.canDoMrt)
+ qDebug("Use the arrow keys to switch between the two generated cubemaps");
+}
+
+void Window::customRelease()
+{
+ qDeleteAll(d.releasePool);
+ d.releasePool.clear();
+}
+
+void Window::customRender()
+{
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ QRhiResourceUpdateBatch *u = m_r->nextResourceUpdateBatch();
+ if (d.initialUpdates) {
+ u->merge(d.initialUpdates);
+ d.initialUpdates->release();
+ d.initialUpdates = nullptr;
+ }
+
+ QMatrix4x4 mvp = m_r->clipSpaceCorrMatrix();
+ mvp.perspective(90.0f, outputSizeInPixels.width() / (float) outputSizeInPixels.height(), 0.01f, 1000.0f);
+ mvp.scale(10);
+ mvp.rotate(d.rx, 1, 0, 0);
+ d.rx += 0.5f;
+ u->updateDynamicBuffer(d.ubuf, 0, 64, mvp.constData());
+
+ cb->resourceUpdate(u);
+
+ renderPerFace(cb);
+
+ if (d.canDoMrt)
+ renderWithMrt(cb);
+
+ cb->beginPass(m_sc->currentFrameRenderTarget(), m_clearColor, { 1.0f, 0 });
+ cb->setGraphicsPipeline(d.ps);
+ cb->setViewport(QRhiViewport(0, 0, outputSizeInPixels.width(), outputSizeInPixels.height()));
+ cb->setShaderResources();
+ const QRhiCommandBuffer::VertexInput vbufBinding(d.vbuf, 0);
+ cb->setVertexInput(0, 1, &vbufBinding);
+ cb->draw(36);
+ cb->endPass();
+}
+
+void Window::keyPressEvent(QKeyEvent *e)
+{
+ switch (e->key()) {
+ case Qt::Key_Left:
+ case Qt::Key_Up:
+ qDebug("Showing first cubemap (generated by rendering to the faces one by one; black background)");
+ d.srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, d.ubuf),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, d.cubemap1, d.sampler)
+ });
+ d.srb->build();
+ break;
+ case Qt::Key_Right:
+ case Qt::Key_Down:
+ if (d.canDoMrt) {
+ qDebug("Showing second cubemap (generated with multiple render targets; magenta background)");
+ d.srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, d.ubuf),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, d.cubemap2, d.sampler)
+ });
+ d.srb->build();
+ }
+ break;
+ default:
+ e->ignore();
+ break;
+ }
+}
diff --git a/tests/manual/rhi/cubemap_render/cubemap_render.pro b/tests/manual/rhi/cubemap_render/cubemap_render.pro
new file mode 100644
index 0000000000..71208cc01f
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_render.pro
@@ -0,0 +1,8 @@
+TEMPLATE = app
+
+QT += gui-private
+
+SOURCES = \
+ cubemap_render.cpp
+
+RESOURCES = cubemap_render.qrc
diff --git a/tests/manual/rhi/cubemap_render/cubemap_render.qrc b/tests/manual/rhi/cubemap_render/cubemap_render.qrc
new file mode 100644
index 0000000000..f6029d3f3a
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_render.qrc
@@ -0,0 +1,10 @@
+<!DOCTYPE RCC><RCC version="1.0">
+ <qresource>
+ <file>cubemap_oneface.vert.qsb</file>
+ <file>cubemap_oneface.frag.qsb</file>
+ <file>cubemap_mrt.vert.qsb</file>
+ <file>cubemap_mrt.frag.qsb</file>
+ <file>cubemap_sample.vert.qsb</file>
+ <file>cubemap_sample.frag.qsb</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/rhi/cubemap_render/cubemap_sample.frag b/tests/manual/rhi/cubemap_render/cubemap_sample.frag
new file mode 100644
index 0000000000..13a365ed0c
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_sample.frag
@@ -0,0 +1,10 @@
+#version 440
+
+layout(location = 0) in vec3 v_coord;
+layout(location = 0) out vec4 fragColor;
+layout(binding = 1) uniform samplerCube tex;
+
+void main()
+{
+ fragColor = vec4(texture(tex, v_coord).rgb, 1.0);
+}
diff --git a/tests/manual/rhi/cubemap_render/cubemap_sample.frag.qsb b/tests/manual/rhi/cubemap_render/cubemap_sample.frag.qsb
new file mode 100644
index 0000000000..f26e3985b6
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_sample.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/cubemap_render/cubemap_sample.vert b/tests/manual/rhi/cubemap_render/cubemap_sample.vert
new file mode 100644
index 0000000000..f1caf1a74f
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_sample.vert
@@ -0,0 +1,16 @@
+#version 440
+
+layout(location = 0) in vec4 position;
+layout(location = 0) out vec3 v_coord;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+} ubuf;
+
+out gl_PerVertex { vec4 gl_Position; };
+
+void main()
+{
+ v_coord = position.xyz;
+ gl_Position = ubuf.mvp * position;
+}
diff --git a/tests/manual/rhi/cubemap_render/cubemap_sample.vert.qsb b/tests/manual/rhi/cubemap_render/cubemap_sample.vert.qsb
new file mode 100644
index 0000000000..0cbc144011
--- /dev/null
+++ b/tests/manual/rhi/cubemap_render/cubemap_sample.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/float16texture_with_compute/buildshaders.sh b/tests/manual/rhi/float16texture_with_compute/buildshaders.sh
new file mode 100755
index 0000000000..7d4d27741d
--- /dev/null
+++ b/tests/manual/rhi/float16texture_with_compute/buildshaders.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+qsb --glsl "430,310 es" --hlsl 50 --msl 12 load.comp -o load.comp.qsb
+qsb --glsl "430,310 es" --hlsl 50 --msl 12 prefilter.comp -o prefilter.comp.qsb
diff --git a/tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.cpp b/tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.cpp
new file mode 100644
index 0000000000..9d74fe797b
--- /dev/null
+++ b/tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.cpp
@@ -0,0 +1,312 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+// An advanced version of floattexture. Instead of RGBA32F, we use RGBA16F, and
+// also generate the floating point data from rgba with compute. Then there's a
+// compute pass using the BSDF prefiltering taken from Qt Quick 3D, which
+// generates all the mip levels.
+
+// Why do we animate the scale of the quad rendered to the window? To have
+// different mip levels used, to prove that all of them are generated
+// correctly, without artifacts (which would occur if memory barriers were not
+// correctly generated by QRhi). For full verification use RenderDoc or similar.
+
+#include "../shared/examplefw.h"
+#include <qmath.h>
+
+static float vertexData[] =
+{ // Y up, CCW
+ -0.5f, 0.5f, 0.0f, 0.0f,
+ -0.5f, -0.5f, 0.0f, 1.0f,
+ 0.5f, -0.5f, 1.0f, 1.0f,
+ 0.5f, 0.5f, 1.0f, 0.0f
+};
+
+static quint16 indexData[] =
+{
+ 0, 1, 2, 0, 2, 3
+};
+
+static const int MAX_MIP_LEVELS = 20;
+
+struct {
+ QVector<QRhiResource *> releasePool;
+
+ QRhiBuffer *vbuf = nullptr;
+ QRhiBuffer *ibuf = nullptr;
+ QRhiBuffer *ubuf = nullptr;
+ QRhiTexture *texRgba = nullptr;
+ QRhiTexture *texFloat16 = nullptr;
+ QRhiSampler *sampler = nullptr;
+ QRhiShaderResourceBindings *srb = nullptr;
+ QRhiGraphicsPipeline *ps = nullptr;
+
+ QRhiBuffer *computeUBuf_load = nullptr;
+ QRhiShaderResourceBindings *computeBindings_load = nullptr;
+ QRhiComputePipeline *computePipeline_load = nullptr;
+ QRhiBuffer *computeUBuf_prefilter = nullptr;
+ QRhiShaderResourceBindings *computeBindings_prefilter[MAX_MIP_LEVELS];
+ QRhiComputePipeline *computePipeline_prefilter = nullptr;
+
+ QRhiResourceUpdateBatch *initialUpdates = nullptr;
+ bool computeDone = false;
+ int mipCount;
+ int prefilterUBufElemSize;
+ quint32 prefilterNumWorkGroups[MAX_MIP_LEVELS][3];
+ float scale = 2.5f;
+ int scale_dir = -1;
+} d;
+
+void recordUploadThenFilterFloat16TextureWithCompute(QRhiCommandBuffer *cb)
+{
+ const int w = d.texRgba->pixelSize().width() / 16;
+ const int h = d.texRgba->pixelSize().height() / 16;
+
+ cb->beginComputePass();
+
+ cb->setComputePipeline(d.computePipeline_load);
+ cb->setShaderResources();
+ cb->dispatch(w, h, 1);
+
+ cb->setComputePipeline(d.computePipeline_prefilter);
+ for (int level = 1; level < d.mipCount; ++level) {
+ const int i = level - 1;
+ const int mipW = d.prefilterNumWorkGroups[i][0];
+ const int mipH = d.prefilterNumWorkGroups[i][1];
+ QPair<int, quint32> dynamicOffset = { 0, quint32(d.prefilterUBufElemSize * i) };
+ cb->setShaderResources(d.computeBindings_prefilter[i], 1, &dynamicOffset);
+ cb->dispatch(mipW, mipH, 1);
+ }
+
+ cb->endComputePass();
+}
+
+void Window::customInit()
+{
+ if (!m_r->isFeatureSupported(QRhi::Compute))
+ qFatal("Compute is not supported");
+
+ if (!m_r->isTextureFormatSupported(QRhiTexture::RGBA16F))
+ qFatal("RGBA16F texture format is not supported");
+
+ d.initialUpdates = m_r->nextResourceUpdateBatch();
+
+ // load rgba8 image data
+
+ QImage image;
+ image.load(QLatin1String(":/qt256.png"));
+ image = image.convertToFormat(QImage::Format_RGBA8888);
+ Q_ASSERT(!image.isNull());
+ d.texRgba = m_r->newTexture(QRhiTexture::RGBA8, image.size(), 1, QRhiTexture::UsedWithLoadStore);
+ d.texRgba->build();
+ d.releasePool << d.texRgba;
+
+ d.initialUpdates->uploadTexture(d.texRgba, image);
+
+ d.mipCount = m_r->mipLevelsForSize(image.size());
+ Q_ASSERT(d.mipCount <= MAX_MIP_LEVELS);
+
+ d.texFloat16 = m_r->newTexture(QRhiTexture::RGBA16F, image.size(), 1, QRhiTexture::UsedWithLoadStore | QRhiTexture::MipMapped);
+ d.releasePool << d.texFloat16;
+ d.texFloat16->build();
+
+ // compute
+
+ d.computeUBuf_load = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 12);
+ d.computeUBuf_load->build();
+ d.releasePool << d.computeUBuf_load;
+
+ quint32 numWorkGroups[3] = { quint32(image.width()), quint32(image.height()), 0 };
+ d.initialUpdates->updateDynamicBuffer(d.computeUBuf_load, 0, 12, numWorkGroups);
+
+ d.computeBindings_load = m_r->newShaderResourceBindings();
+ d.computeBindings_load->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::ComputeStage, d.computeUBuf_load),
+ QRhiShaderResourceBinding::imageLoad(1, QRhiShaderResourceBinding::ComputeStage, d.texRgba, 0),
+ QRhiShaderResourceBinding::imageStore(2, QRhiShaderResourceBinding::ComputeStage, d.texFloat16, 0)
+ });
+ d.computeBindings_load->build();
+ d.releasePool << d.computeBindings_load;
+
+ d.computePipeline_load = m_r->newComputePipeline();
+ d.computePipeline_load->setShaderResourceBindings(d.computeBindings_load);
+ d.computePipeline_load->setShaderStage({ QRhiShaderStage::Compute, getShader(QLatin1String(":/load.comp.qsb")) });
+ d.computePipeline_load->build();
+ d.releasePool << d.computePipeline_load;
+
+ d.prefilterUBufElemSize = m_r->ubufAligned(12);
+ d.computeUBuf_prefilter = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, d.prefilterUBufElemSize * d.mipCount);
+ d.computeUBuf_prefilter->build();
+ d.releasePool << d.computeUBuf_prefilter;
+
+ int mipW = image.width() >> 1;
+ int mipH = image.height() >> 1;
+ for (int level = 1; level < d.mipCount; ++level) {
+ const int i = level - 1;
+ d.prefilterNumWorkGroups[i][0] = quint32(mipW);
+ d.prefilterNumWorkGroups[i][1] = quint32(mipH);
+ d.prefilterNumWorkGroups[i][2] = 0;
+ d.initialUpdates->updateDynamicBuffer(d.computeUBuf_prefilter, d.prefilterUBufElemSize * i, 12, d.prefilterNumWorkGroups[i]);
+ mipW = mipW > 2 ? mipW >> 1 : 1;
+ mipH = mipH > 2 ? mipH >> 1 : 1;
+
+ d.computeBindings_prefilter[i] = m_r->newShaderResourceBindings();
+ d.computeBindings_prefilter[i]->setBindings({
+ QRhiShaderResourceBinding::uniformBufferWithDynamicOffset(0, QRhiShaderResourceBinding::ComputeStage, d.computeUBuf_prefilter, 12),
+ QRhiShaderResourceBinding::imageLoad(1, QRhiShaderResourceBinding::ComputeStage, d.texFloat16, level - 1),
+ QRhiShaderResourceBinding::imageStore(2, QRhiShaderResourceBinding::ComputeStage, d.texFloat16, level)
+ });
+ d.computeBindings_prefilter[i]->build();
+ d.releasePool << d.computeBindings_prefilter[i];
+ }
+
+ d.computePipeline_prefilter = m_r->newComputePipeline();
+ d.computePipeline_prefilter->setShaderResourceBindings(d.computeBindings_prefilter[0]); // just need a layout compatible one
+ d.computePipeline_prefilter->setShaderStage({ QRhiShaderStage::Compute, getShader(QLatin1String(":/prefilter.comp.qsb")) });
+ d.computePipeline_prefilter->build();
+ d.releasePool << d.computePipeline_prefilter;
+
+ // graphics
+
+ d.vbuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(vertexData));
+ d.vbuf->build();
+ d.releasePool << d.vbuf;
+
+ d.ibuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::IndexBuffer, sizeof(indexData));
+ d.ibuf->build();
+ d.releasePool << d.ibuf;
+
+ d.ubuf = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 68);
+ d.ubuf->build();
+ d.releasePool << d.ubuf;
+
+ // enable mipmaps
+ d.sampler = m_r->newSampler(QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::Linear,
+ QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge);
+ d.releasePool << d.sampler;
+ d.sampler->build();
+
+ d.srb = m_r->newShaderResourceBindings();
+ d.releasePool << d.srb;
+ d.srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, d.ubuf),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, d.texFloat16, d.sampler)
+ });
+ d.srb->build();
+
+ d.ps = m_r->newGraphicsPipeline();
+ d.releasePool << d.ps;
+ d.ps->setShaderStages({
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/texture.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/texture.frag.qsb")) }
+ });
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 4 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float2, 2 * sizeof(float) }
+ });
+ d.ps->setVertexInputLayout(inputLayout);
+ d.ps->setShaderResourceBindings(d.srb);
+ d.ps->setRenderPassDescriptor(m_rp);
+ d.ps->build();
+
+ d.initialUpdates->uploadStaticBuffer(d.vbuf, vertexData);
+ d.initialUpdates->uploadStaticBuffer(d.ibuf, indexData);
+
+ qint32 flip = 0;
+ d.initialUpdates->updateDynamicBuffer(d.ubuf, 64, 4, &flip);
+}
+
+void Window::customRelease()
+{
+ qDeleteAll(d.releasePool);
+ d.releasePool.clear();
+}
+
+void Window::customRender()
+{
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ QRhiResourceUpdateBatch *u = m_r->nextResourceUpdateBatch();
+ if (d.initialUpdates) {
+ u->merge(d.initialUpdates);
+ d.initialUpdates->release();
+ d.initialUpdates = nullptr;
+ }
+
+ QMatrix4x4 mvp = m_proj;
+ mvp.scale(d.scale);
+ d.scale += d.scale_dir * 0.01f;
+ if (qFuzzyIsNull(d.scale) || d.scale >= 2.5f)
+ d.scale_dir *= -1;
+ u->updateDynamicBuffer(d.ubuf, 0, 64, mvp.constData());
+
+ cb->resourceUpdate(u);
+
+ // If not yet done, then do a compute pass that uploads level 0, doing an
+ // rgba8 -> float16 conversion. Follow that with another compute pass to do
+ // the filtering and generate all the mip levels.
+ if (!d.computeDone) {
+ recordUploadThenFilterFloat16TextureWithCompute(cb);
+ d.computeDone = true;
+ }
+
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+ cb->beginPass(m_sc->currentFrameRenderTarget(), m_clearColor, { 1.0f, 0 });
+ cb->setGraphicsPipeline(d.ps);
+ cb->setViewport({ 0, 0, float(outputSizeInPixels.width()), float(outputSizeInPixels.height()) });
+ cb->setShaderResources();
+ const QRhiCommandBuffer::VertexInput vbufBinding(d.vbuf, 0);
+ cb->setVertexInput(0, 1, &vbufBinding, d.ibuf, 0, QRhiCommandBuffer::IndexUInt16);
+ cb->drawIndexed(6);
+ cb->endPass();
+}
diff --git a/tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.pro b/tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.pro
new file mode 100644
index 0000000000..7708e845d0
--- /dev/null
+++ b/tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.pro
@@ -0,0 +1,8 @@
+TEMPLATE = app
+
+QT += gui-private
+
+SOURCES = \
+ float16texture_with_compute.cpp
+
+RESOURCES = float16texture_with_compute.qrc
diff --git a/tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.qrc b/tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.qrc
new file mode 100644
index 0000000000..ce3c52aac5
--- /dev/null
+++ b/tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.qrc
@@ -0,0 +1,9 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>load.comp.qsb</file>
+ <file>prefilter.comp.qsb</file>
+ <file alias="texture.vert.qsb">../shared/texture.vert.qsb</file>
+ <file alias="texture.frag.qsb">../shared/texture.frag.qsb</file>
+ <file alias="qt256.png">../shared/qt256.png</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/rhi/float16texture_with_compute/load.comp b/tests/manual/rhi/float16texture_with_compute/load.comp
new file mode 100644
index 0000000000..eb7bc1ece4
--- /dev/null
+++ b/tests/manual/rhi/float16texture_with_compute/load.comp
@@ -0,0 +1,19 @@
+#version 440
+
+layout(local_size_x = 16, local_size_y = 16) in;
+layout(rgba8, binding = 1) readonly uniform image2D inputImage;
+layout(rgba16f, binding = 2) writeonly uniform image2D outputImage;
+
+// There is no equivalent of gl_NumWorkGroups in HLSL. So instead pass the
+// values in in a uniform buffer.
+layout(std140, binding = 0) uniform numWorkGroupsBuf {
+ uvec3 numWorkGroups;
+};
+
+void main()
+{
+ if (gl_GlobalInvocationID.x >= numWorkGroups.x || gl_GlobalInvocationID.y >= numWorkGroups.y)
+ return;
+ vec4 value = imageLoad(inputImage, ivec2(gl_GlobalInvocationID.xy));
+ imageStore(outputImage, ivec2(gl_GlobalInvocationID.xy), value);
+}
diff --git a/tests/manual/rhi/float16texture_with_compute/load.comp.qsb b/tests/manual/rhi/float16texture_with_compute/load.comp.qsb
new file mode 100644
index 0000000000..bfdd7f5446
--- /dev/null
+++ b/tests/manual/rhi/float16texture_with_compute/load.comp.qsb
Binary files differ
diff --git a/tests/manual/rhi/float16texture_with_compute/prefilter.comp b/tests/manual/rhi/float16texture_with_compute/prefilter.comp
new file mode 100644
index 0000000000..ba09ecb129
--- /dev/null
+++ b/tests/manual/rhi/float16texture_with_compute/prefilter.comp
@@ -0,0 +1,50 @@
+#version 440
+
+layout(local_size_x = 16, local_size_y = 16) in;
+layout(rgba16f, binding = 1) readonly uniform image2D inputImage;
+layout(rgba16f, binding = 2) writeonly uniform image2D outputImage;
+
+// There is no equivalent of gl_NumWorkGroups in HLSL. So instead pass the
+// values in in a uniform buffer.
+layout(std140, binding = 0) uniform numWorkGroupsBuf {
+ uvec3 numWorkGroups;
+};
+
+int wrapMod( in int a, in int base )
+{
+ return ( a >= 0 ) ? a % base : -(a % base) + base;
+}
+
+void getWrappedCoords( inout int sX, inout int sY, in int width, in int height )
+{
+ if (sY < 0) { sX -= width >> 1; sY = -sY; }
+ if (sY >= height) { sX += width >> 1; sY = height - sY; }
+ sX = wrapMod( sX, width );
+}
+
+void main()
+{
+ int prevWidth = int(numWorkGroups.x) << 1;
+ int prevHeight = int(numWorkGroups.y) << 1;
+ if (gl_GlobalInvocationID.x >= numWorkGroups.x || gl_GlobalInvocationID.y >= numWorkGroups.y)
+ return;
+ vec4 accumVal = vec4(0.0);
+ for (int sy = -2; sy <= 2; ++sy) {
+ for (int sx = -2; sx <= 2; ++sx) {
+ int sampleX = sx + (int(gl_GlobalInvocationID.x) << 1);
+ int sampleY = sy + (int(gl_GlobalInvocationID.y) << 1);
+ getWrappedCoords(sampleX, sampleY, prevWidth, prevHeight);
+ if ((sampleY * prevWidth + sampleX) < 0 )
+ sampleY = prevHeight + sampleY;
+ ivec2 pos = ivec2(sampleX, sampleY);
+ vec4 value = imageLoad(inputImage, pos);
+ float filterPdf = 1.0 / ( 1.0 + float(sx*sx + sy*sy)*2.0 );
+ filterPdf /= 4.71238898;
+ accumVal[0] += filterPdf * value.r;
+ accumVal[1] += filterPdf * value.g;
+ accumVal[2] += filterPdf * value.b;
+ accumVal[3] += filterPdf * value.a;
+ }
+ }
+ imageStore(outputImage, ivec2(gl_GlobalInvocationID.xy), accumVal);
+}
diff --git a/tests/manual/rhi/float16texture_with_compute/prefilter.comp.qsb b/tests/manual/rhi/float16texture_with_compute/prefilter.comp.qsb
new file mode 100644
index 0000000000..77618a12b9
--- /dev/null
+++ b/tests/manual/rhi/float16texture_with_compute/prefilter.comp.qsb
Binary files differ
diff --git a/tests/manual/rhi/rhi.pro b/tests/manual/rhi/rhi.pro
index 4768ee1c6d..4bee164969 100644
--- a/tests/manual/rhi/rhi.pro
+++ b/tests/manual/rhi/rhi.pro
@@ -9,11 +9,13 @@ SUBDIRS += \
msaarenderbuffer \
cubemap \
cubemap_scissor \
+ cubemap_render \
multiwindow \
multiwindow_threaded \
triquadcube \
offscreen \
floattexture \
+ float16texture_with_compute \
mrt \
shadowmap \
computebuffer \
diff --git a/tests/manual/rhi/shared/examplefw.h b/tests/manual/rhi/shared/examplefw.h
index dc388274d7..84895cf530 100644
--- a/tests/manual/rhi/shared/examplefw.h
+++ b/tests/manual/rhi/shared/examplefw.h
@@ -148,6 +148,9 @@ protected:
void exposeEvent(QExposeEvent *) override;
bool event(QEvent *) override;
+#ifdef EXAMPLEFW_KEYPRESS_EVENTS
+ void keyPressEvent(QKeyEvent *e) override;
+#endif
bool m_running = false;
bool m_notExposed = false;