1
#include "ft_mimpluginmanager.h"
3
#include "mkeyboardstatetracker_stub.h"
4
#include "dummyimplugin.h"
5
#include "dummyimplugin3.h"
6
#include "dummyinputmethod.h"
7
#include "dummyinputmethod3.h"
8
#include "core-utils.h"
9
#include "mimsettingsqsettings.h"
11
#include <minputcontextconnection.h>
12
#include <mimpluginmanager.h>
13
#include <mimpluginmanager_p.h>
14
#include <msharedattributeextensionmanager.h>
17
#include <QGraphicsScene>
19
#include <QApplication>
24
const QString pluginName = "DummyImPlugin";
25
const QString pluginName3 = "DummyImPlugin3";
26
const QString pluginId = "libdummyimplugin.so";
27
const QString pluginId3 = "libdummyimplugin3.so";
29
const QString EnabledPluginsKey = MALIIT_CONFIG_ROOT"onscreen/enabled";
30
const QString ActivePluginKey = MALIIT_CONFIG_ROOT"onscreen/active";
32
const QString ConfigRoot = MALIIT_CONFIG_ROOT;
33
const QString MImPluginPaths = ConfigRoot + "paths";
34
const QString MImPluginActive = ConfigRoot + "activeplugins";
35
const QString MImPluginDisabled = ConfigRoot + "disabledpluginfiles";
37
const QString PluginRoot = MALIIT_CONFIG_ROOT"plugins/";
38
const QString PluginSettings = MALIIT_CONFIG_ROOT"pluginsettings";
39
const QString MImAccesoryEnabled = MALIIT_CONFIG_ROOT"accessoryenabled";
41
const MImPluginDescription* findPluginDescriptions(const QList<MImPluginDescription> &list, const QString &pluginName)
43
Q_FOREACH (const MImPluginDescription &desc, list) {
44
if (desc.name() == pluginName) {
54
// Initialization............................................................
56
void Ft_MIMPluginManager::initTestCase()
58
MImSettings::setPreferredSettingsType(MImSettings::TemporarySettings);
61
void Ft_MIMPluginManager::cleanupTestCase()
65
void Ft_MIMPluginManager::init()
67
MImSettings(MImPluginPaths).set(MaliitTestUtils::getTestPluginPath());
68
MImSettings(MImPluginDisabled).set(QStringList("libdummyimplugin2.so"));
69
MImSettings(MImPluginActive).set(QStringList("DummyImPlugin"));
71
MImSettings(PluginRoot + "hardware").set(pluginId);
72
MImSettings(PluginRoot + "accessory").set(pluginId3);
74
MImSettings enabledPluginsSettings(EnabledPluginsKey);
75
QStringList enabledPlugins;
76
enabledPlugins << pluginId + ":" + "dummyimsv1";
77
enabledPlugins << pluginId + ":" + "dummyimsv2";
78
enabledPlugins << pluginId3 + ":" + "dummyim3sv1";
79
enabledPlugins << pluginId3 + ":" + "dummyim3sv2";
80
enabledPluginsSettings.set(enabledPlugins);
82
MImSettings activePluginSettings(ActivePluginKey);
84
activePlugin = pluginId + ":" + "dummyimsv1";
85
activePluginSettings.set(activePlugin);
87
gMKeyboardStateTrackerStub->setOpenState(false);
88
MImSettings(MImAccesoryEnabled).set(QVariant(false));
90
QSharedPointer<MInputContextConnection> icConnection(new MInputContextConnection);
91
subject = new MIMPluginManager(icConnection, QSharedPointer<Maliit::Server::AbstractSurfaceGroupFactory>(new MaliitTestUtils::TestSurfaceGroupFactory));
94
void Ft_MIMPluginManager::cleanup()
100
// Test methods..............................................................
102
void Ft_MIMPluginManager::testLoadPlugins()
104
QStringList loadedPlugins = subject->loadedPluginsNames();
105
QCOMPARE(loadedPlugins.count(), 2);
106
QVERIFY(loadedPlugins.contains(pluginId));
107
QVERIFY(loadedPlugins.contains(pluginId3));
109
QStringList activePlugins = subject->activePluginsNames();
110
QCOMPARE(activePlugins.count(), 1);
111
QCOMPARE(activePlugins.first(), pluginId);
115
void Ft_MIMPluginManager::testSwitchPluginState()
117
MImSettings(MImAccesoryEnabled).set(QVariant(true));
119
QStringList loadedPlugins = subject->loadedPluginsNames();
120
QCOMPARE(loadedPlugins.count(), 2);
121
QVERIFY(loadedPlugins.contains(pluginId));
122
QVERIFY(loadedPlugins.contains(pluginId3));
124
QStringList activePlugins = subject->activePluginsNames();
125
QCOMPARE(activePlugins.count(), 1);
126
QCOMPARE(activePlugins.first(), pluginId3);
130
void Ft_MIMPluginManager::testMultiplePlugins()
132
//QSKIP("This test fails to activate > 1 plugins, for unknown reasons.", SkipAll);
134
gMKeyboardStateTrackerStub->setOpenState(true);
135
MImSettings(MImAccesoryEnabled).set(QVariant(true));
137
QStringList loadedPlugins = subject->loadedPluginsNames();
138
QCOMPARE(loadedPlugins.count(), 2);
139
QVERIFY(loadedPlugins.contains(pluginId));
140
QVERIFY(loadedPlugins.contains(pluginId3));
142
QStringList activePlugins = subject->activePluginsNames();
143
QCOMPARE(activePlugins.count(), 2);
144
QVERIFY(activePlugins.contains(pluginId));
145
QVERIFY(activePlugins.contains(pluginId3));
148
void Ft_MIMPluginManager::testSwitchPluginBySignal()
150
DummyImPlugin *plugin = 0;
151
QPointer<DummyInputMethod> inputMethod = 0;
153
for (MIMPluginManagerPrivate::Plugins::iterator iterator(subject->d_ptr->plugins.begin());
154
iterator != subject->d_ptr->plugins.end();
156
if (pluginName == iterator.key()->name()) {
157
plugin = dynamic_cast<DummyImPlugin *>(iterator.key());
161
QVERIFY(plugin != 0);
162
inputMethod = dynamic_cast<DummyInputMethod *>(subject->d_ptr->plugins[plugin].inputMethod);
163
QVERIFY(inputMethod != 0);
165
inputMethod->switchMe();
167
QStringList activePlugins = subject->activePluginsNames();
168
QCOMPARE(activePlugins.count(), 1);
169
QVERIFY(activePlugins.contains(pluginId3));
170
QVERIFY(inputMethod != 0);
173
void Ft_MIMPluginManager::testSwitchToSpecifiedPlugin()
175
DummyImPlugin *plugin = 0;
176
QPointer<DummyInputMethod> inputMethod = 0;
178
for (MIMPluginManagerPrivate::Plugins::iterator iterator(subject->d_ptr->plugins.begin());
179
iterator != subject->d_ptr->plugins.end();
181
if (pluginName == iterator.key()->name()) {
182
plugin = dynamic_cast<DummyImPlugin *>(iterator.key());
186
QVERIFY(plugin != 0);
187
inputMethod = dynamic_cast<DummyInputMethod *>(subject->d_ptr->plugins[plugin].inputMethod);
188
QVERIFY(inputMethod != 0);
190
inputMethod->switchMe(pluginId3);
192
QStringList activePlugins = subject->activePluginsNames();
193
QCOMPARE(activePlugins.count(), 1);
194
QVERIFY(activePlugins.contains(pluginId3));
195
QVERIFY(inputMethod != 0);
198
void Ft_MIMPluginManager::testPluginDescriptions()
200
QSignalSpy spy(subject, SIGNAL(pluginsChanged()));
201
QVERIFY(spy.isValid());
203
MImSettings enabledPluginsSettings(EnabledPluginsKey);
204
QStringList enabledPlugins;
205
const MImPluginDescription *description = 0;
207
enabledPlugins << pluginId + ":" + "dummyimsv1";
208
enabledPluginsSettings.set(enabledPlugins);
209
QCOMPARE(spy.count(), 1);
211
description = findPluginDescriptions(subject->pluginDescriptions(Maliit::OnScreen), pluginName);
212
QVERIFY(description);
213
QVERIFY(description->enabled());
214
description = findPluginDescriptions(subject->pluginDescriptions(Maliit::OnScreen), pluginName3);
215
QVERIFY(description);
216
QVERIFY(!description->enabled());
219
enabledPlugins << pluginId + ":" + "dummyimsv2";
220
enabledPluginsSettings.set(enabledPlugins);
221
QCOMPARE(spy.count(), 2);
223
description = findPluginDescriptions(subject->pluginDescriptions(Maliit::OnScreen), pluginName);
224
QVERIFY(description);
225
QVERIFY(description->enabled());
226
description = findPluginDescriptions(subject->pluginDescriptions(Maliit::OnScreen), pluginName3);
227
QVERIFY(description);
228
QVERIFY(!description->enabled());
231
enabledPlugins << pluginId3 + ":" + "dummyim3sv2";
232
enabledPluginsSettings.set(enabledPlugins);
233
QCOMPARE(spy.count(), 3);
235
description = findPluginDescriptions(subject->pluginDescriptions(Maliit::OnScreen), pluginName);
236
QVERIFY(description);
237
QVERIFY(description->enabled());
238
description = findPluginDescriptions(subject->pluginDescriptions(Maliit::OnScreen), pluginName3);
239
QVERIFY(description);
240
QVERIFY(description->enabled());
243
//at least we should not crash here
244
enabledPluginsSettings.set(QStringList());
247
Q_DECLARE_METATYPE(QList<int>)
249
void Ft_MIMPluginManager::testPluginSetting()
251
qRegisterMetaType<QList<int> >();
254
QSignalSpy spy(subject->d_ptr->sharedAttributeExtensionManager.data(),
255
SIGNAL(notifyExtensionAttributeChanged(QList<int>,int,QString,QString,QString,QVariant)));
256
QList<QVariant> arguments;
258
DummyImPlugin3 *plugin = 0;
259
DummyInputMethod3 *inputMethod = 0;
261
for (MIMPluginManagerPrivate::Plugins::iterator iterator(subject->d_ptr->plugins.begin());
262
iterator != subject->d_ptr->plugins.end();
264
if (pluginName3 == iterator.key()->name()) {
265
plugin = dynamic_cast<DummyImPlugin3 *>(iterator.key());
266
pluginId = iterator.value().pluginId;
270
QVERIFY(plugin != 0);
271
inputMethod = dynamic_cast<DummyInputMethod3 *>(subject->d_ptr->plugins[plugin].inputMethod);
272
QVERIFY(inputMethod != 0);
274
QCOMPARE(inputMethod->setting->value(), QVariant("Test"));
276
QString settingKey = PluginSettings + "/" + pluginId + "/setting";
279
// - that plugin settings are registered in a per-plugin namespace
280
// - that they are correctly registered in the shared attribute extension manager
281
// - that the data returned to clients reflects plugin settings
282
// - that changing setting value notifies both subscribed clients and the plugin
284
// setting registered in global setting list
285
bool setting_registered = false;
287
Q_FOREACH (const MImPluginSettingsInfo &info, subject->d_ptr->settings) {
288
if (info.plugin_name == pluginId) {
289
setting_registered = true;
291
QCOMPARE(info.plugin_description, QString("DummyImPlugin3"));
292
QCOMPARE(info.entries.count(), 1);
293
QCOMPARE(info.entries[0].description, QString("Example setting"));
294
QCOMPARE(info.entries[0].extension_key, settingKey);
295
QCOMPARE(info.entries[0].type, Maliit::StringType);
296
QCOMPARE(info.entries[0].attributes[Maliit::SettingEntryAttributes::defaultValue], QVariant("Test"));
301
QVERIFY(setting_registered);
303
// simulate client susbcription
304
subject->d_ptr->sharedAttributeExtensionManager->handleAttributeExtensionRegistered(12, MSharedAttributeExtensionManager::PluginSettings, settingKey);
306
MImSettings setting(settingKey);
308
// setting the value from the server
309
setting.set("Test1");
311
QCOMPARE(spy.count(), 1);
312
QCOMPARE(inputMethod->setting->value(), QVariant("Test1"));
313
QCOMPARE(inputMethod->localSettingValue, QVariant("Test1"));
316
QCOMPARE(arguments[2], QVariant("/maliit"));
317
QCOMPARE(arguments[3], QVariant("pluginsettings/" + pluginId));
318
QCOMPARE(arguments[4], QVariant("setting"));
319
QCOMPARE(arguments[5].value<QVariant>(), QVariant("Test1"));
321
// setting the value from the plugin
322
inputMethod->setting->set("Test2");
324
QCOMPARE(spy.count(), 2);
325
QCOMPARE(setting.value(), QVariant("Test2"));
326
QCOMPARE(inputMethod->localSettingValue, QVariant("Test2"));
329
QCOMPARE(arguments[2], QVariant("/maliit"));
330
QCOMPARE(arguments[3], QVariant("pluginsettings/" + pluginId));
331
QCOMPARE(arguments[4], QVariant("setting"));
332
QCOMPARE(arguments[5].value<QVariant>(), QVariant("Test2"));
335
QTEST_MAIN(Ft_MIMPluginManager)