Skip to content

Commit ae389be

Browse files
committed
add test for locator model with groups
1 parent 1fe0fb7 commit ae389be

File tree

1 file changed

+97
-33
lines changed

1 file changed

+97
-33
lines changed

tests/src/python/test_qgslocator.py

Lines changed: 97 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
QgsLocatorContext,
2121
QgsLocatorResult,
2222
QgsLocatorModel,
23+
QgsLocatorProxyModel,
2324
QgsLocatorAutomaticModel,
2425
QgsSettings)
2526
from qgis.PyQt.QtCore import QVariant, pyqtSignal, QCoreApplication
@@ -31,35 +32,52 @@
3132

3233
class test_filter(QgsLocatorFilter):
3334

34-
def __init__(self, identifier, prefix=None, parent=None):
35+
def __init__(self, identifier, prefix=None, groupResult=False, parent=None):
3536
super().__init__(parent)
3637
self.identifier = identifier
3738
self._prefix = prefix
39+
self.groupResult = groupResult
3840

3941
def clone(self):
40-
return test_filter(self.identifier)
42+
return test_filter(self.identifier, self.prefix, self.groupResult)
4143

4244
def name(self):
4345
return 'test_' + self.identifier
4446

4547
def displayName(self):
46-
return 'test'
48+
return 'test_' + self.identifier
4749

4850
def prefix(self):
4951
return self._prefix
5052

5153
def fetchResults(self, string, context, feedback):
52-
for i in range(3):
54+
n = 3 if not self.groupResult else 9
55+
for i in range(n):
5356
if feedback.isCanceled():
5457
return
5558
sleep(0.001)
5659
result = QgsLocatorResult()
5760
result.displayString = self.identifier + str(i)
61+
if self.groupResult:
62+
if i < 6:
63+
result.group = 'first group'
64+
elif i < 8:
65+
result.group = 'second group'
5866
self.resultFetched.emit(result)
5967

6068
def triggerResult(self, result):
6169
pass
6270

71+
def priority(self):
72+
if self.identifier == 'a':
73+
return QgsLocatorFilter.High
74+
elif self.identifier == 'b':
75+
return QgsLocatorFilter.Medium
76+
elif self.identifier == 'c':
77+
return QgsLocatorFilter.Low
78+
else:
79+
return QgsLocatorFilter.Medium
80+
6381

6482
class TestQgsLocator(unittest.TestCase):
6583

@@ -268,6 +286,8 @@ def got_hit(result):
268286

269287
def testModel(self):
270288
m = QgsLocatorModel()
289+
p = QgsLocatorProxyModel(m)
290+
p.setSourceModel(m)
271291
l = QgsLocator()
272292

273293
filter_a = test_filter('a')
@@ -282,40 +302,84 @@ def testModel(self):
282302
QCoreApplication.processEvents()
283303

284304
# 4 results - one is locator name
285-
self.assertEqual(m.rowCount(), 4)
286-
self.assertEqual(m.data(m.index(0, 0)), 'test')
287-
self.assertEqual(m.data(m.index(0, 0), QgsLocatorModel.ResultTypeRole), 0)
288-
self.assertEqual(m.data(m.index(0, 0), QgsLocatorModel.ResultFilterNameRole), 'test')
289-
self.assertEqual(m.data(m.index(1, 0)), 'a0')
290-
self.assertEqual(m.data(m.index(1, 0), QgsLocatorModel.ResultTypeRole), 1)
291-
self.assertEqual(m.data(m.index(1, 0), QgsLocatorModel.ResultFilterNameRole), 'test')
292-
self.assertEqual(m.data(m.index(2, 0)), 'a1')
293-
self.assertEqual(m.data(m.index(2, 0), QgsLocatorModel.ResultTypeRole), 1)
294-
self.assertEqual(m.data(m.index(2, 0), QgsLocatorModel.ResultFilterNameRole), 'test')
295-
self.assertEqual(m.data(m.index(3, 0)), 'a2')
296-
self.assertEqual(m.data(m.index(3, 0), QgsLocatorModel.ResultTypeRole), 1)
297-
self.assertEqual(m.data(m.index(3, 0), QgsLocatorModel.ResultFilterNameRole), 'test')
305+
self.assertEqual(p.rowCount(), 4)
306+
self.assertEqual(p.data(p.index(0, 0)), 'test_a')
307+
self.assertEqual(p.data(p.index(0, 0), QgsLocatorModel.ResultTypeRole), 0)
308+
self.assertEqual(p.data(p.index(0, 0), QgsLocatorModel.ResultFilterNameRole), 'test_a')
309+
self.assertEqual(p.data(p.index(1, 0)), 'a0')
310+
self.assertEqual(p.data(p.index(1, 0), QgsLocatorModel.ResultTypeRole), QgsLocatorModel.NoGroup)
311+
self.assertEqual(p.data(p.index(1, 0), QgsLocatorModel.ResultFilterNameRole), 'test_a')
312+
self.assertEqual(p.data(p.index(2, 0)), 'a1')
313+
self.assertEqual(p.data(p.index(2, 0), QgsLocatorModel.ResultTypeRole), QgsLocatorModel.NoGroup)
314+
self.assertEqual(p.data(p.index(2, 0), QgsLocatorModel.ResultFilterNameRole), 'test_a')
315+
self.assertEqual(p.data(p.index(3, 0)), 'a2')
316+
self.assertEqual(p.data(p.index(3, 0), QgsLocatorModel.ResultTypeRole), QgsLocatorModel.NoGroup)
317+
self.assertEqual(p.data(p.index(3, 0), QgsLocatorModel.ResultFilterNameRole), 'test_a')
298318

299319
m.clear()
300-
self.assertEqual(m.rowCount(), 0)
320+
self.assertEqual(p.rowCount(), 0)
301321
l.fetchResults('b', context)
302322

303323
for i in range(100):
304324
sleep(0.002)
305325
QCoreApplication.processEvents()
306326

307-
self.assertEqual(m.rowCount(), 4)
308-
self.assertEqual(m.data(m.index(1, 0)), 'a0')
309-
self.assertEqual(m.data(m.index(2, 0)), 'a1')
310-
self.assertEqual(m.data(m.index(3, 0)), 'a2')
327+
self.assertEqual(p.rowCount(), 4)
328+
self.assertEqual(p.data(p.index(1, 0)), 'a0')
329+
self.assertEqual(p.data(p.index(2, 0)), 'a1')
330+
self.assertEqual(p.data(p.index(3, 0)), 'a2')
311331

312332
m.deferredClear()
313333
# should not be immediately cleared!
314-
self.assertEqual(m.rowCount(), 4)
334+
self.assertEqual(p.rowCount(), 4)
315335
for i in range(100):
316336
sleep(0.002)
317337
QCoreApplication.processEvents()
318-
self.assertEqual(m.rowCount(), 0)
338+
self.assertEqual(p.rowCount(), 0)
339+
m.clear()
340+
341+
# test with groups
342+
self.assertEqual(p.rowCount(), 0)
343+
filter_b = test_filter('b', None, True)
344+
l.registerFilter(filter_b)
345+
l.fetchResults('c', context)
346+
for i in range(200):
347+
sleep(0.002)
348+
QCoreApplication.processEvents()
349+
self.assertEqual(p.rowCount(), 16) # 1 title a + 3 results + 1 title b + 2 groups + 9 results
350+
self.assertEqual(p.data(p.index(0, 0)), 'test_a')
351+
self.assertEqual(p.data(p.index(0, 0), QgsLocatorModel.ResultTypeRole), 0)
352+
self.assertEqual(p.data(p.index(1, 0)), 'a0')
353+
self.assertEqual(p.data(p.index(1, 0), QgsLocatorModel.ResultTypeRole), QgsLocatorModel.NoGroup)
354+
self.assertEqual(p.data(p.index(2, 0)), 'a1')
355+
self.assertEqual(p.data(p.index(2, 0), QgsLocatorModel.ResultTypeRole), QgsLocatorModel.NoGroup)
356+
self.assertEqual(p.data(p.index(3, 0)), 'a2')
357+
self.assertEqual(p.data(p.index(3, 0), QgsLocatorModel.ResultTypeRole), QgsLocatorModel.NoGroup)
358+
self.assertEqual(p.data(p.index(4, 0)), 'test_b')
359+
self.assertEqual(p.data(p.index(4, 0), QgsLocatorModel.ResultTypeRole), 0)
360+
self.assertEqual(p.data(p.index(4, 0), QgsLocatorModel.ResultFilterNameRole), 'test_b')
361+
self.assertEqual(p.data(p.index(5, 0)).strip(), 'first group')
362+
self.assertEqual(p.data(p.index(5, 0), QgsLocatorModel.ResultTypeRole), 1)
363+
self.assertEqual(p.data(p.index(6, 0)), 'b0')
364+
self.assertEqual(p.data(p.index(6, 0), QgsLocatorModel.ResultTypeRole), 1)
365+
self.assertEqual(p.data(p.index(7, 0)), 'b1')
366+
self.assertEqual(p.data(p.index(7, 0), QgsLocatorModel.ResultTypeRole), 1)
367+
self.assertEqual(p.data(p.index(8, 0)), 'b2')
368+
self.assertEqual(p.data(p.index(8, 0), QgsLocatorModel.ResultTypeRole), 1)
369+
self.assertEqual(p.data(p.index(9, 0)), 'b3')
370+
self.assertEqual(p.data(p.index(9, 0), QgsLocatorModel.ResultTypeRole), 1)
371+
self.assertEqual(p.data(p.index(10, 0)), 'b4')
372+
self.assertEqual(p.data(p.index(10, 0), QgsLocatorModel.ResultTypeRole), 1)
373+
self.assertEqual(p.data(p.index(11, 0)), 'b5')
374+
self.assertEqual(p.data(p.index(11, 0), QgsLocatorModel.ResultTypeRole), 1)
375+
self.assertEqual(p.data(p.index(12, 0)).strip(), 'second group')
376+
self.assertEqual(p.data(p.index(12, 0), QgsLocatorModel.ResultTypeRole), 2)
377+
self.assertEqual(p.data(p.index(13, 0)), 'b6')
378+
self.assertEqual(p.data(p.index(13, 0), QgsLocatorModel.ResultTypeRole), 2)
379+
self.assertEqual(p.data(p.index(14, 0)), 'b7')
380+
self.assertEqual(p.data(p.index(14, 0), QgsLocatorModel.ResultTypeRole), 2)
381+
self.assertEqual(p.data(p.index(15, 0)), 'b8')
382+
self.assertEqual(p.data(p.index(15, 0), QgsLocatorModel.ResultTypeRole), QgsLocatorModel.NoGroup)
319383

320384
def testAutoModel(self):
321385
"""
@@ -336,18 +400,18 @@ def testAutoModel(self):
336400

337401
# 4 results - one is locator name
338402
self.assertEqual(m.rowCount(), 4)
339-
self.assertEqual(m.data(m.index(0, 0)), 'test')
403+
self.assertEqual(m.data(m.index(0, 0)), 'test_a')
340404
self.assertEqual(m.data(m.index(0, 0), QgsLocatorModel.ResultTypeRole), 0)
341-
self.assertEqual(m.data(m.index(0, 0), QgsLocatorModel.ResultFilterNameRole), 'test')
405+
self.assertEqual(m.data(m.index(0, 0), QgsLocatorModel.ResultFilterNameRole), 'test_a')
342406
self.assertEqual(m.data(m.index(1, 0)), 'a0')
343-
self.assertEqual(m.data(m.index(1, 0), QgsLocatorModel.ResultTypeRole), 1)
344-
self.assertEqual(m.data(m.index(1, 0), QgsLocatorModel.ResultFilterNameRole), 'test')
407+
self.assertEqual(m.data(m.index(1, 0), QgsLocatorModel.ResultTypeRole), QgsLocatorModel.NoGroup)
408+
self.assertEqual(m.data(m.index(1, 0), QgsLocatorModel.ResultFilterNameRole), 'test_a')
345409
self.assertEqual(m.data(m.index(2, 0)), 'a1')
346-
self.assertEqual(m.data(m.index(2, 0), QgsLocatorModel.ResultTypeRole), 1)
347-
self.assertEqual(m.data(m.index(2, 0), QgsLocatorModel.ResultFilterNameRole), 'test')
410+
self.assertEqual(m.data(m.index(2, 0), QgsLocatorModel.ResultTypeRole), QgsLocatorModel.NoGroup)
411+
self.assertEqual(m.data(m.index(2, 0), QgsLocatorModel.ResultFilterNameRole), 'test_a')
348412
self.assertEqual(m.data(m.index(3, 0)), 'a2')
349-
self.assertEqual(m.data(m.index(3, 0), QgsLocatorModel.ResultTypeRole), 1)
350-
self.assertEqual(m.data(m.index(3, 0), QgsLocatorModel.ResultFilterNameRole), 'test')
413+
self.assertEqual(m.data(m.index(3, 0), QgsLocatorModel.ResultTypeRole), QgsLocatorModel.NoGroup)
414+
self.assertEqual(m.data(m.index(3, 0), QgsLocatorModel.ResultFilterNameRole), 'test_a')
351415

352416
m.search('a')
353417

@@ -357,7 +421,7 @@ def testAutoModel(self):
357421

358422
# 4 results - one is locator name
359423
self.assertEqual(m.rowCount(), 4)
360-
self.assertEqual(m.data(m.index(0, 0)), 'test')
424+
self.assertEqual(m.data(m.index(0, 0)), 'test_a')
361425
self.assertEqual(m.data(m.index(1, 0)), 'a0')
362426
self.assertEqual(m.data(m.index(2, 0)), 'a1')
363427
self.assertEqual(m.data(m.index(3, 0)), 'a2')

0 commit comments

Comments
 (0)