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