@@ -33,11 +33,11 @@
3333// local
3434#include "filter.h"
3535#include "multirangefilter.h"
36−#include "combinedfilteroption.h"
3736#include "checkoptionfilter.h"
3837#include "radiooptionfilter.h"
3938#include "ratingsfilter.h"
4039#include "ratingfilteroption.h"
40+#include "genericoptionsmodel.h"
4141
4242void FiltersBindingsTest::initTestCase()
4343{
@@ -145,9 +145,16 @@ void FiltersBindingsTest::testMultiRangeFilter()
145145 auto options = multi_filter->options();
146146 QCOMPARE(options->rowCount(), 1);
147147
148− QVariant optvar = options->data(options->index(0));
149− CombinedFilterOption* opt1 = optvar.value<CombinedFilterOption*>();
150− QCOMPARE(opt1->id(), QString("opt0"));
148+ auto idx = options->index(0);
149+ QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
150+ QVariant name_var = options->data(idx, GenericOptionsModel::RoleName);
151+ QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
152+ QVariant active_var = options->data(idx, GenericOptionsModel::RoleActive);
153+
154+ QCOMPARE(id_var.toString(), QString("opt0"));
155+ QCOMPARE(name_var.toString(), QString("Option 0"));
156+ QCOMPARE(icon_var.toString(), QString(""));
157+ QCOMPARE(active_var.toBool(), false);
151158
152159 delete multi_filter;
153160 }
@@ -163,12 +170,21 @@ void FiltersBindingsTest::testMultiRangeFilter()
163170 auto options = multi_filter->options();
164171 QCOMPARE(options->rowCount(), 2);
165172
166− QVariant optvar = options->data(options->index(0));
167− CombinedFilterOption* opt1 = optvar.value<CombinedFilterOption*>();
168− QCOMPARE(opt1->id(), QString("opt0-opt1"));
173+ auto idx = options->index(0);
174+ QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
175+ QVariant name_var = options->data(idx, GenericOptionsModel::RoleName);
176+ QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
177+ QVariant active_var = options->data(idx, GenericOptionsModel::RoleActive);
178+
179+ QCOMPARE(id_var.toString(), QString("opt0"));
180+ QCOMPARE(name_var.toString(), QString("Option 0"));
181+ QCOMPARE(icon_var.toString(), QString(""));
182+ QCOMPARE(active_var.toBool(), false);
169183
170− optvar = options->data(options->index(1));
171− CombinedFilterOption* opt2 = optvar.value<CombinedFilterOption*>();
184+ AbstractFilterOption* opt1 = options->getRawOption(0);
185+ QCOMPARE(opt1->id(), QString("opt0"));
186+
187+ AbstractFilterOption* opt2 = options->getRawOption(1);
172188 QCOMPARE(opt2->id(), QString("opt1"));
173189
174190 delete multi_filter;
@@ -185,16 +201,13 @@ void FiltersBindingsTest::testMultiRangeFilter()
185201 auto options = multi_filter->options();
186202 QCOMPARE(options->rowCount(), 3);
187203
188− QVariant optvar = options->data(options->index(0));
189− CombinedFilterOption* opt0 = optvar.value<CombinedFilterOption*>();
190− QCOMPARE(opt0->id(), QString("opt0-opt1"));
204+ AbstractFilterOption* opt0 = options->getRawOption(0);
205+ QCOMPARE(opt0->id(), QString("opt0"));
191206
192− optvar = options->data(options->index(1));
193− CombinedFilterOption* opt1 = optvar.value<CombinedFilterOption*>();
194− QCOMPARE(opt1->id(), QString("opt1-opt2"));
207+ AbstractFilterOption* opt1 = options->getRawOption(1);
208+ QCOMPARE(opt1->id(), QString("opt1"));
195209
196− optvar = options->data(options->index(2));
197− CombinedFilterOption* opt2 = optvar.value<CombinedFilterOption*>();
210+ AbstractFilterOption* opt2 = options->getRawOption(2);
198211 QCOMPARE(opt2->id(), QString("opt2"));
199212
200213 // verify combined filter options are bound to correct underlying unity options
@@ -210,25 +223,21 @@ void FiltersBindingsTest::testMultiRangeFilter()
210223 // test active property changes
211224 QCOMPARE(opt0->active(), false);
212225
213− opt0->setActive(true); // activate 1st combined option
226+ opt0->setActive(true); // activate 1st option
214227 QCOMPARE(opt0spy.count(), 1);
215228 QCOMPARE(opt1spy.count(), 0);
216229 QCOMPARE(opt2spy.count(), 0);
217230 QCOMPARE(opt0->active(), true);
218231 QCOMPARE(opt1->active(), false);
219− QCOMPARE(core_multi_filter->options()[0]->active(), true);
220− QCOMPARE(core_multi_filter->options()[1]->active(), true);
221− QCOMPARE(core_multi_filter->options()[2]->active(), false);
232+ QCOMPARE(opt2->active(), false);
222233
223− opt1->setActive(true); // activate another combined option
234+ opt1->setActive(true);
224235 QCOMPARE(opt0spy.count(), 2);
225236 QCOMPARE(opt1spy.count(), 1);
226237 QCOMPARE(opt2spy.count(), 0);
227238 QCOMPARE(opt0->active(), false); //1st combined option gets deactivated
228239 QCOMPARE(opt1->active(), true);
229− QCOMPARE(core_multi_filter->options()[0]->active(), false);
230− QCOMPARE(core_multi_filter->options()[1]->active(), true); // shared option, stays active
231− QCOMPARE(core_multi_filter->options()[2]->active(), true);
240+ QCOMPARE(opt2->active(), false);
232241
233242 opt1->setActive(false); // and de-activate it
234243 QCOMPARE(opt0spy.count(), 2);
@@ -236,9 +245,7 @@ void FiltersBindingsTest::testMultiRangeFilter()
236245 QCOMPARE(opt2spy.count(), 0);
237246 QCOMPARE(opt0->active(), false);
238247 QCOMPARE(opt1->active(), false);
239− QCOMPARE(core_multi_filter->options()[0]->active(), false);
240− QCOMPARE(core_multi_filter->options()[1]->active(), false);
241− QCOMPARE(core_multi_filter->options()[2]->active(), false);
248+ QCOMPARE(opt2->active(), false);
242249
243250 opt2->setActive(true); // activate another combined option
244251 QCOMPARE(opt0spy.count(), 2);
@@ -247,9 +254,6 @@ void FiltersBindingsTest::testMultiRangeFilter()
247254 QCOMPARE(opt0->active(), false);
248255 QCOMPARE(opt1->active(), false);
249256 QCOMPARE(opt2->active(), true);
250− QCOMPARE(core_multi_filter->options()[0]->active(), false);
251− QCOMPARE(core_multi_filter->options()[1]->active(), false);
252− QCOMPARE(core_multi_filter->options()[2]->active(), true);
253257
254258 delete multi_filter;
255259 }
@@ -280,17 +284,31 @@ void FiltersBindingsTest::testCheckOptionFilter()
280284 QCOMPARE(check_filter->collapsed(), false);
281285 QCOMPARE(check_filter->filtering(), false);
282286
283− QVariant optvar = options->data(options->index(0));
284− FilterOption* opt0 = optvar.value<FilterOption*>();
285− QCOMPARE(opt0->id(), QString("opt0"));
287+ auto idx = options->index(0);
288+ QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
289+ QVariant name_var = options->data(idx, GenericOptionsModel::RoleName);
290+ QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
291+ QVariant active_var = options->data(idx, GenericOptionsModel::RoleActive);
286292
287− optvar = options->data(options->index(1));
288− FilterOption* opt1 = optvar.value<FilterOption*>();
289− QCOMPARE(opt1->id(), QString("opt1"));
293+ QCOMPARE(id_var.toString(), QString("opt0"));
294+ QCOMPARE(name_var.toString(), QString("Option 0"));
295+ QCOMPARE(icon_var.toString(), QString(""));
296+ QCOMPARE(active_var.toBool(), false);
290297
291− optvar = options->data(options->index(2));
292− FilterOption* opt2 = optvar.value<FilterOption*>();
293− QCOMPARE(opt2->id(), QString("opt2"));
298+ idx = options->index(1);
299+ id_var = options->data(idx, GenericOptionsModel::RoleId);
300+ name_var = options->data(idx, GenericOptionsModel::RoleName);
301+ icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
302+ active_var = options->data(idx, GenericOptionsModel::RoleActive);
303+
304+ QCOMPARE(id_var.toString(), QString("opt1"));
305+ QCOMPARE(name_var.toString(), QString("Option 1"));
306+ QCOMPARE(icon_var.toString(), QString(""));
307+ QCOMPARE(active_var.toBool(), false);
308+
309+ AbstractFilterOption* opt0 = options->getRawOption(0);
310+ AbstractFilterOption* opt1 = options->getRawOption(1);
311+ AbstractFilterOption* opt2 = options->getRawOption(2);
294312
295313 QSignalSpy opt0spy(opt0, SIGNAL(activeChanged(bool)));
296314 QSignalSpy opt1spy(opt1, SIGNAL(activeChanged(bool)));
@@ -338,17 +356,31 @@ void FiltersBindingsTest::testRadioOptionFilter()
338356 auto options = radio_filter->options();
339357 QCOMPARE(options->rowCount(), 3);
340358
341− QVariant optvar = options->data(options->index(0));
342− FilterOption* opt0 = optvar.value<FilterOption*>();
343− QCOMPARE(opt0->id(), QString("opt0"));
359+ auto idx = options->index(0);
360+ QVariant id_var = options->data(idx, GenericOptionsModel::RoleId);
361+ QVariant name_var = options->data(idx, GenericOptionsModel::RoleName);
362+ QVariant icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
363+ QVariant active_var = options->data(idx, GenericOptionsModel::RoleActive);
344364
345− optvar = options->data(options->index(1));
346− FilterOption* opt1 = optvar.value<FilterOption*>();
347− QCOMPARE(opt1->id(), QString("opt1"));
365+ QCOMPARE(id_var.toString(), QString("opt0"));
366+ QCOMPARE(name_var.toString(), QString("Option 0"));
367+ QCOMPARE(icon_var.toString(), QString(""));
368+ QCOMPARE(active_var.toBool(), false);
348369
349− optvar = options->data(options->index(2));
350− FilterOption* opt2 = optvar.value<FilterOption*>();
351− QCOMPARE(opt2->id(), QString("opt2"));
370+ idx = options->index(1);
371+ id_var = options->data(idx, GenericOptionsModel::RoleId);
372+ name_var = options->data(idx, GenericOptionsModel::RoleName);
373+ icon_var = options->data(idx, GenericOptionsModel::RoleIconHint);
374+ active_var = options->data(idx, GenericOptionsModel::RoleActive);
375+
376+ QCOMPARE(id_var.toString(), QString("opt1"));
377+ QCOMPARE(name_var.toString(), QString("Option 1"));
378+ QCOMPARE(icon_var.toString(), QString(""));
379+ QCOMPARE(active_var.toBool(), false);
380+
381+ AbstractFilterOption* opt0 = options->getRawOption(0);
382+ AbstractFilterOption* opt1 = options->getRawOption(1);
383+ AbstractFilterOption* opt2 = options->getRawOption(2);
352384
353385 QSignalSpy opt0spy(opt0, SIGNAL(activeChanged(bool)));
354386 QSignalSpy opt1spy(opt1, SIGNAL(activeChanged(bool)));
@@ -398,7 +430,7 @@ void FiltersBindingsTest::testRatingsFilter()
398430
399431 RatingFilterOption* opt[5];
400432 for (int i = 0; i<5; i++) {
401− opt[i] = options->data(options->index(i)).value<RatingFilterOption*>();
433+ opt[i] = dynamic_cast<RatingFilterOption *>(options->getRawOption(i));
402434 }
403435
404436 QSignalSpy opt0spy(opt[0], SIGNAL(activeChanged(bool)));
@@ -410,6 +442,8 @@ void FiltersBindingsTest::testRatingsFilter()
410442 QVERIFY(qAbs(opt[3]->value() - 0.8f) <= 0.0001f);
411443 QVERIFY(qAbs(opt[4]->value() - 1.0f) <= 0.0001f);
412444
445+ QVERIFY(rating_filter->rating() <= 0.0001f); // rating equals zero
446+
413447 // all options initially inactive
414448 for (int i=0; i<5; i++) {
415449 QCOMPARE(opt[i]->active(), false);
@@ -419,6 +453,7 @@ void FiltersBindingsTest::testRatingsFilter()
419453 for (int i=0; i<5; i++) {
420454 opt[i]->setActive(true);
421455 QCOMPARE(opt[i]->active(), true);
456+ QVERIFY(rating_filter->rating() - ((i+1)*0.2f) <= 0.0001f);
422457
423458 // verify that all other options are inactive
424459 for (int j=0; j<5; j++) {
@@ -432,6 +467,7 @@ void FiltersBindingsTest::testRatingsFilter()
432467 QCOMPARE(opt4spy.count(), 1);
433468
434469 opt[4]->setActive(false);
470+ QVERIFY(rating_filter->rating() <= 0.0001f); // rating equals zero
435471 QCOMPARE(opt4spy.count(), 2);
436472 }
437473}