Skip to content

Commit 40fdee6

Browse files
committed
test_stickygraphicsview: Add tests for fractional scene rects
1 parent 379ea03 commit 40fdee6

File tree

1 file changed

+68
-3
lines changed

1 file changed

+68
-3
lines changed

Orange/widgets/utils/tests/test_stickygraphicsview.py

Lines changed: 68 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
from PyQt5.QtCore import Qt, QRectF, QPoint, QPointF
22
from PyQt5.QtGui import QBrush, QWheelEvent
3-
from PyQt5.QtWidgets import QGraphicsScene, QWidget, QApplication
3+
from PyQt5.QtWidgets import QGraphicsScene, QWidget, QApplication, QStyle
44

55
from Orange.widgets.tests.base import GuiTest
66

77
from Orange.widgets.utils.stickygraphicsview import StickyGraphicsView
88

99

1010
class TestStickyGraphicsView(GuiTest):
11-
def test(self):
11+
def create_view(self):
1212
view = StickyGraphicsView()
1313
scene = QGraphicsScene(view)
14-
scene.setBackgroundBrush(QBrush(Qt.lightGray, Qt.CrossPattern))
1514
view.setScene(scene)
15+
return view
16+
17+
def test(self):
18+
view = self.create_view()
19+
scene = view.scene()
20+
scene.setBackgroundBrush(QBrush(Qt.lightGray, Qt.CrossPattern))
1621
scene.addRect(
1722
QRectF(0, 0, 300, 20), Qt.red, QBrush(Qt.red, Qt.BDiagPattern))
1823
scene.addRect(QRectF(0, 25, 300, 100))
@@ -48,6 +53,66 @@ def test(self):
4853

4954
qWheelScroll(header.viewport(), angleDelta=QPoint(0, -720 * 8))
5055

56+
@staticmethod
57+
def _ensure_laid_out(view: QWidget) -> None:
58+
"""Ensure view has had pending resize events flushed."""
59+
# when a widget is not visible it does not get resizeEvents dispatched
60+
# immediately, only before it is actually shown or its rendering is
61+
# requested.
62+
view.grab()
63+
64+
def _test_visibility(self, view: StickyGraphicsView) -> None:
65+
header = view.headerView()
66+
footer = view.footerView()
67+
vsbar = view.verticalScrollBar()
68+
vsbar.triggerAction(vsbar.SliderToMinimum)
69+
self._ensure_laid_out(view)
70+
71+
self.assertFalse(header.isVisibleTo(view))
72+
self.assertTrue(footer.isVisibleTo(view))
73+
74+
vsbar.triggerAction(vsbar.SliderSingleStepAdd)
75+
self._ensure_laid_out(view)
76+
77+
self.assertTrue(header.isVisibleTo(view))
78+
self.assertTrue(footer.isVisibleTo(view))
79+
80+
vsbar.triggerAction(vsbar.SliderToMaximum)
81+
self._ensure_laid_out(view)
82+
83+
self.assertTrue(header.isVisibleTo(view))
84+
self.assertFalse(footer.isVisibleTo(view))
85+
86+
vsbar.triggerAction(vsbar.SliderSingleStepSub)
87+
self._ensure_laid_out(view)
88+
if not view.style().styleHint(QStyle.SH_ScrollBar_Transient, None, vsbar):
89+
# cannot reliably test due to QTBUG-65074
90+
self.assertTrue(header.isVisibleTo(view))
91+
self.assertTrue(footer.isVisibleTo(view))
92+
93+
def test_fractional_1(self):
94+
view = self.create_view()
95+
view.resize(300, 100)
96+
scenerect = QRectF(-0.1, -0.1, 300.2, 300.2)
97+
headerrect = QRectF(-0.1, -0.1, 300.2, 20.2)
98+
footerrect = QRectF(-0.1, 279.9, 300.2, 20.2)
99+
view.setSceneRect(scenerect)
100+
view.setHeaderSceneRect(headerrect)
101+
view.setFooterSceneRect(footerrect)
102+
self._test_visibility(view)
103+
104+
def test_fractional_2(self):
105+
view = self.create_view()
106+
view.resize(300, 100)
107+
view.grab()
108+
scenerect = QRectF(0.1, 0.1, 300, 299.8)
109+
headerrect = QRectF(0.1, 0.1, 300, 20)
110+
footerrect = QRectF(0.1, 299.9 - 20, 300, 20)
111+
view.setSceneRect(scenerect)
112+
view.setHeaderSceneRect(headerrect)
113+
view.setFooterSceneRect(footerrect)
114+
self._test_visibility(view)
115+
51116

52117
def qWheelScroll(
53118
widget: QWidget, buttons=Qt.NoButton, modifiers=Qt.NoModifier,

0 commit comments

Comments
 (0)