summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui/image/qimage/tst_qimage.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-06-20 14:09:00 +0200
committerLiang Qi <liang.qi@qt.io>2016-06-21 08:39:41 +0200
commitea438b2508f329698e11c6dae6994d441c6e67df (patch)
tree7a6052b98ba1ff6e0258c52cfc2726e197f53dd2 /tests/auto/gui/image/qimage/tst_qimage.cpp
parenta2f319e9fb2f7595fc16d0d79e26438463051a53 (diff)
parent5f0ec7305e4310123ddeb98d3523087e3c560d9c (diff)
Merge remote-tracking branch 'origin/5.7' into dev
Conflicts: src/corelib/global/qglobal.cpp src/corelib/global/qsysinfo.h src/corelib/kernel/qcoreapplication_win.cpp src/gui/text/qdistancefield.cpp src/gui/text/qdistancefield_p.h src/plugins/platforms/windows/qwindowsglcontext.cpp src/plugins/platforms/windows/qwindowsglcontext.h Change-Id: Ib3500acc2b28553bde06758cd9a2e19eb7fe2978
Diffstat (limited to 'tests/auto/gui/image/qimage/tst_qimage.cpp')
-rw-r--r--tests/auto/gui/image/qimage/tst_qimage.cpp74
1 files changed, 70 insertions, 4 deletions
diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp
index bc48869f7d..1bc4ec2ae7 100644
--- a/tests/auto/gui/image/qimage/tst_qimage.cpp
+++ b/tests/auto/gui/image/qimage/tst_qimage.cpp
@@ -2488,6 +2488,35 @@ void tst_QImage::inplaceRgbSwapped()
}
QCOMPARE(imageSwapped.constScanLine(0), orginalPtr);
+
+ for (int rw = 0; rw <= 1; rw++) {
+ // Test attempted inplace conversion of images created on existing buffer
+ uchar *volatileData = 0;
+ QImage orig = imageSwapped;
+ QImage dataSwapped;
+ {
+ QVERIFY(!orig.isNull());
+ volatileData = new uchar[orig.byteCount()];
+ memcpy(volatileData, orig.constBits(), orig.byteCount());
+
+ QImage dataImage;
+ if (rw)
+ dataImage = QImage(volatileData, orig.width(), orig.height(), orig.format());
+ else
+ dataImage = QImage((const uchar *)volatileData, orig.width(), orig.height(), orig.format());
+
+ if (orig.colorCount())
+ dataImage.setColorTable(orig.colorTable());
+
+ dataSwapped = std::move(dataImage).rgbSwapped();
+ QVERIFY(!dataSwapped.isNull());
+ delete[] volatileData;
+ }
+
+ QVERIFY2(dataSwapped.constBits() != volatileData, rw ? "non-const" : "const");
+ QCOMPARE(dataSwapped, orig.rgbSwapped());
+ }
+
#endif
}
@@ -2570,6 +2599,35 @@ void tst_QImage::inplaceMirrored()
}
}
QCOMPARE(imageMirrored.constScanLine(0), originalPtr);
+
+ for (int rw = 0; rw <= 1; rw++) {
+ // Test attempted inplace conversion of images created on existing buffer
+ uchar *volatileData = 0;
+ QImage orig = imageMirrored;
+ QImage dataSwapped;
+ {
+ QVERIFY(!orig.isNull());
+ volatileData = new uchar[orig.byteCount()];
+ memcpy(volatileData, orig.constBits(), orig.byteCount());
+
+ QImage dataImage;
+ if (rw)
+ dataImage = QImage(volatileData, orig.width(), orig.height(), orig.format());
+ else
+ dataImage = QImage((const uchar *)volatileData, orig.width(), orig.height(), orig.format());
+
+ if (orig.colorCount())
+ dataImage.setColorTable(orig.colorTable());
+
+ dataSwapped = std::move(dataImage).mirrored(swap_horizontal, swap_vertical);
+ QVERIFY(!dataSwapped.isNull());
+ delete[] volatileData;
+ }
+
+ QVERIFY2(dataSwapped.constBits() != volatileData, rw ? "non-const" : "const");
+ QCOMPARE(dataSwapped, orig.mirrored(swap_horizontal, swap_vertical));
+ }
+
#endif
}
@@ -2722,16 +2780,24 @@ void tst_QImage::inplaceRgbConversion()
static const quint32 readOnlyData[] = { 0xff0102ffU, 0xff0506ffU, 0xff0910ffU, 0xff1314ffU };
quint32 readWriteData[] = { 0xff0102ffU, 0xff0506ffU, 0xff0910ffU, 0xff1314ffU };
- QImage roImage((const uchar *)readOnlyData, 2, 2, format);
- QImage roInplaceConverted = std::move(roImage).convertToFormat(dest_format);
+ QImage roInplaceConverted;
+ QImage rwInplaceConverted;
+
+ {
+ QImage roImage((const uchar *)readOnlyData, 2, 2, format);
+ roInplaceConverted = std::move(roImage).convertToFormat(dest_format);
- QImage rwImage((uchar *)readWriteData, 2, 2, format);
- QImage rwInplaceConverted = std::move(rwImage).convertToFormat(dest_format);
+ QImage rwImage((uchar *)readWriteData, 2, 2, format);
+ rwInplaceConverted = std::move(rwImage).convertToFormat(dest_format);
+ }
QImage roImage2((const uchar *)readOnlyData, 2, 2, format);
QImage normalConverted = roImage2.convertToFormat(dest_format);
+ QVERIFY(roInplaceConverted.constBits() != (const uchar *)readOnlyData);
QCOMPARE(normalConverted, roInplaceConverted);
+
+ QVERIFY(rwInplaceConverted.constBits() != (const uchar *)readWriteData);
QCOMPARE(normalConverted, rwInplaceConverted);
}
#endif