Skip to content
This repository was archived by the owner on Mar 4, 2023. It is now read-only.

Commit 739b25d

Browse files
committed
added iterator tests
1 parent 68b29ec commit 739b25d

File tree

2 files changed

+71
-3
lines changed

2 files changed

+71
-3
lines changed

src/datasync/asyncdatastore.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@ Task AsyncDataStore::search(int dataMetaTypeId, int listMetaTypeId, const QStrin
7171

7272
void AsyncDataStore::iterate(int metaTypeId, const std::function<bool(QVariant)> &iterator, const std::function<void(const QException &)> &onExcept)
7373
{
74-
keys(metaTypeId).onResult([=](QStringList keys) {
74+
keys(metaTypeId).onResult(this, [=](QStringList keys) {
7575
if(!keys.isEmpty()) {
76-
load(metaTypeId, keys[0]).onResult([=](QVariant result) {
76+
load(metaTypeId, keys[0]).onResult(this, [=](QVariant result) {
7777
internalIterate(metaTypeId, keys, 0, result, iterator, onExcept);
7878
}, onExcept);
7979
}
@@ -176,7 +176,7 @@ void AsyncDataStore::internalIterate(int metaTypeId, const QStringList &keys, in
176176
{
177177
if(iterator(res)) {
178178
if(++index < keys.size()) {
179-
load(metaTypeId, keys[index]).onResult([=](QVariant result) {
179+
load(metaTypeId, keys[index]).onResult(this, [=](QVariant result) {
180180
internalIterate(metaTypeId, keys, index, result, iterator, onExcept);
181181
}, onExcept);
182182
}

tests/auto/datasync/LocalStoreTest/tst_localstore.cpp

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ class LocalStoreTest : public QObject
88
{
99
Q_OBJECT
1010

11+
Q_SIGNALS:
12+
void unlock();
13+
1114
private 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+
353421
void LocalStoreTest::testLoadInto_data()
354422
{
355423
QTest::addColumn<DataSet>("data");

0 commit comments

Comments
 (0)