/*
* Copyright 2012 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; version 3.
*
* This program 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Authors:
* Renato Araujo Oliveira Filho
*/
#include "indicatorsmanager.h"
#include
#include
#include
class IndicatorsManagerTest : public QObject
{
Q_OBJECT
private Q_SLOTS:
void initTestCase()
{
setenv("XDG_DATA_DIRS", (testDataDir() + "/data").toLatin1().data(), 1);
}
void cleanupTestCase()
{
}
/*
* Test if all plugins is loaded correct
*/
void testLoad()
{
IndicatorsManager manager;
QVERIFY(!manager.isLoaded());
QCOMPARE(manager.indicators().count(), 0);
manager.setProfile("test1");
manager.load();
QVERIFY(manager.isLoaded());
QCOMPARE(manager.indicators().count(), 4);
manager.unload();
QVERIFY(!manager.isLoaded());
QCOMPARE(manager.indicators().count(), 0);
}
/*
* Test the creation & initialising of the indicator data
*/
void testPluginInterfaceProfile1()
{
IndicatorsManager manager;
manager.setProfile("test1");
manager.load();
Indicator::Ptr indicator = manager.indicator("indicator-fake1");
QVERIFY(indicator ? true : false);
QCOMPARE(indicator->identifier(), QString("indicator-fake1"));
QCOMPARE(indicator->position(), 1);
// Check that the initial properties have been set.
QVariantMap props = indicator->indicatorProperties().toMap();
QCOMPARE(props.count(), 4);
QCOMPARE(props["busName"].toString(), QString("com.canonical.indicator.fake1"));
QCOMPARE(props["actionsObjectPath"].toString(), QString("/com/canonical/indicator/fake1"));
QCOMPARE(props["menuObjectPath"].toString(), QString("/com/canonical/indicator/fake1/test1"));
}
/*
* Test the creation & initialising of the indicator data
*/
void testPluginInterfaceProfile2()
{
IndicatorsManager manager;
manager.setProfile("test2");
manager.load();
Indicator::Ptr indicator = manager.indicator("indicator-fake1");
QVERIFY(indicator ? true : false);
QCOMPARE(indicator->identifier(), QString("indicator-fake1"));
QCOMPARE(indicator->position(), 1);
// Check that the initial properties have been set.
QVariantMap props = indicator->indicatorProperties().toMap();
QCOMPARE(props.count(), 4);
QCOMPARE(props["busName"].toString(), QString("com.canonical.indicator.fake1"));
QCOMPARE(props["actionsObjectPath"].toString(), QString("/com/canonical/indicator/fake1"));
QCOMPARE(props["menuObjectPath"].toString(), QString("/com/canonical/indicator/fake1/test2"));
}
/*
* Test switching the indicator profile data
*/
void testPluginInterfaceProfileSwitch()
{
IndicatorsManager manager;
manager.setProfile("test1");
manager.load();
Indicator::Ptr indicator = manager.indicator("indicator-fake1");
QVERIFY(indicator ? true : false);
QVariantMap props = indicator->indicatorProperties().toMap();
QCOMPARE(props["menuObjectPath"].toString(), QString("/com/canonical/indicator/fake1/test1"));
manager.setProfile("test2");
props = indicator->indicatorProperties().toMap();
QCOMPARE(props["menuObjectPath"].toString(), QString("/com/canonical/indicator/fake1/test2"));
}
/*
* Test if a new plugin object is create for each different plugin
*/
void testPluginInstance()
{
IndicatorsManager manager;
manager.setProfile("test2");
manager.load();
Indicator::Ptr i0 = manager.indicator("indicator-fake1");
Indicator::Ptr i1 = manager.indicator("indicator-fake1");
QVERIFY(i0?true:false);
QVERIFY(i1?true:false);
QCOMPARE(i0, i1);
Indicator::Ptr i2 = manager.indicator("indicator-fake2");
QVERIFY(i2?true:false);
QVERIFY(i2 != i1);
QVERIFY(i2 != i1);
}
/*
* Test if a new plugin init function is called only once
*/
void testPluginInitAndShutdown()
{
IndicatorsManager manager;
manager.setProfile("test1");
manager.load();
QWeakPointer wp0;
QWeakPointer wp1;
{
Indicator::Ptr i0 = manager.indicator("indicator-fake1");
wp0 = i0.toWeakRef();
Indicator::Ptr i1 = manager.indicator("indicator-fake1");
wp1 = i1.toWeakRef();
manager.unload();
// still alive while we have the shared pointers.
QVERIFY(!wp0.isNull());
QVERIFY(!wp1.isNull());
}
// no more smart pointers. should have been released.
QVERIFY(wp0.isNull());
QVERIFY(wp1.isNull());
}
};
QTEST_GUILESS_MAIN(IndicatorsManagerTest)
#include "IndicatorsManagerTest.moc"