-
-
Notifications
You must be signed in to change notification settings - Fork 3k
/
test_qgspropertyoverridebutton.py
90 lines (67 loc) · 3.84 KB
/
test_qgspropertyoverridebutton.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# -*- coding: utf-8 -*-
"""QGIS Unit tests for QgsPropertyOverrideButton.
.. note:: This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
"""
__author__ = 'Nyall Dawson'
__date__ = '11/01/2019'
__copyright__ = 'Copyright 2019, The QGIS Project'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'
import qgis # NOQA
from qgis.core import (QgsPropertyDefinition,
QgsProperty,
QgsApplication,
QgsProjectColorScheme)
from qgis.gui import (QgsColorButton,
QgsPropertyOverrideButton)
from qgis.testing import start_app, unittest
from qgis.PyQt.QtGui import QColor
start_app()
class TestQgsPropertyOverrideButton(unittest.TestCase):
def testProjectColor(self):
definition = QgsPropertyDefinition('test', 'test', QgsPropertyDefinition.ColorWithAlpha)
button = QgsPropertyOverrideButton()
button.init(0, QgsProperty(), definition)
button.aboutToShowMenu()
self.assertIn('Project Color', [a.text() for a in button.menu().actions()])
self.assertIn('Color', [a.text() for a in button.menu().actions()])
color_action = [a for a in button.menu().actions() if a.text() == 'Color'][0]
self.assertEqual([a.text() for a in color_action.menu().actions()][0], 'No colors set')
# add some project colors
scheme = [s for s in QgsApplication.colorSchemeRegistry().schemes() if isinstance(s, QgsProjectColorScheme)][0]
scheme.setColors([[QColor(255, 0, 0), 'color 1'], [QColor(255, 255, 0), 'burnt marigold']])
button.aboutToShowMenu()
self.assertIn('Project Color', [a.text() for a in button.menu().actions()])
self.assertIn('Color', [a.text() for a in button.menu().actions()])
color_action = [a for a in button.menu().actions() if a.text() == 'Color'][0]
self.assertEqual([a.text() for a in color_action.menu().actions()], ['color 1', 'burnt marigold'])
button.menuActionTriggered(color_action.menu().actions()[1])
self.assertTrue(button.toProperty().isActive())
self.assertEqual(button.toProperty().asExpression(), 'project_color(\'burnt marigold\')')
button.menuActionTriggered(color_action.menu().actions()[0])
self.assertTrue(button.toProperty().isActive())
self.assertEqual(button.toProperty().asExpression(), 'project_color(\'color 1\')')
button.setToProperty(QgsProperty.fromExpression('project_color(\'burnt marigold\')'))
button.aboutToShowMenu()
color_action = [a for a in button.menu().actions() if a.text() == 'Color'][0]
self.assertTrue(color_action.isChecked())
self.assertEqual([a.isChecked() for a in color_action.menu().actions()], [False, True])
# should also see color menu for ColorNoAlpha properties
definition = QgsPropertyDefinition('test', 'test', QgsPropertyDefinition.ColorNoAlpha)
button = QgsPropertyOverrideButton()
button.init(0, QgsProperty(), definition)
button.aboutToShowMenu()
self.assertIn('Project Color', [a.text() for a in button.menu().actions()])
self.assertIn('Color', [a.text() for a in button.menu().actions()])
# but no color menu for other types
definition = QgsPropertyDefinition('test', 'test', QgsPropertyDefinition.Double)
button = QgsPropertyOverrideButton()
button.init(0, QgsProperty(), definition)
button.aboutToShowMenu()
self.assertNotIn('Project Color', [a.text() for a in button.menu().actions()])
self.assertNotIn('Color', [a.text() for a in button.menu().actions()])
if __name__ == '__main__':
unittest.main()