@@ -8,6 +8,9 @@ class LocalStoreTest : public QObject
88{
99 Q_OBJECT
1010
11+ Q_SIGNALS:
12+ void unlock ();
13+
1114private Q_SLOTS:
1215 void initTestCase ();
1316 void cleanupTestCase ();
@@ -26,6 +29,8 @@ private Q_SLOTS:
2629 void testRemove ();
2730 void testSearch_data ();
2831 void testSearch ();
32+ void testIterate_data ();
33+ void testIterate ();
2934
3035 void testLoadInto_data ();
3136 void testLoadInto ();
@@ -350,6 +355,69 @@ void LocalStoreTest::testSearch()
350355 }
351356}
352357
358+ void LocalStoreTest::testIterate_data ()
359+ {
360+ QTest::addColumn<DataSet>(" data" );
361+ QTest::addColumn<QList<TestData>>(" result" );
362+ QTest::addColumn<bool >(" shouldFail" );
363+
364+ QTest::newRow (" emptyData" ) << DataSet ()
365+ << QList<TestData>()
366+ << false ;
367+ QTest::newRow (" simpleData" ) << generateDataJson (5 , 55 )
368+ << generateData (5 , 55 )
369+ << false ;
370+ QTest::newRow (" invalidData" ) << generateDataJson (10 , 20 )
371+ << QList<TestData>()
372+ << true ;
373+ }
374+
375+ void LocalStoreTest::testIterate ()
376+ {
377+ QFETCH (DataSet, data);
378+ QFETCH (QList<TestData>, result);
379+ QFETCH (bool , shouldFail);
380+
381+ store->mutex .lock ();
382+ store->pseudoStore = data;
383+ store->failCount = shouldFail ? 1 : 0 ;
384+ store->mutex .unlock ();
385+
386+ QSignalSpy spy (this , &LocalStoreTest::unlock);
387+
388+ async->iterate <TestData>([=, &result](TestData data){
389+ auto ok = false ;
390+
391+ [&](){
392+ QVERIFY (!shouldFail);
393+ QVERIFY (!result.isEmpty ());
394+ for (auto i = 0 ; i < result.size (); i++) {
395+ if (data.id == result[i].id ) {
396+ QCOMPARE (data, result[i]);
397+ result.takeAt (i);
398+ ok = true ;
399+ break ;
400+ }
401+ }
402+ }();
403+
404+ if (!ok || result.isEmpty ())
405+ emit unlock ();
406+
407+ return ok;
408+ }, [=](const QException &e){
409+ QVERIFY2 (shouldFail, e.what ());
410+ emit unlock ();
411+ });
412+
413+ if (data.isEmpty ())
414+ QVERIFY (!spy.wait ());
415+ else {
416+ QVERIFY (spy.wait ());
417+ QVERIFY (result.isEmpty ());
418+ }
419+ }
420+
353421void LocalStoreTest::testLoadInto_data ()
354422{
355423 QTest::addColumn<DataSet>(" data" );
0 commit comments