Warning, file /frameworks/plasma-framework/autotests/plasmoidpackagetest.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: 2007 Bertjan Broeksema <b.broeksema@kdemail.net> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "plasmoidpackagetest.h" 0008 #include "../config-plasma.h" 0009 0010 #include <KJob> 0011 #include <QDir> 0012 #include <QFile> 0013 #include <QStandardPaths> 0014 #include <kzip.h> 0015 0016 #include <QDebug> 0017 0018 #include "applet.h" 0019 #include "pluginloader.h" 0020 0021 void PlasmoidPackageTest::initTestCase() 0022 { 0023 QStandardPaths::setTestModeEnabled(true); 0024 } 0025 0026 void PlasmoidPackageTest::init() 0027 { 0028 qDebug() << "PlasmoidPackage::init()"; 0029 m_package = QString("Package"); 0030 m_packageRoot = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/packageRoot"; 0031 m_defaultPackage = Plasma::PluginLoader::self()->loadPackage("Plasma/Applet"); 0032 cleanup(); // to prevent previous runs from interfering with this one 0033 } 0034 0035 void PlasmoidPackageTest::cleanup() 0036 { 0037 qDebug() << "cleaning up"; 0038 // Clean things up. 0039 QDir(m_packageRoot).removeRecursively(); 0040 } 0041 0042 void PlasmoidPackageTest::createTestPackage(const QString &packageName) 0043 { 0044 qDebug() << "Create test package" << m_packageRoot; 0045 QDir pRoot(m_packageRoot); 0046 // Create the root and package dir. 0047 if (!pRoot.exists()) { 0048 QVERIFY(QDir().mkpath(m_packageRoot)); 0049 } 0050 0051 // Create the package dir 0052 QVERIFY(QDir().mkpath(m_packageRoot + "/" + packageName)); 0053 qDebug() << "Created" << (m_packageRoot + "/" + packageName); 0054 0055 // Create the metadata.desktop file 0056 QFile file(m_packageRoot + "/" + packageName + "/metadata.desktop"); 0057 0058 QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); 0059 0060 QTextStream out(&file); 0061 out << "[Desktop Entry]\n"; 0062 out << "Name=" << packageName << "\n"; 0063 out << "X-KDE-PluginInfo-Name=" << packageName << "\n"; 0064 file.flush(); 0065 file.close(); 0066 0067 qDebug() << "OUT: " << packageName; 0068 0069 // Create the ui dir. 0070 QVERIFY(QDir().mkpath(m_packageRoot + "/" + packageName + "/contents/ui")); 0071 0072 // Create the main file. 0073 file.setFileName(m_packageRoot + "/" + packageName + "/contents/ui/main.qml"); 0074 QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); 0075 0076 out << "THIS IS A PLASMOID SCRIPT....."; 0077 file.flush(); 0078 file.close(); 0079 0080 qDebug() << "THIS IS A PLASMOID SCRIPT THING"; 0081 // Now we have a minimal plasmoid package which is valid. Let's add some 0082 // files to it for test purposes. 0083 0084 // Create the images dir. 0085 QVERIFY(QDir().mkpath(m_packageRoot + "/" + packageName + "/contents/images")); 0086 file.setFileName(m_packageRoot + "/" + packageName + "/contents/images/image-1.svg"); 0087 0088 QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); 0089 0090 out << "<svg>This is a test image</svg>"; 0091 file.flush(); 0092 file.close(); 0093 0094 file.setFileName(m_packageRoot + "/" + packageName + "/contents/images/image-2.svg"); 0095 0096 QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); 0097 0098 out.setDevice(&file); 0099 out << "<svg>This is another test image</svg>"; 0100 file.flush(); 0101 file.close(); 0102 } 0103 0104 void PlasmoidPackageTest::isValid() 0105 { 0106 Plasma::Package *p = new Plasma::Package(m_defaultPackage); 0107 p->setPath(m_packageRoot + '/' + m_package); 0108 0109 // A PlasmoidPackage is valid when: 0110 // - The package root exists. 0111 // - The package root consists an file named "ui/main.qml" 0112 QVERIFY(!p->isValid()); 0113 0114 // Create the root and package dir. 0115 QVERIFY(QDir().mkpath(m_packageRoot)); 0116 QVERIFY(QDir().mkpath(m_packageRoot + "/" + m_package)); 0117 0118 // Should still be invalid. 0119 delete p; 0120 p = new Plasma::Package(m_defaultPackage); 0121 p->setPath(m_packageRoot + '/' + m_package); 0122 QVERIFY(!p->isValid()); 0123 0124 // Create the metadata.desktop file. 0125 QFile file(m_packageRoot + "/" + m_package + "/metadata.desktop"); 0126 QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); 0127 0128 QTextStream out(&file); 0129 out << "[Desktop Entry]\n"; 0130 out << "Name=test\n"; 0131 out << "Description=Just a test desktop file"; 0132 file.flush(); 0133 file.close(); 0134 0135 // Create the ui dir. 0136 QVERIFY(QDir().mkpath(m_packageRoot + "/" + m_package + "/contents/ui")); 0137 0138 // No main file yet so should still be invalid. 0139 delete p; 0140 p = new Plasma::Package(m_defaultPackage); 0141 p->setPath(m_packageRoot + '/' + m_package); 0142 QVERIFY(!p->isValid()); 0143 0144 // Create the main file. 0145 file.setFileName(m_packageRoot + "/" + m_package + "/contents/ui/main.qml"); 0146 QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); 0147 0148 out.setDevice(&file); 0149 out << "THIS IS A PLASMOID SCRIPT.....\n"; 0150 file.flush(); 0151 file.close(); 0152 0153 file.setPermissions(QFile::ReadUser | QFile::WriteUser); 0154 // Main file exists so should be valid now. 0155 delete p; 0156 p = new Plasma::Package(m_defaultPackage); 0157 p->setPath(m_packageRoot + '/' + m_package); 0158 QVERIFY(p->isValid()); 0159 QCOMPARE(p->contentsHash(), QString("db0b38c2b4fe21a9f37923cc25152340de055f6d")); 0160 delete p; 0161 } 0162 0163 void PlasmoidPackageTest::filePath() 0164 { 0165 return; 0166 // Package::filePath() returns 0167 // - {package_root}/{package_name}/path/to/file if the file exists 0168 // - QString() otherwise. 0169 Plasma::Package *p = new Plasma::Package(m_defaultPackage); 0170 p->setPath(m_packageRoot + '/' + m_package); 0171 0172 QCOMPARE(p->filePath("scripts", "main"), QString()); 0173 0174 QVERIFY(QDir().mkpath(m_packageRoot + "/" + m_package + "/contents/ui/main.qml")); 0175 QFile file(m_packageRoot + "/" + m_package + "/contents/ui/main.qml"); 0176 QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); 0177 0178 QTextStream out(&file); 0179 out << "THIS IS A PLASMOID SCRIPT....."; 0180 file.flush(); 0181 file.close(); 0182 0183 // The package is valid by now so a path for code/main should get returned. 0184 delete p; 0185 p = new Plasma::Package(m_defaultPackage); 0186 p->setPath(m_packageRoot + '/' + m_package); 0187 0188 const QString path = QFileInfo(m_packageRoot + "/" + m_package + "/contents/ui/main.qml").canonicalFilePath(); 0189 0190 // Two ways to get the same info. 0191 // 1. Give the file type which refers to a class of files (a directory) in 0192 // the package structure and the file name. 0193 // 2. Give the file type which refers to a file in the package structure. 0194 // 0195 // NOTE: scripts, main and mainscript are defined in packages.cpp and are 0196 // specific for a PlasmoidPackage. 0197 QCOMPARE(p->filePath("scripts", "main"), path); 0198 QCOMPARE(p->filePath("mainscript"), path); 0199 delete p; 0200 } 0201 0202 void PlasmoidPackageTest::entryList() 0203 { 0204 // Create a package named @p packageName which is valid and has some images. 0205 createTestPackage(m_package); 0206 0207 // Create a package object and verify that it is valid. 0208 Plasma::Package *p = new Plasma::Package(m_defaultPackage); 0209 p->setPath(m_packageRoot + '/' + m_package); 0210 QVERIFY(p->isValid()); 0211 0212 // Now we have a valid package that should contain the following files in 0213 // given filetypes: 0214 // fileTye - Files 0215 // scripts - {"main"} 0216 // images - {"image-1.svg", "image-2.svg"} 0217 QStringList files = p->entryList("scripts"); 0218 QCOMPARE(files.size(), 1); 0219 QVERIFY(files.contains("main")); 0220 0221 files = p->entryList("images"); 0222 QCOMPARE(files.size(), 2); 0223 QVERIFY(files.contains("image-1.svg")); 0224 QVERIFY(files.contains("image-2.svg")); 0225 delete p; 0226 } 0227 0228 void PlasmoidPackageTest::createAndInstallPackage() 0229 { 0230 qDebug() << " "; 0231 qDebug() << " CreateAndInstall "; 0232 createTestPackage("plasmoid_to_package"); 0233 const QString packagePath = m_packageRoot + '/' + "testpackage.plasmoid"; 0234 0235 KZip creator(packagePath); 0236 QVERIFY(creator.open(QIODevice::WriteOnly)); 0237 creator.addLocalDirectory(m_packageRoot + '/' + "plasmoid_to_package", "."); 0238 creator.close(); 0239 KIO::NetAccess::del(QUrl::fromLocalFile(m_packageRoot + "/plasmoid_to_package"), 0); 0240 0241 QVERIFY(QFile::exists(packagePath)); 0242 0243 KZip package(packagePath); 0244 QVERIFY(package.open(QIODevice::ReadOnly)); 0245 const KArchiveDirectory *dir = package.directory(); 0246 QVERIFY(dir); // 0247 QVERIFY(dir->entry("metadata.desktop")); 0248 const KArchiveEntry *contentsEntry = dir->entry("contents"); 0249 QVERIFY(contentsEntry); 0250 QVERIFY(contentsEntry->isDirectory()); 0251 const KArchiveDirectory *contents = static_cast<const KArchiveDirectory *>(contentsEntry); 0252 QVERIFY(contents->entry("ui")); 0253 QVERIFY(contents->entry("images")); 0254 0255 m_defaultPackageStructure = new Plasma::PackageStructure(this); 0256 Plasma::Package *p = new Plasma::Package(m_defaultPackageStructure); 0257 qDebug() << "Installing " << archivePath; 0258 // const QString packageRoot = "plasma/plasmoids/"; 0259 // const QString servicePrefix = "plasma-applet-"; 0260 KJob *job = p->install(archivePath, m_packageRoot); 0261 connect(job, SIGNAL(finished(KJob *)), SLOT(packageInstalled(KJob *))); 0262 0263 // QVERIFY(p->isValid()); 0264 delete p; 0265 } 0266 0267 void PlasmoidPackageTest::packageInstalled(KJob *j) 0268 { 0269 qDebug() << "!!!!!!!!!!!!!!!!!!!! package installed" << (j->error() == KJob::NoError); 0270 QVERIFY(j->error() == KJob::NoError); 0271 // QVERIFY(p->path()); 0272 0273 Plasma::Package *p = new Plasma::Package(m_defaultPackageStructure); 0274 KJob *jj = p->uninstall("org.kde.microblog-qml", m_packageRoot); 0275 // QObject::disconnect(j, SIGNAL(finished(KJob*)), this, SLOT(packageInstalled(KJob*))); 0276 connect(jj, SIGNAL(finished(KJob *)), SLOT(packageInstalled(KJob *))); 0277 } 0278 0279 void PlasmoidPackageTest::packageUninstalled(KJob *j) 0280 { 0281 qDebug() << "!!!!!!!!!!!!!!!!!!!!! package uninstalled"; 0282 QVERIFY(j->error() == KJob::NoError); 0283 } 0284 0285 QTEST_MAIN(PlasmoidPackageTest) 0286 0287 #include "moc_plasmoidpackagetest.cpp"