blob: 6eea01816eb3094d093966f49d8139901a02e3f2 [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** 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.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <QtTest/QtTest>
#include <QImageReader>
#include <QtGui>
class tst_QIcon_Svg : public QObject
{
Q_OBJECT
public:
public slots:
void initTestCase();
private slots:
void svgActualSize();
void svg();
void availableSizes();
void isNull();
void sizeInPercent();
private:
QString prefix;
};
void tst_QIcon_Svg::initTestCase()
{
prefix = QFINDTESTDATA("icons/");
if (prefix.isEmpty())
QFAIL("Can't find images directory!");
if (!QImageReader::supportedImageFormats().contains("svg"))
QFAIL("SVG support is not available");
QCOMPARE(QImageReader::imageFormat(prefix + "triangle.svg"), QByteArray("svg"));
}
void tst_QIcon_Svg::svgActualSize()
{
QIcon icon(prefix + "rect.svg");
QCOMPARE(icon.actualSize(QSize(16, 2)), QSize(16, 2));
QCOMPARE(icon.pixmap(QSize(16, 16)).size(), QSize(16, 2));
QPixmap p(16, 16);
p.fill(Qt::cyan);
icon.addPixmap(p);
QCOMPARE(icon.actualSize(QSize(16, 16)), QSize(16, 16));
QCOMPARE(icon.pixmap(QSize(16, 16)).size(), QSize(16, 16));
QCOMPARE(icon.actualSize(QSize(16, 14)), QSize(16, 2));
QCOMPARE(icon.pixmap(QSize(16, 14)).size(), QSize(16, 2));
}
void tst_QIcon_Svg::svg()
{
QIcon icon1(prefix + "heart.svg");
QVERIFY(!icon1.pixmap(32).isNull());
QImage img1 = icon1.pixmap(32).toImage();
QVERIFY(!icon1.pixmap(32, QIcon::Disabled).isNull());
QImage img2 = icon1.pixmap(32, QIcon::Disabled).toImage();
icon1.addFile(prefix + "trash.svg", QSize(), QIcon::Disabled);
QVERIFY(!icon1.pixmap(32, QIcon::Disabled).isNull());
QImage img3 = icon1.pixmap(32, QIcon::Disabled).toImage();
QVERIFY(img3 != img2);
QVERIFY(img3 != img1);
QPixmap pm(prefix + "image.png");
icon1.addPixmap(pm, QIcon::Normal, QIcon::On);
QVERIFY(!icon1.pixmap(128, QIcon::Normal, QIcon::On).isNull());
QImage img4 = icon1.pixmap(128, QIcon::Normal, QIcon::On).toImage();
QVERIFY(img4 != img3);
QVERIFY(img4 != img2);
QVERIFY(img4 != img1);
QIcon icon2;
icon2.addFile(prefix + "heart.svg");
QVERIFY(icon2.pixmap(57).toImage() == icon1.pixmap(57).toImage());
QIcon icon3(prefix + "trash.svg");
icon3.addFile(prefix + "heart.svg");
QVERIFY(icon3.pixmap(57).toImage() == icon1.pixmap(57).toImage());
QIcon icon4(prefix + "heart.svg");
icon4.addFile(prefix + "image.png", QSize(), QIcon::Active);
QVERIFY(!icon4.pixmap(32).isNull());
QVERIFY(!icon4.pixmap(32, QIcon::Active).isNull());
QVERIFY(icon4.pixmap(32).toImage() == img1);
QIcon pmIcon(pm);
QVERIFY(icon4.pixmap(pm.size(), QIcon::Active).toImage() == pmIcon.pixmap(pm.size(), QIcon::Active).toImage());
#ifndef QT_NO_COMPRESS
QIcon icon5(prefix + "heart.svgz");
QVERIFY(!icon5.pixmap(32).isNull());
#endif
}
void tst_QIcon_Svg::availableSizes()
{
{
// checks that there are no availableSizes for scalable images.
QIcon icon(prefix + "heart.svg");
QList<QSize> availableSizes = icon.availableSizes();
qDebug() << availableSizes;
QVERIFY(availableSizes.isEmpty());
}
{
// even if an a scalable image contain added pixmaps,
// availableSizes still should be empty.
QIcon icon(prefix + "heart.svg");
icon.addFile(prefix + "image.png", QSize(32,32));
QList<QSize> availableSizes = icon.availableSizes();
QVERIFY(availableSizes.isEmpty());
}
}
void tst_QIcon_Svg::isNull()
{
{
//checks that an invalid file results in the icon being null
QIcon icon(prefix + "nonExistentFile.svg");
QVERIFY(icon.isNull());
}
{
//valid svg, we're not null
QIcon icon(prefix + "heart.svg");
QVERIFY(!icon.isNull());
// check for non null of serialized/deserialized valid icon
QByteArray buf;
QDataStream out(&buf, QIODevice::WriteOnly);
out << icon;
QIcon icon2;
QDataStream in(buf);
in >> icon2;
QVERIFY(!icon2.isNull());
}
{
//invalid svg, but a pixmap added means we're not null
QIcon icon(prefix + "nonExistentFile.svg");
icon.addFile(prefix + "image.png", QSize(32,32));
QVERIFY(!icon.isNull());
}
}
void tst_QIcon_Svg::sizeInPercent()
{
QIcon icon(prefix + "rect_size_100percent.svg");
QCOMPARE(icon.actualSize(QSize(16, 8)), QSize(16, 8));
QCOMPARE(icon.pixmap(QSize(16, 8)).size(), QSize(16, 8));
QCOMPARE(icon.actualSize(QSize(8, 8)), QSize(8, 4));
QCOMPARE(icon.pixmap(QSize(8, 8)).size(), QSize(8, 4));
}
QTEST_MAIN(tst_QIcon_Svg)
#include "tst_qicon_svg.moc"