@@ -62,7 +62,14 @@ public:
6262 return QString();
6363 }
6464 unity::shell::application::ApplicationInfoInterface *get(int index) const { return m_list.at(index); }
65− unity::shell::application::ApplicationInfoInterface *findApplication(const QString &) const { return nullptr; }
65+ unity::shell::application::ApplicationInfoInterface *findApplication(const QString &appId) const {
66+ Q_FOREACH(MockApp* app, m_list) {
67+ if (app->appId() == appId) {
68+ return app;
69+ }
70+ }
71+ return nullptr;
72+ }
6673 unity::shell::application::ApplicationInfoInterface *startApplication(const QString &, const QStringList &) { return nullptr; }
6774 bool stopApplication(const QString &) { return false; }
6875 bool focusApplication(const QString &appId) {
@@ -151,9 +158,59 @@ private Q_SLOTS:
151158 QCOMPARE(launcherModel->get(1)->pinned(), false);
152159 }
153160
161+ void testRemove_data() {
162+
163+ QTest::addColumn<bool>("pinned");
164+ QTest::addColumn<bool>("running");
165+
166+ // Needs to kepp the item as long as running and needs to remove it when app is closed
167+ QTest::newRow("non-pinned, running") << false << true;
168+
169+ // Needs to kepp the item as long as running and needs to remove it when app is closed
170+ QTest::newRow("pinned, running") << true << false;
171+
172+ // Needs to kepp the item as long as running and needs to remove it when app is closed
173+ QTest::newRow("pinned, non-running") << true << false;
174+ }
175+
154176 void testRemove() {
177+ QFETCH(bool, pinned);
178+ QFETCH(bool, running);
179+
180+ // In the beginning we always have to items
155181 QCOMPARE(launcherModel->rowCount(QModelIndex()), 2);
156− launcherModel->requestRemove(launcherModel->get(0)->appId());
182+
183+ // pin one if required
184+ if (pinned) {
185+ launcherModel->pin(launcherModel->get(1)->appId());
186+ }
187+
188+ // stop it if required
189+ if (!running) {
190+ appManager->removeApplication(1);
191+ }
192+
193+ // Now remove one
194+ launcherModel->requestRemove(launcherModel->get(1)->appId());
195+
196+ if (running) {
197+ // bot apps are running, both apps must still be here
198+ QCOMPARE(launcherModel->rowCount(QModelIndex()), 2);
199+
200+ // Item must be unpinned now
201+ QCOMPARE(launcherModel->get(1)->pinned(), false);
202+
203+ } else if (pinned) {
204+ // Item 1 must go away, item 0 is here to stay
205+ QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
206+ }
207+
208+ // done our checks. now stop the app if was still running
209+ if (running) {
210+ appManager->removeApplication(1);
211+ }
212+
213+ // It needs to go away in any case now
157214 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
158215 }
159216
@@ -181,6 +238,13 @@ private Q_SLOTS:
181238
182239 // quicklist needs to transform to remove item. trigger it and check it item goes away
183240 launcherModel->quickListActionInvoked(launcherModel->get(0)->appId(), pinActionIndex);
241+ QCOMPARE(launcherModel->get(0)->pinned(), false);
242+
243+ // still needs to be here as the app is still here
244+ QCOMPARE(launcherModel->rowCount(QModelIndex()), 2);
245+ // close the app
246+ appManager->removeApplication(0);
247+ // Now it needs to go away
184248 QCOMPARE(launcherModel->rowCount(QModelIndex()), 1);
185249 }
186250