Warning, file /frameworks/plasma-framework/autotests/iconitemhidpitest.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     SPDX-FileCopyrightText: 2016 David Rosca <nowrep@gmail.com>
0003     SPDX-FileCopyrightText: 2022 Fushan Wen <qydwhotmail@gmail.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include <QQmlComponent>
0009 #include <QQmlContext>
0010 #include <QQmlEngine>
0011 #include <QQuickItem>
0012 #include <QQuickItemGrabResult>
0013 #include <QQuickView>
0014 #include <QtTest>
0015 
0016 #include <KIconEngine>
0017 #include <KIconLoader>
0018 #include <KIconTheme>
0019 
0020 #include "plasma/svg.h"
0021 #include "plasma/theme.h"
0022 #include "utils.h"
0023 
0024 class IconItemHiDPITest : public QObject
0025 {
0026     Q_OBJECT
0027 
0028 private Q_SLOTS:
0029     void initTestCase();
0030     void cleanupTestCase();
0031     void init();
0032     void cleanup();
0033 
0034     void testScaleFactor();
0035 
0036 private:
0037     QQuickItem *createIconItem();
0038 
0039     QQuickView *m_view = nullptr;
0040 };
0041 
0042 void IconItemHiDPITest::initTestCase()
0043 {
0044     Plasma::TestUtils::installPlasmaTheme("breeze");
0045     Plasma::TestUtils::installPlasmaTheme("breeze-light");
0046     Plasma::TestUtils::installPlasmaTheme("breeze-dark");
0047 
0048     QVERIFY(qputenv("XDG_DATA_DIRS", QByteArray(qgetenv("XDG_DATA_DIRS") + ":" + QFINDTESTDATA("data").toLocal8Bit())));
0049 
0050     QIcon::setThemeSearchPaths({QFINDTESTDATA("data/icons")});
0051     QIcon::setThemeName("test-theme");
0052 
0053     KIconTheme::forceThemeForTests("test-theme");
0054     KIconTheme::reconfigure();
0055     KIconLoader::global()->reconfigure(QString());
0056 
0057     m_view = new QQuickView();
0058     m_view->setSource(QUrl::fromLocalFile(QFINDTESTDATA("data/view.qml")));
0059     m_view->show();
0060     QVERIFY(QTest::qWaitForWindowExposed(m_view));
0061 
0062     if (!m_view->rootObject() || !m_view->rootObject()->grabToImage()) {
0063         QSKIP("Cannot grab item to image.");
0064     }
0065 }
0066 
0067 void IconItemHiDPITest::cleanupTestCase()
0068 {
0069     delete m_view;
0070 }
0071 
0072 void IconItemHiDPITest::init()
0073 {
0074     Plasma::Theme().setThemeName(QStringLiteral("default"));
0075 }
0076 
0077 void IconItemHiDPITest::cleanup()
0078 {
0079     qDeleteAll(m_view->rootObject()->childItems());
0080 }
0081 
0082 QQuickItem *IconItemHiDPITest::createIconItem()
0083 {
0084     QByteArray iconQml =
0085         "import QtQuick 2.0;"
0086         "import org.kde.plasma.core 2.0 as PlasmaCore;"
0087         "PlasmaCore.IconItem {"
0088         "    id: root;"
0089         "}";
0090 
0091     QQmlComponent component(m_view->engine());
0092 
0093     QSignalSpy spy(&component, SIGNAL(statusChanged(QQmlComponent::Status)));
0094     component.setData(iconQml, QUrl("test://iconTest"));
0095     if (component.status() != QQmlComponent::Ready) {
0096         spy.wait();
0097     }
0098 
0099     QQuickItem *item = qobject_cast<QQuickItem *>(component.create(m_view->engine()->rootContext()));
0100     Q_ASSERT(item && qstrcmp(item->metaObject()->className(), "IconItem") == 0);
0101     item->setParentItem(m_view->rootObject());
0102     return item;
0103 }
0104 
0105 void IconItemHiDPITest::testScaleFactor()
0106 {
0107     QString name("tst-plasma-framework-test-icon");
0108 
0109     QQuickItem *item = createIconItem();
0110     item->setProperty("animated", false);
0111     item->setSize(QSize(64, 64));
0112     item->setProperty("source", name);
0113     QVERIFY(item->property("valid").toBool());
0114 
0115     Plasma::Svg *svg = item->findChild<Plasma::Svg *>();
0116     Q_ASSERT(svg);
0117     QCOMPARE(svg->imagePath(), QFINDTESTDATA("data/icons/test-theme/apps/32/" + name + ".svg"));
0118     if (m_view->devicePixelRatio() != 1.25) {
0119         qInfo() << m_view->devicePixelRatio();
0120         QSKIP("Can't test devicePixelRatio when system DPI is not 100%.");
0121     }
0122     QCOMPARE(svg->devicePixelRatio(), 2);
0123 }
0124 
0125 QTEST_MAIN(IconItemHiDPITest)
0126 
0127 #include "iconitemhidpitest.moc"