/****************************************************************************** * Copyright 2007 by Bertjan Broeksema * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Library General Public * * License as published by the Free Software Foundation; either * * version 2 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Library General Public License for more details. * * * * You should have received a copy of the GNU Library General Public License * * along with this library; see the file COPYING.LIB. If not, write to * * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * * Boston, MA 02110-1301, USA. * *******************************************************************************/ #include "plasmoidpackagetest.h" #include "../config-plasma.h" #include #include #include #include #include #include #include "applet.h" #include "pluginloader.h" void PlasmoidPackageTest::initTestCase() { QStandardPaths::enableTestMode(true); } void PlasmoidPackageTest::init() { kDebug() << "PlasmoidPackage::init()"; m_package = QString("Package"); m_packageRoot = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/packageRoot"; m_defaultPackage = Plasma::PluginLoader::self()->loadPackage("Plasma/Applet"); cleanup(); // to prevent previous runs from interfering with this one } void PlasmoidPackageTest::cleanup() { kDebug() << "cleaning up"; // Clean things up. QDir(m_packageRoot).removeRecursively(); } void PlasmoidPackageTest::createTestPackage(const QString &packageName) { return; kDebug() << "Create test package" << m_packageRoot; QDir pRoot(m_packageRoot); // Create the root and package dir. if (!pRoot.exists()) { QVERIFY(QDir().mkpath(m_packageRoot)); } // Create the package dir QVERIFY(QDir().mkpath(m_packageRoot + "/" + packageName)); kDebug() << "Created" << (m_packageRoot + "/" + packageName); // Create the metadata.desktop file QFile file(m_packageRoot + "/" + packageName + "/metadata.desktop"); QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); QTextStream out(&file); out << "[Desktop Entry]\n"; out << "Name=" << packageName << "\n"; out << "X-KDE-PluginInfo-Name=" << packageName << "\n"; file.flush(); file.close(); kDebug() << "OUT: " << packageName; // Create the code dir. QVERIFY(QDir().mkpath(m_packageRoot + "/" + packageName + "/contents/code")); // Create the main file. file.setFileName(m_packageRoot + "/" + packageName + "/contents/code/main"); QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); out << "THIS IS A PLASMOID SCRIPT....."; file.flush(); file.close(); kDebug() << "THIS IS A PLASMOID SCRIPT THIGN"; // Now we have a minimal plasmoid package which is valid. Let's add some // files to it for test purposes. // Create the images dir. QVERIFY(QDir().mkpath(m_packageRoot + "/" + packageName + "/contents/images")); file.setFileName(m_packageRoot + "/" + packageName + "/contents/images/image-1.svg"); QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); out << "This is a test image"; file.flush(); file.close(); file.setFileName(m_packageRoot + "/" + packageName + "/contents/images/image-2.svg"); QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); out.setDevice(&file); out << "This is another test image"; file.flush(); file.close(); } void PlasmoidPackageTest::isValid() { Plasma::Package *p = new Plasma::Package(m_defaultPackage); p->setPath(m_packageRoot + '/' + m_package); #ifndef NDEBUG qDebug() << "package path is" << p->path(); #endif // A PlasmoidPackage is valid when: // - The package root exists. // - The package root consists an file named "code/main" QVERIFY(!p->isValid()); // Create the root and package dir. QVERIFY(QDir().mkpath(m_packageRoot)); QVERIFY(QDir().mkpath(m_packageRoot + "/" + m_package)); // Should still be invalid. delete p; p = new Plasma::Package(m_defaultPackage); p->setPath(m_packageRoot + '/' + m_package); QVERIFY(!p->isValid()); // Create the metadata.desktop file. QFile file(m_packageRoot + "/" + m_package + "/metadata.desktop"); QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); QTextStream out(&file); out << "[Desktop Entry]\n"; out << "Name=test\n"; out << "Description=Just a test desktop file"; file.flush(); file.close(); // Create the code dir. QVERIFY(QDir().mkpath(m_packageRoot + "/" + m_package + "/contents/code")); // No main file yet so should still be invalid. delete p; p = new Plasma::Package(m_defaultPackage); p->setPath(m_packageRoot + '/' + m_package); QVERIFY(!p->isValid()); // Create the main file. file.setFileName(m_packageRoot + "/" + m_package + "/contents/code/main"); QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); out.setDevice(&file); out << "THIS IS A PLASMOID SCRIPT.....\n"; file.flush(); file.close(); file.setPermissions(QFile::ReadUser | QFile::WriteUser); // Main file exists so should be valid now. delete p; p = new Plasma::Package(m_defaultPackage); p->setPath(m_packageRoot + '/' + m_package); QVERIFY(p->isValid()); QCOMPARE(p->contentsHash(), QString("db0b38c2b4fe21a9f37923cc25152340de055f6d")); delete p; } void PlasmoidPackageTest::filePath() { return; // Package::filePath() returns // - {package_root}/{package_name}/path/to/file if the file exists // - QString() otherwise. Plasma::Package *p = new Plasma::Package(m_defaultPackage); p->setPath(m_packageRoot + '/' + m_package); QCOMPARE(p->filePath("scripts", "main"), QString()); QVERIFY(QDir().mkpath(m_packageRoot + "/" + m_package + "/contents/code")); QFile file(m_packageRoot + "/" + m_package + "/contents/code/main"); QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text)); QTextStream out(&file); out << "THIS IS A PLASMOID SCRIPT....."; file.flush(); file.close(); // The package is valid by now so a path for code/main should get returned. delete p; p = new Plasma::Package(m_defaultPackage); p->setPath(m_packageRoot + '/' + m_package); const QString path = QFileInfo(m_packageRoot + "/" + m_package + "/contents/code/main").canonicalFilePath(); // Two ways to get the same info. // 1. Give the file type which refers to a class of files (a directory) in // the package structure and the file name. // 2. Give the file type which refers to a file in the package structure. // // NOTE: scripts, main and mainscript are defined in packages.cpp and are // specific for a PlasmoidPackage. QCOMPARE(p->filePath("scripts", "main"), path); QCOMPARE(p->filePath("mainscript"), path); delete p; } void PlasmoidPackageTest::entryList() { return; // Create a package named @p packageName which is valid and has some images. createTestPackage(m_package); // Create a package object and verify that it is valid. Plasma::Package *p = new Plasma::Package(m_defaultPackage); p->setPath(m_packageRoot + '/' + m_package); QVERIFY(p->isValid()); // Now we have a valid package that should contain the following files in // given filetypes: // fileTye - Files // scripts - {"main"} // images - {"image-1.svg", "image-2.svg"} QStringList files = p->entryList("scripts"); QCOMPARE(files.size(), 1); QVERIFY(files.contains("main")); files = p->entryList("images"); QCOMPARE(files.size(), 2); QVERIFY(files.contains("image-1.svg")); QVERIFY(files.contains("image-2.svg")); delete p; } void PlasmoidPackageTest::createAndInstallPackage() { kDebug() << " "; kDebug() << " CreateAndInstall "; // createTestPackage("plasmoid_to_package"); // const QString packagePath = m_packageRoot + '/' + "testpackage.plasmoid"; // // KZip creator(packagePath); // QVERIFY(creator.open(QIODevice::WriteOnly)); // creator.addLocalDirectory(m_packageRoot + '/' + "plasmoid_to_package", "."); // creator.close(); // KIO::NetAccess::del(KUrl(m_packageRoot + "/plasmoid_to_package"), 0); // // QVERIFY(QFile::exists(packagePath)); // // KZip package(packagePath); // QVERIFY(package.open(QIODevice::ReadOnly)); // const KArchiveDirectory *dir = package.directory(); // QVERIFY(dir);// // QVERIFY(dir->entry("metadata.desktop")); // const KArchiveEntry *contentsEntry = dir->entry("contents"); // QVERIFY(contentsEntry); // QVERIFY(contentsEntry->isDirectory()); // const KArchiveDirectory *contents = static_cast(contentsEntry); // QVERIFY(contents->entry("code")); // QVERIFY(contents->entry("images")); QString archivePath = "/home/sebas/kde5/src/kdelibs/plasma/tests/microblog.plasmoid"; m_defaultPackageStructure = new Plasma::PackageStructure(this); Plasma::Package *p = new Plasma::Package(m_defaultPackageStructure); kDebug() << "Installing " << archivePath; // p->setPath(,z //const QString packageRoot = "plasma/plasmoids/"; //const QString servicePrefix = "plasma-applet-"; KJob* job = p->install(archivePath, m_packageRoot); connect(job, SIGNAL(finished(KJob*)), SLOT(packageInstalled(KJob*))); //QVERIFY(p->isValid()); delete p; } void PlasmoidPackageTest::packageInstalled(KJob* j) { kDebug() << "!!!!!!!!!!!!!!!!!!!! package installed" << (j->error() == KJob::NoError); QVERIFY(j->error() == KJob::NoError); //QVERIFY(p->path()); Plasma::Package *p = new Plasma::Package(m_defaultPackageStructure); KJob* jj = p->uninstall("org.kde.microblog-qml", m_packageRoot); //QObject::disconnect(j, SIGNAL(finished(KJob*)), this, SLOT(packageInstalled(KJob*))); connect(jj, SIGNAL(finished(KJob*)), SLOT(packageInstalled(KJob*))); } void PlasmoidPackageTest::packageUninstalled(KJob* j) { kDebug() << "!!!!!!!!!!!!!!!!!!!!! package uninstalled"; QVERIFY(j->error() == KJob::NoError); } QTEST_MAIN(PlasmoidPackageTest)