@@ -65,17 +65,17 @@ DeeModel* FiltersBindingsTest::createFilterModel()
66void FiltersBindingsTest::createMultiRangeFilter(DeeModel *model, const std::string &id, const std::string &name, int optionCount)
66void FiltersBindingsTest::createMultiRangeFilter(DeeModel *model, const std::string &id, const std::string &name, int optionCount)
68− createFilter(model, "filter-multirange", id, name, optionCount);
68+ createFilter(model, "filter-multirange", id, name, optionCount, true);
71void FiltersBindingsTest::createRadioOptionFilter(DeeModel *model, const std::string &id, const std::string &name, int optionCount)
71void FiltersBindingsTest::createRadioOptionFilter(DeeModel *model, const std::string &id, const std::string &name, int optionCount)
73− createFilter(model, "filter-radiooption", id, name, optionCount);
73+ createFilter(model, "filter-radiooption", id, name, optionCount, true);
76void FiltersBindingsTest::createCheckOptionFilter(DeeModel *model, const std::string &id, const std::string &name, int optionCount)
76void FiltersBindingsTest::createCheckOptionFilter(DeeModel *model, const std::string &id, const std::string &name, int optionCount)
78− createFilter(model, "filter-checkoption", id, name, optionCount);
78+ createFilter(model, "filter-checkoption", id, name, optionCount, true);
81void FiltersBindingsTest::createRatingsFilter(DeeModel *model, const std::string &id, const std::string &name)
81void FiltersBindingsTest::createRatingsFilter(DeeModel *model, const std::string &id, const std::string &name)
@@ -90,7 +90,7 @@ void FiltersBindingsTest::createRatingsFilter(DeeModel *model, const std::string
90 GVariant *children[2];
90 GVariant *children[2];
91 GVariant *key1 = g_variant_new_string("show-all-button");
91 GVariant *key1 = g_variant_new_string("show-all-button");
92 GVariant *key2 = g_variant_new_string("rating");
92 GVariant *key2 = g_variant_new_string("rating");
93− children[0] = g_variant_new_dict_entry(key1, g_variant_new_variant(g_variant_new_boolean(false)));
93+ children[0] = g_variant_new_dict_entry(key1, g_variant_new_variant(g_variant_new_boolean(true)));
94 children[1] = g_variant_new_dict_entry(key2, g_variant_new_variant(g_variant_new_double(0.0f)));
94 children[1] = g_variant_new_dict_entry(key2, g_variant_new_variant(g_variant_new_double(0.0f)));
95 auto fhints = g_variant_new_array(G_VARIANT_TYPE("{sv}"), children, 2);
95 auto fhints = g_variant_new_array(G_VARIANT_TYPE("{sv}"), children, 2);
@@ -102,7 +102,7 @@ void FiltersBindingsTest::createRatingsFilter(DeeModel *model, const std::string
102 dee_model_append_row(model, row);
102 dee_model_append_row(model, row);
105−void FiltersBindingsTest::createFilter(DeeModel *model, const std::string &renderer, const std::string &id, const std::string &name, int optionCount)
105+void FiltersBindingsTest::createFilter(DeeModel *model, const std::string &renderer, const std::string &id, const std::string &name, int optionCount, bool showAll)
107 GVariant* row[8];
107 GVariant* row[8];
@@ -114,7 +114,7 @@ void FiltersBindingsTest::createFilter(DeeModel *model, const std::string &rende
114 GVariant *children[2];
114 GVariant *children[2];
115 GVariant *key1 = g_variant_new_string("show-all-button");
115 GVariant *key1 = g_variant_new_string("show-all-button");
116 GVariant *key2 = g_variant_new_string("options");
116 GVariant *key2 = g_variant_new_string("options");
117− children[0] = g_variant_new_dict_entry(key1, g_variant_new_variant(g_variant_new_boolean(false)));
117+ children[0] = g_variant_new_dict_entry(key1, g_variant_new_variant(g_variant_new_boolean(showAll)));
118 children[1] = g_variant_new_dict_entry(key2, g_variant_new_variant(createOptions(optionCount)));
118 children[1] = g_variant_new_dict_entry(key2, g_variant_new_variant(createOptions(optionCount)));
119 auto fhints = g_variant_new_array(G_VARIANT_TYPE("{sv}"), children, 2);
119 auto fhints = g_variant_new_array(G_VARIANT_TYPE("{sv}"), children, 2);
@@ -143,9 +143,9 @@ void FiltersBindingsTest::testMultiRangeFilter()
143 auto multi_filter = dynamic_cast<MultiRangeFilter*>(bind_filter);
143 auto multi_filter = dynamic_cast<MultiRangeFilter*>(bind_filter);
144 QVERIFY(multi_filter != nullptr);
144 QVERIFY(multi_filter != nullptr);
145 auto options = multi_filter->options();
145 auto options = multi_filter->options();
146− QCOMPARE(options->rowCount(), 1);
146+ QCOMPARE(options->rowCount(), 2);
148− auto idx = options->index(0);
148+ auto idx = options->index(1);
149 QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
149 QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
150 QVariant name_var = options->data(idx, GenericOptionsModel::RoleName);
150 QVariant name_var = options->data(idx, GenericOptionsModel::RoleName);
151 QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
151 QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
@@ -168,9 +168,9 @@ void FiltersBindingsTest::testMultiRangeFilter()
168 auto multi_filter = dynamic_cast<MultiRangeFilter*>(bind_filter);
168 auto multi_filter = dynamic_cast<MultiRangeFilter*>(bind_filter);
169 QVERIFY(multi_filter != nullptr);
169 QVERIFY(multi_filter != nullptr);
170 auto options = multi_filter->options();
170 auto options = multi_filter->options();
171− QCOMPARE(options->rowCount(), 2);
171+ QCOMPARE(options->rowCount(), 3);
173− auto idx = options->index(0);
173+ auto idx = options->index(1);
174 QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
174 QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
175 QVariant name_var = options->data(idx, GenericOptionsModel::RoleName);
175 QVariant name_var = options->data(idx, GenericOptionsModel::RoleName);
176 QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
176 QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
@@ -181,10 +181,10 @@ void FiltersBindingsTest::testMultiRangeFilter()
181 QCOMPARE(icon_var.toString(), QString(""));
181 QCOMPARE(icon_var.toString(), QString(""));
182 QCOMPARE(active_var.toBool(), false);
182 QCOMPARE(active_var.toBool(), false);
184− AbstractFilterOption* opt1 = options->getRawOption(0);
184+ AbstractFilterOption* opt1 = options->getRawOption(1);
185 QCOMPARE(opt1->id(), QString("opt0"));
185 QCOMPARE(opt1->id(), QString("opt0"));
187− AbstractFilterOption* opt2 = options->getRawOption(1);
187+ AbstractFilterOption* opt2 = options->getRawOption(2);
188 QCOMPARE(opt2->id(), QString("opt1"));
188 QCOMPARE(opt2->id(), QString("opt1"));
190 delete multi_filter;
190 delete multi_filter;
@@ -199,18 +199,21 @@ void FiltersBindingsTest::testMultiRangeFilter()
199 auto multi_filter = dynamic_cast<MultiRangeFilter*>(bind_filter);
199 auto multi_filter = dynamic_cast<MultiRangeFilter*>(bind_filter);
200 QVERIFY(multi_filter != nullptr);
200 QVERIFY(multi_filter != nullptr);
201 auto options = multi_filter->options();
201 auto options = multi_filter->options();
202− QCOMPARE(options->rowCount(), 3);
202+ QCOMPARE(options->rowCount(), 4);
204+ AbstractFilterOption* showAll = options->getRawOption(0);
205+ QVERIFY(showAll->id().startsWith("show_all::"));
204− AbstractFilterOption* opt0 = options->getRawOption(0);
207+ AbstractFilterOption* opt0 = options->getRawOption(1);
205 QCOMPARE(opt0->id(), QString("opt0"));
208 QCOMPARE(opt0->id(), QString("opt0"));
207− AbstractFilterOption* opt1 = options->getRawOption(1);
210+ AbstractFilterOption* opt1 = options->getRawOption(2);
208 QCOMPARE(opt1->id(), QString("opt1"));
211 QCOMPARE(opt1->id(), QString("opt1"));
210− AbstractFilterOption* opt2 = options->getRawOption(2);
213+ AbstractFilterOption* opt2 = options->getRawOption(3);
211 QCOMPARE(opt2->id(), QString("opt2"));
214 QCOMPARE(opt2->id(), QString("opt2"));
213− // verify combined filter options are bound to correct underlying unity options
216+ // verify filter options are bound to correct underlying unity options
214 auto core_multi_filter = std::dynamic_pointer_cast<unity::dash::MultiRangeFilter>(core_filter);
217 auto core_multi_filter = std::dynamic_pointer_cast<unity::dash::MultiRangeFilter>(core_filter);
215 QCOMPARE(QString::fromStdString(core_multi_filter->options()[0]->id()), QString("opt0"));
218 QCOMPARE(QString::fromStdString(core_multi_filter->options()[0]->id()), QString("opt0"));
216 QCOMPARE(QString::fromStdString(core_multi_filter->options()[1]->id()), QString("opt1"));
219 QCOMPARE(QString::fromStdString(core_multi_filter->options()[1]->id()), QString("opt1"));
@@ -274,7 +277,7 @@ void FiltersBindingsTest::testCheckOptionFilter()
274 auto check_filter = dynamic_cast<CheckOptionFilter*>(bind_filter);
277 auto check_filter = dynamic_cast<CheckOptionFilter*>(bind_filter);
275 QVERIFY(check_filter != nullptr);
278 QVERIFY(check_filter != nullptr);
276 auto options = check_filter->options();
279 auto options = check_filter->options();
277− QCOMPARE(options->rowCount(), 3);
280+ QCOMPARE(options->rowCount(), 4);
279 QCOMPARE(check_filter->id(), QString("f1"));
282 QCOMPARE(check_filter->id(), QString("f1"));
280 QCOMPARE(check_filter->name(), QString("Filter1"));
283 QCOMPARE(check_filter->name(), QString("Filter1"));
@@ -284,7 +287,7 @@ void FiltersBindingsTest::testCheckOptionFilter()
284 QCOMPARE(check_filter->collapsed(), false);
287 QCOMPARE(check_filter->collapsed(), false);
285 QCOMPARE(check_filter->filtering(), false);
288 QCOMPARE(check_filter->filtering(), false);
287− auto idx = options->index(0);
290+ auto idx = options->index(1);
288 QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
291 QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
289 QVariant name_var = options->data(idx, GenericOptionsModel::RoleName);
292 QVariant name_var = options->data(idx, GenericOptionsModel::RoleName);
290 QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
293 QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
@@ -295,7 +298,7 @@ void FiltersBindingsTest::testCheckOptionFilter()
295 QCOMPARE(icon_var.toString(), QString(""));
298 QCOMPARE(icon_var.toString(), QString(""));
296 QCOMPARE(active_var.toBool(), false);
299 QCOMPARE(active_var.toBool(), false);
298− idx = options->index(1);
301+ idx = options->index(2);
299 id_var = options->data(idx, GenericOptionsModel::RoleId);
302 id_var = options->data(idx, GenericOptionsModel::RoleId);
300 name_var = options->data(idx, GenericOptionsModel::RoleName);
303 name_var = options->data(idx, GenericOptionsModel::RoleName);
301 icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
304 icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
@@ -306,38 +309,55 @@ void FiltersBindingsTest::testCheckOptionFilter()
306 QCOMPARE(icon_var.toString(), QString(""));
309 QCOMPARE(icon_var.toString(), QString(""));
307 QCOMPARE(active_var.toBool(), false);
310 QCOMPARE(active_var.toBool(), false);
312+ AbstractFilterOption* showAll = options->getRawOption(0);
309− AbstractFilterOption* opt0 = options->getRawOption(0);
313+ AbstractFilterOption* opt0 = options->getRawOption(1);
310− AbstractFilterOption* opt1 = options->getRawOption(1);
314+ AbstractFilterOption* opt1 = options->getRawOption(2);
311− AbstractFilterOption* opt2 = options->getRawOption(2);
315+ AbstractFilterOption* opt2 = options->getRawOption(3);
317+ QSignalSpy showAllSpy(showAll, SIGNAL(activeChanged(bool)));
313 QSignalSpy opt0spy(opt0, SIGNAL(activeChanged(bool)));
318 QSignalSpy opt0spy(opt0, SIGNAL(activeChanged(bool)));
314 QSignalSpy opt1spy(opt1, SIGNAL(activeChanged(bool)));
319 QSignalSpy opt1spy(opt1, SIGNAL(activeChanged(bool)));
315 QSignalSpy opt2spy(opt2, SIGNAL(activeChanged(bool)));
320 QSignalSpy opt2spy(opt2, SIGNAL(activeChanged(bool)));
316 QSignalSpy dataChangedSpy(options, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)));
321 QSignalSpy dataChangedSpy(options, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)));
318 // test active property changes
323 // test active property changes
324+ QCOMPARE(showAll->active(), false);
319 QCOMPARE(opt0->active(), false);
325 QCOMPARE(opt0->active(), false);
320 QCOMPARE(opt1->active(), false);
326 QCOMPARE(opt1->active(), false);
321 QCOMPARE(opt2->active(), false);
327 QCOMPARE(opt2->active(), false);
323 opt0->setActive(true);
329 opt0->setActive(true);
330+ QCOMPARE(showAllSpy.count(), 0);
324 QCOMPARE(opt0spy.count(), 1);
331 QCOMPARE(opt0spy.count(), 1);
325 QCOMPARE(opt1spy.count(), 0);
332 QCOMPARE(opt1spy.count(), 0);
326 QCOMPARE(opt2spy.count(), 0);
333 QCOMPARE(opt2spy.count(), 0);
334+ QCOMPARE(showAll->active(), false);
327 QCOMPARE(opt0->active(), true);
335 QCOMPARE(opt0->active(), true);
328 QCOMPARE(opt1->active(), false);
336 QCOMPARE(opt1->active(), false);
329 QCOMPARE(opt2->active(), false);
337 QCOMPARE(opt2->active(), false);
331 opt1->setActive(true);
339 opt1->setActive(true);
340+ QCOMPARE(showAllSpy.count(), 0);
332 QCOMPARE(opt0spy.count(), 2);
341 QCOMPARE(opt0spy.count(), 2);
333 QCOMPARE(opt1spy.count(), 1);
342 QCOMPARE(opt1spy.count(), 1);
334 QCOMPARE(opt2spy.count(), 0);
343 QCOMPARE(opt2spy.count(), 0);
344+ QCOMPARE(showAll->active(), false);
335 QCOMPARE(opt0->active(), false);
345 QCOMPARE(opt0->active(), false);
336 QCOMPARE(opt1->active(), true);
346 QCOMPARE(opt1->active(), true);
337 QCOMPARE(opt2->active(), false);
347 QCOMPARE(opt2->active(), false);
339 QCOMPARE(dataChangedSpy.count(), 3);
349 QCOMPARE(dataChangedSpy.count(), 3);
351+ showAll->setActive(true);
352+ QCOMPARE(showAllSpy.count(), 1);
353+ QCOMPARE(opt0spy.count(), 2);
354+ QCOMPARE(opt1spy.count(), 2);
355+ QCOMPARE(opt2spy.count(), 0);
356+ QCOMPARE(showAll->active(), true);
357+ QCOMPARE(opt0->active(), false);
358+ QCOMPARE(opt1->active(), false);
359+ QCOMPARE(opt2->active(), false);
341 delete check_filter;
361 delete check_filter;
@@ -357,7 +377,7 @@ void FiltersBindingsTest::testRadioOptionFilter()
357 auto radio_filter = dynamic_cast<RadioOptionFilter*>(bind_filter);
377 auto radio_filter = dynamic_cast<RadioOptionFilter*>(bind_filter);
358 QVERIFY(radio_filter != nullptr);
378 QVERIFY(radio_filter != nullptr);
359 auto options = radio_filter->options();
379 auto options = radio_filter->options();
360− QCOMPARE(options->rowCount(), 3);
380+ QCOMPARE(options->rowCount(), 4);
362 auto idx = options->index(0);
382 auto idx = options->index(0);
363 QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
383 QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
@@ -365,12 +385,23 @@ void FiltersBindingsTest::testRadioOptionFilter()
365 QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
385 QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
366 QVariant active_var = options->data(idx, GenericOptionsModel::RoleActive);
386 QVariant active_var = options->data(idx, GenericOptionsModel::RoleActive);
388+ QVERIFY(id_var.toString().startsWith("show_all::"));
389+ QVERIFY(name_var.toString().size() > 0);
390+ QCOMPARE(icon_var.toString(), QString(""));
391+ QCOMPARE(active_var.toBool(), false);
393+ idx = options->index(1);
394+ id_var = options->data(idx, GenericOptionsModel::RoleId);
395+ name_var = options->data(idx, GenericOptionsModel::RoleName);
396+ icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
397+ active_var = options->data(idx, GenericOptionsModel::RoleActive);
368 QCOMPARE(id_var.toString(), QString("opt0"));
399 QCOMPARE(id_var.toString(), QString("opt0"));
369 QCOMPARE(name_var.toString(), QString("Option 0"));
400 QCOMPARE(name_var.toString(), QString("Option 0"));
370 QCOMPARE(icon_var.toString(), QString(""));
401 QCOMPARE(icon_var.toString(), QString(""));
371 QCOMPARE(active_var.toBool(), false);
402 QCOMPARE(active_var.toBool(), false);
373− idx = options->index(1);
404+ idx = options->index(2);
374 id_var = options->data(idx, GenericOptionsModel::RoleId);
405 id_var = options->data(idx, GenericOptionsModel::RoleId);
375 name_var = options->data(idx, GenericOptionsModel::RoleName);
406 name_var = options->data(idx, GenericOptionsModel::RoleName);
376 icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
407 icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
@@ -381,9 +412,9 @@ void FiltersBindingsTest::testRadioOptionFilter()
381 QCOMPARE(icon_var.toString(), QString(""));
412 QCOMPARE(icon_var.toString(), QString(""));
382 QCOMPARE(active_var.toBool(), false);
413 QCOMPARE(active_var.toBool(), false);
384− AbstractFilterOption* opt0 = options->getRawOption(0);
415+ AbstractFilterOption* opt0 = options->getRawOption(1);
385− AbstractFilterOption* opt1 = options->getRawOption(1);
416+ AbstractFilterOption* opt1 = options->getRawOption(2);
386− AbstractFilterOption* opt2 = options->getRawOption(2);
417+ AbstractFilterOption* opt2 = options->getRawOption(3);
388 QSignalSpy opt0spy(opt0, SIGNAL(activeChanged(bool)));
419 QSignalSpy opt0spy(opt0, SIGNAL(activeChanged(bool)));
389 QSignalSpy opt1spy(opt1, SIGNAL(activeChanged(bool)));
420 QSignalSpy opt1spy(opt1, SIGNAL(activeChanged(bool)));
@@ -432,11 +463,11 @@ void FiltersBindingsTest::testRatingsFilter()
432 auto rating_filter = dynamic_cast<RatingsFilter*>(bind_filter);
463 auto rating_filter = dynamic_cast<RatingsFilter*>(bind_filter);
433 QVERIFY(rating_filter != nullptr);
464 QVERIFY(rating_filter != nullptr);
434 auto options = rating_filter->options();
465 auto options = rating_filter->options();
435− QCOMPARE(options->rowCount(), 5);
466+ QCOMPARE(options->rowCount(), 6);
437 RatingFilterOption* opt[5];
468 RatingFilterOption* opt[5];
438 for (int i = 0; i<5; i++) {
469 for (int i = 0; i<5; i++) {
439− opt[i] = dynamic_cast<RatingFilterOption *>(options->getRawOption(i));
470+ opt[i] = dynamic_cast<RatingFilterOption *>(options->getRawOption(i+1));
442 QSignalSpy opt0spy(opt[0], SIGNAL(activeChanged(bool)));
473 QSignalSpy opt0spy(opt[0], SIGNAL(activeChanged(bool)));