mirror of
https://invent.kde.org/frameworks/kimageformats.git
synced 2025-06-03 17:08:08 -04:00
Read / Write test: added NULL device test
DDS plugin crashes if I request supportedSubTypes() - Fixed DDS plugin crash - Added NULL device test on both read and write tests Closes #14
This commit is contained in:
parent
d91c7dd912
commit
a6f7482957
@ -375,6 +375,66 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NULL device test
|
||||||
|
for (const QFileInfo &fi : lstImgDir) {
|
||||||
|
TemplateImage timg(fi);
|
||||||
|
if (timg.isTemplate() || timg.isLicense()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTextStream(stdout) << "* Run on NULL device\n";
|
||||||
|
QImageReader reader;
|
||||||
|
reader.setFormat(fi.suffix().toLatin1());
|
||||||
|
if (reader.canRead() == true) {
|
||||||
|
QTextStream(stdout) << "FAIL : " << fi.suffix() << ": canRead() returns true\n";
|
||||||
|
++failed;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!reader.read().isNull()) {
|
||||||
|
QTextStream(stdout) << "FAIL : " << fi.suffix() << ": read() returns a non-NULL image\n";
|
||||||
|
++failed;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reader.size() != QSize()) {
|
||||||
|
QTextStream(stdout) << "FAIL : " << fi.suffix() << ": size() returns a valid size\n";
|
||||||
|
++failed;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reader.imageFormat() != QImage::Format_Invalid) {
|
||||||
|
QTextStream(stdout) << "FAIL : " << fi.suffix() << ": size() returns a valid format\n";
|
||||||
|
++failed;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// test for crash only
|
||||||
|
reader.textKeys();
|
||||||
|
reader.quality();
|
||||||
|
reader.clipRect();
|
||||||
|
reader.scaledSize();
|
||||||
|
reader.scaledClipRect();
|
||||||
|
reader.backgroundColor();
|
||||||
|
reader.supportsAnimation();
|
||||||
|
reader.transformation();
|
||||||
|
reader.autoTransform();
|
||||||
|
reader.subType();
|
||||||
|
reader.supportedSubTypes();
|
||||||
|
reader.jumpToNextImage();
|
||||||
|
reader.loopCount();
|
||||||
|
reader.imageCount();
|
||||||
|
reader.currentImageNumber();
|
||||||
|
reader.currentImageRect();
|
||||||
|
|
||||||
|
// success
|
||||||
|
QTextStream(stdout) << "PASS : " << fi.suffix() << "\n";
|
||||||
|
++passed;
|
||||||
|
|
||||||
|
// runs once for each format
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
QTextStream(stdout) << "Totals: " << passed << " passed, " << skipped << " skipped, " << failed << " failed\n";
|
QTextStream(stdout) << "Totals: " << passed << " passed, " << skipped << " skipped, " << failed << " failed\n";
|
||||||
QTextStream(stdout) << "********* "
|
QTextStream(stdout) << "********* "
|
||||||
<< "Finished basic read tests for " << suffix << " images *********\n";
|
<< "Finished basic read tests for " << suffix << " images *********\n";
|
||||||
|
@ -329,6 +329,52 @@ int formatTest(const QString &suffix, bool createTemplates)
|
|||||||
return failed == 0 ? 0 : 1;
|
return failed == 0 ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief nullDeviceTest
|
||||||
|
* Checks the plugin behaviour when using a NULL device.
|
||||||
|
*/
|
||||||
|
int nullDeviceTest(const QString &suffix)
|
||||||
|
{
|
||||||
|
QTextStream(stdout) << "********* "
|
||||||
|
<< "Starting NULL device write tests for " << suffix << " images *********\n";
|
||||||
|
|
||||||
|
int passed = 0;
|
||||||
|
int failed = 0;
|
||||||
|
int skipped = 0;
|
||||||
|
|
||||||
|
QImageWriter writer;
|
||||||
|
writer.setFormat(suffix.toLatin1());
|
||||||
|
|
||||||
|
if (writer.canWrite()) {
|
||||||
|
QTextStream(stdout) << "FAIL : canWrite() returns TRUE\n";
|
||||||
|
++failed;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (writer.write(QImage(16, 16, QImage::Format_ARGB32))) {
|
||||||
|
QTextStream(stdout) << "FAIL : write() returns TRUE\n";
|
||||||
|
++failed;
|
||||||
|
}
|
||||||
|
|
||||||
|
// test for crash only
|
||||||
|
writer.compression();
|
||||||
|
writer.quality();
|
||||||
|
writer.transformation();
|
||||||
|
writer.subType();
|
||||||
|
writer.supportedSubTypes();
|
||||||
|
writer.optimizedWrite();
|
||||||
|
writer.progressiveScanWrite();
|
||||||
|
|
||||||
|
if (failed == 0) {// success
|
||||||
|
++passed;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTextStream(stdout) << "Totals: " << passed << " passed, " << failed << " failed, " << skipped << " skipped\n";
|
||||||
|
QTextStream(stdout) << "********* "
|
||||||
|
<< "Finished format write tests for " << suffix << " images *********\n";
|
||||||
|
|
||||||
|
return failed == 0 ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
QCoreApplication app(argc, argv);
|
QCoreApplication app(argc, argv);
|
||||||
@ -382,6 +428,9 @@ int main(int argc, char **argv)
|
|||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
ret = formatTest(suffix, parser.isSet(createFormatTempates));
|
ret = formatTest(suffix, parser.isSet(createFormatTempates));
|
||||||
}
|
}
|
||||||
|
if (ret == 0) {
|
||||||
|
ret = nullDeviceTest(suffix);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1802,18 +1802,26 @@ bool QDDSHandler::write(const QImage &outImage)
|
|||||||
|
|
||||||
QVariant QDDSHandler::option(QImageIOHandler::ImageOption option) const
|
QVariant QDDSHandler::option(QImageIOHandler::ImageOption option) const
|
||||||
{
|
{
|
||||||
if (!supportsOption(option) || !ensureScanned())
|
if (!supportsOption(option)) {
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
switch (option) {
|
// *** options that do not require a valid stream ***
|
||||||
case QImageIOHandler::Size:
|
if (option == QImageIOHandler::SupportedSubTypes) {
|
||||||
return isCubeMap(m_header) ? QSize(m_header.width * 4, m_header.height * 3) : QSize(m_header.width, m_header.height);
|
|
||||||
case QImageIOHandler::SubType:
|
|
||||||
return formatName(m_format);
|
|
||||||
case QImageIOHandler::SupportedSubTypes:
|
|
||||||
return QVariant::fromValue(QList<QByteArray>() << formatName(FormatA8R8G8B8));
|
return QVariant::fromValue(QList<QByteArray>() << formatName(FormatA8R8G8B8));
|
||||||
default:
|
}
|
||||||
break;
|
|
||||||
|
// *** options that require a valid stream ***
|
||||||
|
if (!ensureScanned()) {
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (option == QImageIOHandler::Size) {
|
||||||
|
return isCubeMap(m_header) ? QSize(m_header.width * 4, m_header.height * 3) : QSize(m_header.width, m_header.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (option == QImageIOHandler::SubType) {
|
||||||
|
return formatName(m_format);
|
||||||
}
|
}
|
||||||
|
|
||||||
return QVariant();
|
return QVariant();
|
||||||
@ -1868,6 +1876,10 @@ bool QDDSHandler::canRead(QIODevice *device)
|
|||||||
|
|
||||||
bool QDDSHandler::ensureScanned() const
|
bool QDDSHandler::ensureScanned() const
|
||||||
{
|
{
|
||||||
|
if (device() == nullptr) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_scanState != ScanNotScanned)
|
if (m_scanState != ScanNotScanned)
|
||||||
return m_scanState == ScanSuccess;
|
return m_scanState == ScanSuccess;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user