@@ -65,17 +65,17 @@ DeeModel* FiltersBindingsTest::createFilterModel()
6565
6666void FiltersBindingsTest::createMultiRangeFilter(DeeModel *model, const std::string &id, const std::string &name, int optionCount)
6767{
68− createFilter(model, "filter-multirange", id, name, optionCount);
68+ createFilter(model, "filter-multirange", id, name, optionCount, true);
6969}
7070
7171void FiltersBindingsTest::createRadioOptionFilter(DeeModel *model, const std::string &id, const std::string &name, int optionCount)
7272{
73− createFilter(model, "filter-radiooption", id, name, optionCount);
73+ createFilter(model, "filter-radiooption", id, name, optionCount, true);
7474}
7575
7676void FiltersBindingsTest::createCheckOptionFilter(DeeModel *model, const std::string &id, const std::string &name, int optionCount)
7777{
78− createFilter(model, "filter-checkoption", id, name, optionCount);
78+ createFilter(model, "filter-checkoption", id, name, optionCount, true);
7979}
8080
8181void FiltersBindingsTest::createRatingsFilter(DeeModel *model, const std::string &id, const std::string &name)
@@ -90,7 +90,7 @@ void FiltersBindingsTest::createRatingsFilter(DeeModel *model, const std::string
9090 GVariant *children[2];
9191 GVariant *key1 = g_variant_new_string("show-all-button");
9292 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)));
9494 children[1] = g_variant_new_dict_entry(key2, g_variant_new_variant(g_variant_new_double(0.0f)));
9595 auto fhints = g_variant_new_array(G_VARIANT_TYPE("{sv}"), children, 2);
9696
@@ -102,7 +102,7 @@ void FiltersBindingsTest::createRatingsFilter(DeeModel *model, const std::string
102102 dee_model_append_row(model, row);
103103}
104104
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)
106106{
107107 GVariant* row[8];
108108
@@ -114,7 +114,7 @@ void FiltersBindingsTest::createFilter(DeeModel *model, const std::string &rende
114114 GVariant *children[2];
115115 GVariant *key1 = g_variant_new_string("show-all-button");
116116 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)));
118118 children[1] = g_variant_new_dict_entry(key2, g_variant_new_variant(createOptions(optionCount)));
119119 auto fhints = g_variant_new_array(G_VARIANT_TYPE("{sv}"), children, 2);
120120
@@ -143,9 +143,9 @@ void FiltersBindingsTest::testMultiRangeFilter()
143143 auto multi_filter = dynamic_cast<MultiRangeFilter*>(bind_filter);
144144 QVERIFY(multi_filter != nullptr);
145145 auto options = multi_filter->options();
146− QCOMPARE(options->rowCount(), 1);
146+ QCOMPARE(options->rowCount(), 2);
147147
148− auto idx = options->index(0);
148+ auto idx = options->index(1);
149149 QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
150150 QVariant name_var = options->data(idx, GenericOptionsModel::RoleName);
151151 QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
@@ -168,9 +168,9 @@ void FiltersBindingsTest::testMultiRangeFilter()
168168 auto multi_filter = dynamic_cast<MultiRangeFilter*>(bind_filter);
169169 QVERIFY(multi_filter != nullptr);
170170 auto options = multi_filter->options();
171− QCOMPARE(options->rowCount(), 2);
171+ QCOMPARE(options->rowCount(), 3);
172172
173− auto idx = options->index(0);
173+ auto idx = options->index(1);
174174 QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
175175 QVariant name_var = options->data(idx, GenericOptionsModel::RoleName);
176176 QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
@@ -181,10 +181,10 @@ void FiltersBindingsTest::testMultiRangeFilter()
181181 QCOMPARE(icon_var.toString(), QString(""));
182182 QCOMPARE(active_var.toBool(), false);
183183
184− AbstractFilterOption* opt1 = options->getRawOption(0);
184+ AbstractFilterOption* opt1 = options->getRawOption(1);
185185 QCOMPARE(opt1->id(), QString("opt0"));
186186
187− AbstractFilterOption* opt2 = options->getRawOption(1);
187+ AbstractFilterOption* opt2 = options->getRawOption(2);
188188 QCOMPARE(opt2->id(), QString("opt1"));
189189
190190 delete multi_filter;
@@ -199,18 +199,21 @@ void FiltersBindingsTest::testMultiRangeFilter()
199199 auto multi_filter = dynamic_cast<MultiRangeFilter*>(bind_filter);
200200 QVERIFY(multi_filter != nullptr);
201201 auto options = multi_filter->options();
202− QCOMPARE(options->rowCount(), 3);
202+ QCOMPARE(options->rowCount(), 4);
203+
204+ AbstractFilterOption* showAll = options->getRawOption(0);
205+ QVERIFY(showAll->id().startsWith("show_all::"));
203206
204− AbstractFilterOption* opt0 = options->getRawOption(0);
207+ AbstractFilterOption* opt0 = options->getRawOption(1);
205208 QCOMPARE(opt0->id(), QString("opt0"));
206209
207− AbstractFilterOption* opt1 = options->getRawOption(1);
210+ AbstractFilterOption* opt1 = options->getRawOption(2);
208211 QCOMPARE(opt1->id(), QString("opt1"));
209212
210− AbstractFilterOption* opt2 = options->getRawOption(2);
213+ AbstractFilterOption* opt2 = options->getRawOption(3);
211214 QCOMPARE(opt2->id(), QString("opt2"));
212215
213− // verify combined filter options are bound to correct underlying unity options
216+ // verify filter options are bound to correct underlying unity options
214217 auto core_multi_filter = std::dynamic_pointer_cast<unity::dash::MultiRangeFilter>(core_filter);
215218 QCOMPARE(QString::fromStdString(core_multi_filter->options()[0]->id()), QString("opt0"));
216219 QCOMPARE(QString::fromStdString(core_multi_filter->options()[1]->id()), QString("opt1"));
@@ -274,7 +277,7 @@ void FiltersBindingsTest::testCheckOptionFilter()
274277 auto check_filter = dynamic_cast<CheckOptionFilter*>(bind_filter);
275278 QVERIFY(check_filter != nullptr);
276279 auto options = check_filter->options();
277− QCOMPARE(options->rowCount(), 3);
280+ QCOMPARE(options->rowCount(), 4);
278281
279282 QCOMPARE(check_filter->id(), QString("f1"));
280283 QCOMPARE(check_filter->name(), QString("Filter1"));
@@ -284,7 +287,7 @@ void FiltersBindingsTest::testCheckOptionFilter()
284287 QCOMPARE(check_filter->collapsed(), false);
285288 QCOMPARE(check_filter->filtering(), false);
286289
287− auto idx = options->index(0);
290+ auto idx = options->index(1);
288291 QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
289292 QVariant name_var = options->data(idx, GenericOptionsModel::RoleName);
290293 QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
@@ -295,7 +298,7 @@ void FiltersBindingsTest::testCheckOptionFilter()
295298 QCOMPARE(icon_var.toString(), QString(""));
296299 QCOMPARE(active_var.toBool(), false);
297300
298− idx = options->index(1);
301+ idx = options->index(2);
299302 id_var = options->data(idx, GenericOptionsModel::RoleId);
300303 name_var = options->data(idx, GenericOptionsModel::RoleName);
301304 icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
@@ -306,38 +309,55 @@ void FiltersBindingsTest::testCheckOptionFilter()
306309 QCOMPARE(icon_var.toString(), QString(""));
307310 QCOMPARE(active_var.toBool(), false);
308311
309− AbstractFilterOption* opt0 = options->getRawOption(0);
310− AbstractFilterOption* opt1 = options->getRawOption(1);
311− AbstractFilterOption* opt2 = options->getRawOption(2);
312+ AbstractFilterOption* showAll = options->getRawOption(0);
313+ AbstractFilterOption* opt0 = options->getRawOption(1);
314+ AbstractFilterOption* opt1 = options->getRawOption(2);
315+ AbstractFilterOption* opt2 = options->getRawOption(3);
312316
317+ QSignalSpy showAllSpy(showAll, SIGNAL(activeChanged(bool)));
313318 QSignalSpy opt0spy(opt0, SIGNAL(activeChanged(bool)));
314319 QSignalSpy opt1spy(opt1, SIGNAL(activeChanged(bool)));
315320 QSignalSpy opt2spy(opt2, SIGNAL(activeChanged(bool)));
316321 QSignalSpy dataChangedSpy(options, SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&, const QVector<int>&)));
317322
318323 // test active property changes
324+ QCOMPARE(showAll->active(), false);
319325 QCOMPARE(opt0->active(), false);
320326 QCOMPARE(opt1->active(), false);
321327 QCOMPARE(opt2->active(), false);
322328
323329 opt0->setActive(true);
330+ QCOMPARE(showAllSpy.count(), 0);
324331 QCOMPARE(opt0spy.count(), 1);
325332 QCOMPARE(opt1spy.count(), 0);
326333 QCOMPARE(opt2spy.count(), 0);
334+ QCOMPARE(showAll->active(), false);
327335 QCOMPARE(opt0->active(), true);
328336 QCOMPARE(opt1->active(), false);
329337 QCOMPARE(opt2->active(), false);
330338
331339 opt1->setActive(true);
340+ QCOMPARE(showAllSpy.count(), 0);
332341 QCOMPARE(opt0spy.count(), 2);
333342 QCOMPARE(opt1spy.count(), 1);
334343 QCOMPARE(opt2spy.count(), 0);
344+ QCOMPARE(showAll->active(), false);
335345 QCOMPARE(opt0->active(), false);
336346 QCOMPARE(opt1->active(), true);
337347 QCOMPARE(opt2->active(), false);
338348
339349 QCOMPARE(dataChangedSpy.count(), 3);
340350
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);
360+
341361 delete check_filter;
342362 }
343363}
@@ -357,7 +377,7 @@ void FiltersBindingsTest::testRadioOptionFilter()
357377 auto radio_filter = dynamic_cast<RadioOptionFilter*>(bind_filter);
358378 QVERIFY(radio_filter != nullptr);
359379 auto options = radio_filter->options();
360− QCOMPARE(options->rowCount(), 3);
380+ QCOMPARE(options->rowCount(), 4);
361381
362382 auto idx = options->index(0);
363383 QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
@@ -365,12 +385,23 @@ void FiltersBindingsTest::testRadioOptionFilter()
365385 QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
366386 QVariant active_var = options->data(idx, GenericOptionsModel::RoleActive);
367387
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);
392+
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);
398+
368399 QCOMPARE(id_var.toString(), QString("opt0"));
369400 QCOMPARE(name_var.toString(), QString("Option 0"));
370401 QCOMPARE(icon_var.toString(), QString(""));
371402 QCOMPARE(active_var.toBool(), false);
372403
373− idx = options->index(1);
404+ idx = options->index(2);
374405 id_var = options->data(idx, GenericOptionsModel::RoleId);
375406 name_var = options->data(idx, GenericOptionsModel::RoleName);
376407 icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
@@ -381,9 +412,9 @@ void FiltersBindingsTest::testRadioOptionFilter()
381412 QCOMPARE(icon_var.toString(), QString(""));
382413 QCOMPARE(active_var.toBool(), false);
383414
384− AbstractFilterOption* opt0 = options->getRawOption(0);
385− AbstractFilterOption* opt1 = options->getRawOption(1);
386− AbstractFilterOption* opt2 = options->getRawOption(2);
415+ AbstractFilterOption* opt0 = options->getRawOption(1);
416+ AbstractFilterOption* opt1 = options->getRawOption(2);
417+ AbstractFilterOption* opt2 = options->getRawOption(3);
387418
388419 QSignalSpy opt0spy(opt0, SIGNAL(activeChanged(bool)));
389420 QSignalSpy opt1spy(opt1, SIGNAL(activeChanged(bool)));
@@ -432,11 +463,11 @@ void FiltersBindingsTest::testRatingsFilter()
432463 auto rating_filter = dynamic_cast<RatingsFilter*>(bind_filter);
433464 QVERIFY(rating_filter != nullptr);
434465 auto options = rating_filter->options();
435− QCOMPARE(options->rowCount(), 5);
466+ QCOMPARE(options->rowCount(), 6);
436467
437468 RatingFilterOption* opt[5];
438469 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));
440471 }
441472
442473 QSignalSpy opt0spy(opt[0], SIGNAL(activeChanged(bool)));