Skip to content

Commit d2670fd

Browse files
committed
overlay: Move and improve tests
1 parent fd3b9fa commit d2670fd

File tree

2 files changed

+87
-49
lines changed

2 files changed

+87
-49
lines changed

Orange/widgets/utils/overlay.py

Lines changed: 1 addition & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
QStyleOptionButton, QStylePainter, QFocusFrame, QWidget, QStyleOption
1818
)
1919
from AnyQt.QtGui import QIcon, QPixmap, QPainter
20-
from AnyQt.QtCore import Qt, QSize, QRect, QPoint, QEvent, QTimer
20+
from AnyQt.QtCore import Qt, QSize, QRect, QPoint, QEvent
2121
from AnyQt.QtCore import pyqtSignal as Signal, pyqtSlot as Slot
2222

2323

@@ -606,51 +606,3 @@ def buttonRole(self, button):
606606
@proxydoc(MessageWidget.button)
607607
def button(self, standardButton):
608608
return self.__msgwidget.button(standardButton)
609-
610-
611-
import unittest
612-
613-
614-
class TestOverlay(unittest.TestCase):
615-
def setUp(self):
616-
from AnyQt.QtWidgets import QApplication
617-
app = QApplication.instance()
618-
if app is None:
619-
app = QApplication([])
620-
self.app = app
621-
622-
def _exec(self, timeout):
623-
QTimer.singleShot(timeout, self.app.quit)
624-
return self.app.exec_()
625-
626-
def tearDown(self):
627-
del self.app
628-
629-
def test_overlay(self):
630-
container = QWidget()
631-
overlay = MessageOverlayWidget(parent=container)
632-
overlay.setWidget(container)
633-
overlay.setIcon(QStyle.SP_MessageBoxInformation)
634-
container.show()
635-
container.raise_()
636-
self._exec(500)
637-
self.assertTrue(overlay.isVisible())
638-
639-
overlay.setText("Hello world! It's so nice here")
640-
self._exec(500)
641-
button_ok = overlay.addButton(MessageOverlayWidget.Ok)
642-
button_close = overlay.addButton(MessageOverlayWidget.Close)
643-
button_help = overlay.addButton(MessageOverlayWidget.Help)
644-
645-
self.assertTrue(all([button_ok, button_close, button_help]))
646-
self.assertIs(overlay.button(MessageOverlayWidget.Ok), button_ok)
647-
self.assertIs(overlay.button(MessageOverlayWidget.Close), button_close)
648-
self.assertIs(overlay.button(MessageOverlayWidget.Help), button_help)
649-
650-
button = overlay.addButton("Click Me!",
651-
MessageOverlayWidget.AcceptRole)
652-
self.assertIsNot(button, None)
653-
self.assertTrue(overlay.buttonRole(button),
654-
MessageOverlayWidget.AcceptRole)
655-
656-
self._exec(10000)
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
2+
import unittest.mock
3+
from AnyQt.QtCore import Qt, QEvent
4+
from AnyQt.QtTest import QTest
5+
from AnyQt.QtWidgets import QWidget, QHBoxLayout, QStyle, QApplication
6+
7+
from Orange.widgets.tests.base import GuiTest
8+
from Orange.widgets.utils.overlay import (
9+
OverlayWidget, MessageOverlayWidget
10+
)
11+
12+
class TestOverlay(GuiTest):
13+
def test_overlay_message(self):
14+
container = QWidget()
15+
overlay = MessageOverlayWidget(parent=container)
16+
overlay.setWidget(container)
17+
overlay.setIcon(QStyle.SP_MessageBoxInformation)
18+
container.show()
19+
QTest.qWaitForWindowExposed(container)
20+
21+
self.assertTrue(overlay.isVisible())
22+
23+
overlay.setText("Hello world! It's so nice here")
24+
QApplication.sendPostedEvents(overlay, QEvent.LayoutRequest)
25+
self.assertTrue(overlay.geometry().isValid())
26+
27+
button_ok = overlay.addButton(MessageOverlayWidget.Ok)
28+
button_close = overlay.addButton(MessageOverlayWidget.Close)
29+
button_help = overlay.addButton(MessageOverlayWidget.Help)
30+
31+
self.assertTrue(all([button_ok, button_close, button_help]))
32+
self.assertIs(overlay.button(MessageOverlayWidget.Ok), button_ok)
33+
self.assertIs(overlay.button(MessageOverlayWidget.Close), button_close)
34+
self.assertIs(overlay.button(MessageOverlayWidget.Help), button_help)
35+
36+
button = overlay.addButton("Click Me!",
37+
MessageOverlayWidget.AcceptRole)
38+
self.assertIsNot(button, None)
39+
self.assertTrue(overlay.buttonRole(button),
40+
MessageOverlayWidget.AcceptRole)
41+
42+
mock = unittest.mock.MagicMock()
43+
overlay.accepted.connect(mock)
44+
QTest.mouseClick(button, Qt.LeftButton)
45+
self.assertFalse(overlay.isVisible())
46+
47+
mock.assert_called_once_with()
48+
49+
def test_layout(self):
50+
container = QWidget()
51+
container.setLayout(QHBoxLayout())
52+
container1 = QWidget()
53+
container.layout().addWidget(container1)
54+
container.show()
55+
QTest.qWaitForWindowExposed(container)
56+
container.resize(600, 600)
57+
58+
overlay = OverlayWidget(parent=container)
59+
overlay.setWidget(container)
60+
overlay.resize(20, 20)
61+
overlay.show()
62+
63+
center = overlay.geometry().center()
64+
self.assertTrue(290 < center.x() < 310)
65+
self.assertTrue(290 < center.y() < 310)
66+
67+
overlay.setAlignment(Qt.AlignTop | Qt.AlignHCenter)
68+
geom = overlay.geometry()
69+
self.assertEqual(geom.top(), 0)
70+
self.assertTrue(290 < geom.center().x() < 310)
71+
72+
overlay.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
73+
geom = overlay.geometry()
74+
self.assertEqual(geom.left(), 0)
75+
self.assertTrue(290 < geom.center().y() < 310)
76+
77+
overlay.setAlignment(Qt.AlignBottom | Qt.AlignRight)
78+
geom = overlay.geometry()
79+
self.assertEqual(geom.right(), 600 - 1)
80+
self.assertEqual(geom.bottom(), 600 - 1)
81+
82+
overlay.setWidget(container1)
83+
geom = overlay.geometry()
84+
85+
self.assertEqual(geom.right(), container1.geometry().right())
86+
self.assertEqual(geom.bottom(), container1.geometry().bottom())

0 commit comments

Comments
 (0)