/tests/src/python/test_qgsbookmarkmodel.py

https://github.com/ricardogsilva/Quantum-GIS · Python · 248 lines · 204 code · 29 blank · 15 comment · 9 complexity · b6c14f86c432efaf618d12d5bfeca147 MD5 · raw file

  1. # -*- coding: utf-8 -*-
  2. """QGIS Unit tests for QgsBookmarkModel.
  3. .. note:: This program is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation; either version 2 of the License, or
  6. (at your option) any later version.
  7. """
  8. __author__ = '(C) 2019 by Nyall Dawson'
  9. __date__ = '02/09/2019'
  10. __copyright__ = 'Copyright 2019, The QGIS Project'
  11. import qgis # NOQA
  12. from qgis.PyQt.QtCore import Qt, QCoreApplication, QLocale
  13. from qgis.core import (QgsBookmark,
  14. QgsBookmarkManager,
  15. QgsBookmarkManagerModel,
  16. QgsProject,
  17. QgsReferencedRectangle,
  18. QgsRectangle,
  19. QgsCoordinateReferenceSystem,
  20. QgsSettings)
  21. from qgis.testing import start_app, unittest
  22. from utilities import unitTestDataPath
  23. start_app()
  24. TEST_DATA_DIR = unitTestDataPath()
  25. class TestQgsBookmarkManagerModel(unittest.TestCase):
  26. @classmethod
  27. def setUpClass(cls):
  28. """Run before all tests"""
  29. QCoreApplication.setOrganizationName("QGIS_Test")
  30. QCoreApplication.setOrganizationDomain("QGIS_TestQgsBookmarkManager.com")
  31. QCoreApplication.setApplicationName("QGIS_TestQgsBookmarkManager")
  32. QgsSettings().clear()
  33. QLocale.setDefault(QLocale(QLocale.English))
  34. start_app()
  35. def testBookmarkModel(self):
  36. p = QgsProject()
  37. project_manager = QgsBookmarkManager.createProjectBasedManager(p)
  38. app_manager = QgsBookmarkManager()
  39. # initially no bookmarks
  40. model = QgsBookmarkManagerModel(app_manager, project_manager)
  41. self.assertEqual(model.rowCount(), 0)
  42. self.assertEqual(model.columnCount(), 8)
  43. self.assertFalse(model.data(model.index(-1, 0)))
  44. self.assertFalse(model.data(model.index(1, 0)))
  45. self.assertFalse(model.data(model.index(0, 0)))
  46. self.assertFalse(model.data(model.index(0, 0), QgsBookmarkManagerModel.RoleName))
  47. self.assertEqual(model.headerData(0, Qt.Horizontal), 'Name')
  48. self.assertEqual(model.headerData(9, Qt.Horizontal), 10)
  49. self.assertEqual(model.headerData(-1, Qt.Horizontal), 0)
  50. self.assertFalse(model.setData(model.index(-1, 0), 4, Qt.EditRole))
  51. self.assertFalse(model.setData(model.index(0, 0), 4, Qt.EditRole))
  52. self.assertFalse(int(model.flags(model.index(0, 0)) & Qt.ItemIsEnabled))
  53. self.assertFalse(int(model.flags(model.index(0, 0)) & Qt.ItemIsEditable))
  54. # add some bookmarks
  55. b = QgsBookmark()
  56. b.setId('1')
  57. b.setGroup('group 1')
  58. b.setName('b1')
  59. b.setExtent(QgsReferencedRectangle(QgsRectangle(11, 21, 31, 41), QgsCoordinateReferenceSystem('EPSG:4326')))
  60. b2 = QgsBookmark()
  61. b2.setId('2')
  62. b2.setGroup('group 2')
  63. b2.setName('b2')
  64. b2.setExtent(QgsReferencedRectangle(QgsRectangle(12, 22, 32, 42), QgsCoordinateReferenceSystem('EPSG:4326')))
  65. app_manager.addBookmark(b)
  66. app_manager.addBookmark(b2)
  67. self.assertEqual(model.rowCount(), 2)
  68. self.assertFalse(model.data(model.index(-1, 0)))
  69. self.assertEqual(model.data(model.index(0, 0)), 'b1')
  70. self.assertEqual(model.data(model.index(0, 1)), 'group 1')
  71. self.assertEqual(model.data(model.index(0, 2)), 11.0)
  72. self.assertEqual(model.data(model.index(0, 3)), 21.0)
  73. self.assertEqual(model.data(model.index(0, 4)), 31.0)
  74. self.assertEqual(model.data(model.index(0, 5)), 41.0)
  75. self.assertEqual(model.data(model.index(0, 6)), 'EPSG:4326')
  76. self.assertEqual(model.data(model.index(0, 7)), None)
  77. self.assertEqual(model.data(model.index(0, 7), Qt.CheckStateRole), Qt.Unchecked)
  78. self.assertEqual(model.data(model.index(0, 0), QgsBookmarkManagerModel.RoleName), 'b1')
  79. self.assertEqual(model.data(model.index(0, 0), QgsBookmarkManagerModel.RoleGroup), 'group 1')
  80. id = model.data(model.index(0, 0), QgsBookmarkManagerModel.RoleId)
  81. self.assertEqual(app_manager.bookmarkById(id).name(), 'b1')
  82. self.assertEqual(model.data(model.index(0, 0), QgsBookmarkManagerModel.RoleExtent), app_manager.bookmarkById(id).extent())
  83. self.assertEqual(model.data(model.index(1, 0)), 'b2')
  84. self.assertEqual(model.data(model.index(1, 1)), 'group 2')
  85. self.assertEqual(model.data(model.index(1, 2)), 12.0)
  86. self.assertEqual(model.data(model.index(1, 3)), 22.0)
  87. self.assertEqual(model.data(model.index(1, 4)), 32.0)
  88. self.assertEqual(model.data(model.index(1, 5)), 42.0)
  89. self.assertEqual(model.data(model.index(1, 6)), 'EPSG:4326')
  90. self.assertEqual(model.data(model.index(1, 7)), None)
  91. self.assertEqual(model.data(model.index(1, 7), Qt.CheckStateRole), Qt.Unchecked)
  92. self.assertEqual(model.data(model.index(1, 0), QgsBookmarkManagerModel.RoleName), 'b2')
  93. self.assertEqual(model.data(model.index(1, 0), QgsBookmarkManagerModel.RoleGroup), 'group 2')
  94. id = model.data(model.index(1, 0), QgsBookmarkManagerModel.RoleId)
  95. self.assertEqual(app_manager.bookmarkById(id).name(), 'b2')
  96. self.assertEqual(model.data(model.index(1, 0), QgsBookmarkManagerModel.RoleExtent), app_manager.bookmarkById(id).extent())
  97. self.assertFalse(model.data(model.index(2, 0)))
  98. self.assertFalse(model.setData(model.index(-1, 0), 4, Qt.EditRole))
  99. self.assertTrue(model.setData(model.index(0, 0), 'new name', Qt.EditRole))
  100. self.assertEqual(model.data(model.index(0, 0)), 'new name')
  101. self.assertEqual(app_manager.bookmarks()[0].name(), 'new name')
  102. self.assertTrue(model.setData(model.index(1, 1), 'new group', Qt.EditRole))
  103. self.assertEqual(model.data(model.index(1, 1)), 'new group')
  104. self.assertEqual(app_manager.bookmarks()[1].group(), 'new group')
  105. self.assertTrue(model.setData(model.index(0, 2), 1, Qt.EditRole))
  106. self.assertEqual(model.data(model.index(0, 2)), 1.0)
  107. self.assertEqual(app_manager.bookmarks()[0].extent().xMinimum(), 1.0)
  108. self.assertTrue(model.setData(model.index(0, 3), 2, Qt.EditRole))
  109. self.assertEqual(model.data(model.index(0, 3)), 2.0)
  110. self.assertEqual(app_manager.bookmarks()[0].extent().yMinimum(), 2.0)
  111. self.assertTrue(model.setData(model.index(0, 4), 3, Qt.EditRole))
  112. self.assertEqual(model.data(model.index(0, 4)), 3.0)
  113. self.assertEqual(app_manager.bookmarks()[0].extent().xMaximum(), 3.0)
  114. self.assertTrue(model.setData(model.index(0, 5), 4, Qt.EditRole))
  115. self.assertEqual(model.data(model.index(0, 5)), 4.0)
  116. self.assertEqual(app_manager.bookmarks()[0].extent().yMaximum(), 4.0)
  117. self.assertFalse(model.setData(model.index(2, 0), 4, Qt.EditRole))
  118. self.assertTrue(int(model.flags(model.index(0, 0)) & Qt.ItemIsEnabled))
  119. self.assertTrue(int(model.flags(model.index(0, 0)) & Qt.ItemIsEditable))
  120. self.assertTrue(int(model.flags(model.index(0, 7)) & Qt.ItemIsUserCheckable))
  121. self.assertTrue(int(model.flags(model.index(1, 7)) & Qt.ItemIsUserCheckable))
  122. self.assertTrue(int(model.flags(model.index(1, 0)) & Qt.ItemIsEnabled))
  123. self.assertTrue(int(model.flags(model.index(1, 0)) & Qt.ItemIsEditable))
  124. self.assertFalse(int(model.flags(model.index(2, 0)) & Qt.ItemIsEnabled))
  125. self.assertFalse(int(model.flags(model.index(2, 0)) & Qt.ItemIsEditable))
  126. self.assertFalse(int(model.flags(model.index(2, 7)) & Qt.ItemIsUserCheckable))
  127. # add bookmark to project manager
  128. b3 = QgsBookmark()
  129. b3.setId('3')
  130. b3.setName('b3')
  131. b3.setGroup('group 3')
  132. b3.setExtent(QgsReferencedRectangle(QgsRectangle(32, 32, 33, 43), QgsCoordinateReferenceSystem('EPSG:28355')))
  133. project_manager.addBookmark(b3)
  134. self.assertEqual(model.rowCount(), 3)
  135. self.assertFalse(model.data(model.index(-1, 0)))
  136. self.assertEqual(model.data(model.index(0, 0)), 'new name')
  137. self.assertEqual(model.data(model.index(0, 1)), 'group 1')
  138. self.assertEqual(model.data(model.index(0, 2)), 1.0)
  139. self.assertEqual(model.data(model.index(0, 3)), 2.0)
  140. self.assertEqual(model.data(model.index(0, 4)), 3.0)
  141. self.assertEqual(model.data(model.index(0, 5)), 4.0)
  142. self.assertEqual(model.data(model.index(0, 6)), 'EPSG:4326')
  143. self.assertEqual(model.data(model.index(0, 7)), None)
  144. self.assertEqual(model.data(model.index(0, 7), Qt.CheckStateRole), Qt.Unchecked)
  145. self.assertEqual(model.data(model.index(1, 0)), 'b2')
  146. self.assertEqual(model.data(model.index(1, 1)), 'new group')
  147. self.assertEqual(model.data(model.index(1, 2)), 12.0)
  148. self.assertEqual(model.data(model.index(1, 3)), 22.0)
  149. self.assertEqual(model.data(model.index(1, 4)), 32.0)
  150. self.assertEqual(model.data(model.index(1, 5)), 42.0)
  151. self.assertEqual(model.data(model.index(1, 6)), 'EPSG:4326')
  152. self.assertEqual(model.data(model.index(1, 7)), None)
  153. self.assertEqual(model.data(model.index(1, 7), Qt.CheckStateRole), Qt.Unchecked)
  154. self.assertEqual(model.data(model.index(2, 0)), 'b3')
  155. self.assertEqual(model.data(model.index(2, 1)), 'group 3')
  156. self.assertEqual(model.data(model.index(2, 2)), 32.0)
  157. self.assertEqual(model.data(model.index(2, 3)), 32.0)
  158. self.assertEqual(model.data(model.index(2, 4)), 33.0)
  159. self.assertEqual(model.data(model.index(2, 5)), 43.0)
  160. self.assertEqual(model.data(model.index(2, 6)), 'EPSG:28355')
  161. self.assertEqual(model.data(model.index(2, 7)), None)
  162. self.assertEqual(model.data(model.index(2, 7), Qt.CheckStateRole), Qt.Checked)
  163. self.assertEqual(model.data(model.index(2, 0), QgsBookmarkManagerModel.RoleName), 'b3')
  164. self.assertEqual(model.data(model.index(2, 0), QgsBookmarkManagerModel.RoleGroup), 'group 3')
  165. id = model.data(model.index(2, 0), QgsBookmarkManagerModel.RoleId)
  166. self.assertEqual(project_manager.bookmarkById(id).name(), 'b3')
  167. self.assertEqual(model.data(model.index(2, 0), QgsBookmarkManagerModel.RoleExtent), project_manager.bookmarkById(id).extent())
  168. self.assertFalse(model.data(model.index(3, 0)))
  169. self.assertTrue(model.setData(model.index(2, 0), 'new name 2', Qt.EditRole))
  170. self.assertEqual(model.data(model.index(2, 0)), 'new name 2')
  171. self.assertEqual(project_manager.bookmarks()[0].name(), 'new name 2')
  172. self.assertTrue(model.setData(model.index(2, 1), 'new group', Qt.EditRole))
  173. self.assertEqual(model.data(model.index(2, 1)), 'new group')
  174. self.assertEqual(project_manager.bookmarks()[0].group(), 'new group')
  175. self.assertTrue(model.setData(model.index(2, 2), 1, Qt.EditRole))
  176. self.assertEqual(model.data(model.index(2, 2)), 1.0)
  177. self.assertEqual(project_manager.bookmarks()[0].extent().xMinimum(), 1.0)
  178. self.assertTrue(model.setData(model.index(2, 3), 2, Qt.EditRole))
  179. self.assertEqual(model.data(model.index(2, 3)), 2.0)
  180. self.assertEqual(project_manager.bookmarks()[0].extent().yMinimum(), 2.0)
  181. self.assertTrue(model.setData(model.index(2, 4), 3, Qt.EditRole))
  182. self.assertEqual(model.data(model.index(2, 4)), 3.0)
  183. self.assertEqual(project_manager.bookmarks()[0].extent().xMaximum(), 3.0)
  184. self.assertTrue(model.setData(model.index(2, 5), 4, Qt.EditRole))
  185. self.assertEqual(model.data(model.index(2, 5)), 4.0)
  186. self.assertEqual(project_manager.bookmarks()[0].extent().yMaximum(), 4.0)
  187. self.assertFalse(model.setData(model.index(3, 0), 4, Qt.EditRole))
  188. self.assertTrue(int(model.flags(model.index(0, 0)) & Qt.ItemIsEnabled))
  189. self.assertTrue(int(model.flags(model.index(0, 0)) & Qt.ItemIsEditable))
  190. self.assertTrue(int(model.flags(model.index(0, 7)) & Qt.ItemIsUserCheckable))
  191. self.assertTrue(int(model.flags(model.index(1, 7)) & Qt.ItemIsUserCheckable))
  192. self.assertTrue(int(model.flags(model.index(1, 0)) & Qt.ItemIsEnabled))
  193. self.assertTrue(int(model.flags(model.index(1, 0)) & Qt.ItemIsEditable))
  194. self.assertTrue(int(model.flags(model.index(2, 0)) & Qt.ItemIsEnabled))
  195. self.assertTrue(int(model.flags(model.index(2, 0)) & Qt.ItemIsEditable))
  196. self.assertTrue(int(model.flags(model.index(2, 7)) & Qt.ItemIsUserCheckable))
  197. self.assertFalse(int(model.flags(model.index(3, 0)) & Qt.ItemIsEnabled))
  198. self.assertFalse(int(model.flags(model.index(3, 0)) & Qt.ItemIsEditable))
  199. self.assertFalse(int(model.flags(model.index(3, 7)) & Qt.ItemIsUserCheckable))
  200. # try transferring bookmark from app->project
  201. self.assertTrue(model.setData(model.index(1, 7), Qt.Checked, Qt.CheckStateRole))
  202. self.assertEqual([b.name() for b in project_manager.bookmarks()], ['new name 2', 'b2'])
  203. self.assertEqual([b.name() for b in app_manager.bookmarks()], ['new name'])
  204. self.assertFalse(model.setData(model.index(1, 7), Qt.Checked, Qt.CheckStateRole))
  205. # try transferring bookmark from project->app
  206. self.assertTrue(model.setData(model.index(1, 7), Qt.Unchecked, Qt.CheckStateRole))
  207. self.assertEqual([b.name() for b in project_manager.bookmarks()], ['b2'])
  208. self.assertEqual([b.name() for b in app_manager.bookmarks()], ['new name', 'new name 2'])
  209. self.assertFalse(model.setData(model.index(1, 7), Qt.Unchecked, Qt.CheckStateRole))
  210. # remove rows
  211. model.removeRows(0, 1)
  212. self.assertEqual([b.name() for b in project_manager.bookmarks()], ['b2'])
  213. self.assertEqual([b.name() for b in app_manager.bookmarks()], ['new name 2'])
  214. model.removeRows(0, 2)
  215. self.assertEqual([b.name() for b in project_manager.bookmarks()], [])
  216. self.assertEqual([b.name() for b in app_manager.bookmarks()], [])
  217. if __name__ == '__main__':
  218. unittest.main()