mirror of
https://invent.kde.org/frameworks/kimageformats.git
synced 2025-05-28 00:30:23 -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) << "********* "
|
||||
<< "Finished basic read tests for " << suffix << " images *********\n";
|
||||
|
@ -329,6 +329,52 @@ int formatTest(const QString &suffix, bool createTemplates)
|
||||
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)
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
@ -382,6 +428,9 @@ int main(int argc, char **argv)
|
||||
if (ret == 0) {
|
||||
ret = formatTest(suffix, parser.isSet(createFormatTempates));
|
||||
}
|
||||
if (ret == 0) {
|
||||
ret = nullDeviceTest(suffix);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1802,18 +1802,26 @@ bool QDDSHandler::write(const QImage &outImage)
|
||||
|
||||
QVariant QDDSHandler::option(QImageIOHandler::ImageOption option) const
|
||||
{
|
||||
if (!supportsOption(option) || !ensureScanned())
|
||||
if (!supportsOption(option)) {
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
switch (option) {
|
||||
case QImageIOHandler::Size:
|
||||
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:
|
||||
// *** options that do not require a valid stream ***
|
||||
if (option == QImageIOHandler::SupportedSubTypes) {
|
||||
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();
|
||||
@ -1868,6 +1876,10 @@ bool QDDSHandler::canRead(QIODevice *device)
|
||||
|
||||
bool QDDSHandler::ensureScanned() const
|
||||
{
|
||||
if (device() == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (m_scanState != ScanNotScanned)
|
||||
return m_scanState == ScanSuccess;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user