diff options
author | Liang Qi <liang.qi@qt.io> | 2016-06-20 14:09:00 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-06-21 08:39:41 +0200 |
commit | ea438b2508f329698e11c6dae6994d441c6e67df (patch) | |
tree | 7a6052b98ba1ff6e0258c52cfc2726e197f53dd2 /tests/auto/gui/image/qimage | |
parent | a2f319e9fb2f7595fc16d0d79e26438463051a53 (diff) | |
parent | 5f0ec7305e4310123ddeb98d3523087e3c560d9c (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')
-rw-r--r-- | tests/auto/gui/image/qimage/tst_qimage.cpp | 74 |
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 |