use non const pointers

This commit is contained in:
Marco Martin 2014-09-01 19:23:18 +02:00
parent 7e73be169c
commit 6be2e9d46d
2 changed files with 20 additions and 19 deletions

View File

@ -28,43 +28,43 @@
void FallbackPackageTest::initTestCase()
{
m_packagePath = QFINDTESTDATA("data/testpackage");
m_pkg = Plasma::PluginLoader::self()->loadPackage("Plasma/Generic");
m_pkg.setPath(m_packagePath);
m_fallPackagePath = QFINDTESTDATA("data/testfallbackpackage");
m_fallPackagePath = QFINDTESTDATA("data/testpackage");
m_fallPkg = Plasma::PluginLoader::self()->loadPackage("Plasma/Generic");
m_fallPkg.setPath(m_fallPackagePath);
m_packagePath = QFINDTESTDATA("data/testfallbackpackage");
m_pkg = Plasma::PluginLoader::self()->loadPackage("Plasma/Generic");
m_pkg.setPath(m_packagePath);
}
void FallbackPackageTest::beforeFallback()
{
QVERIFY(m_pkg.hasValidStructure());
QVERIFY(m_fallPkg.hasValidStructure());
QVERIFY(m_pkg.hasValidStructure());
//m_pkg should have otherfile.qml, m_fallPkg shouldn't
QVERIFY(!m_pkg.filePath("ui", "otherfile.qml").isEmpty());
QVERIFY(m_fallPkg.filePath("ui", "otherfile.qml").isEmpty());
//m_fallPkg should have otherfile.qml, m_pkg shouldn't
QVERIFY(!m_fallPkg.filePath("ui", "otherfile.qml").isEmpty());
QVERIFY(m_pkg.filePath("ui", "otherfile.qml").isEmpty());
}
void FallbackPackageTest::afterFallback()
{
m_fallPkg.setFallbackPackage(m_pkg);
m_pkg.setFallbackPackage(m_fallPkg);
//afetr setting the fallback, m_fallPkg should resolve the exact same file as m_pkg
//after setting the fallback, m_pkg should resolve the exact same file as m_fallPkg
// for otherfile.qml
QVERIFY(!m_fallPkg.filePath("ui", "otherfile.qml").isEmpty());
QCOMPARE(m_pkg.filePath("ui", "otherfile.qml"), m_fallPkg.filePath("ui", "otherfile.qml"));
QVERIFY(m_pkg.filePath("mainscript") != m_fallPkg.filePath("mainscript"));
QVERIFY(!m_pkg.filePath("ui", "otherfile.qml").isEmpty());
QCOMPARE(m_fallPkg.filePath("ui", "otherfile.qml"), m_pkg.filePath("ui", "otherfile.qml"));
QVERIFY(m_fallPkg.filePath("mainscript") != m_pkg.filePath("mainscript"));
}
void FallbackPackageTest::cycle()
{
m_pkg.setFallbackPackage(m_fallPkg);
m_fallPkg.setFallbackPackage(m_pkg);
m_pkg.setFallbackPackage(m_fallPkg);
//The cycle should have been detected and filePath should take a not infinite tiume
QTRY_COMPARE_WITH_TIMEOUT(m_pkg.filePath("ui", "otherfile.qml"), m_fallPkg.filePath("ui", "otherfile.qml"), 1000);
//The cycle should have been detected and filePath should take a not infinite time
QTRY_COMPARE_WITH_TIMEOUT(m_fallPkg.filePath("ui", "otherfile.qml"), m_pkg.filePath("ui", "otherfile.qml"), 1000);
}
QTEST_MAIN(FallbackPackageTest)

View File

@ -921,13 +921,14 @@ bool PackagePrivate::hasCycle(const Plasma::Package &package)
//This is the Floyd cycle detection algorithm
//http://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare
const Plasma::Package *slowPackage = &package;
const Plasma::Package *fastPackage = &package;
Plasma::Package *slowPackage = const_cast<Plasma::Package *>(&package);
Plasma::Package *fastPackage = const_cast<Plasma::Package *>(&package);
while (fastPackage && fastPackage->d->fallbackPackage) {
//consider two packages the same if they have the same metadata
if ((fastPackage->d->fallbackPackage->metadata().isValid() && fastPackage->d->fallbackPackage->metadata() == slowPackage->metadata()) ||
(fastPackage->d->fallbackPackage->d->fallbackPackage && fastPackage->d->fallbackPackage->d->fallbackPackage->metadata().isValid() && fastPackage->d->fallbackPackage->d->fallbackPackage->metadata() == slowPackage->metadata())) {
qWarning() << "Warning: the fallback chain of " << package.metadata().pluginName() << "contains a cyclical dependency.";
return true;
}
fastPackage = fastPackage->d->fallbackPackage->d->fallbackPackage;