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"