Files
grum/tests/test_mdiarea.py
2023-01-29 14:19:34 +01:00

201 lines
5.6 KiB
Python

import sys
from unittest import mock
from grum.mainwin import MainWindow
from grum.mdi import MDIArea, MDISubMultiPlot, MDISubPlot
from grum.mdi.mdisubwin import MDISubWindow
from grum.theme import MDI_BKG
from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QApplication, QMdiArea
class TestMDIArea:
def setup_method(self):
print("setup")
self.app = QApplication(sys.argv)
self.mw = MainWindow(add_examples=True)
self.mw.show()
def teardown_method(self):
print("teardown")
self.mw.rst.wait_for_stop()
self.app.quit()
print("app quit called")
del self.mw
del self.app
def test_on_cascade(self):
mdi = self.mw.mdi
mdi.enable_subwindow_view = mock.MagicMock()
mdi.cascadeSubWindows = mock.MagicMock()
mdi.menu.checkboxes["Multiple windows"].setChecked(False)
assert mdi.menu.checkboxes["Multiple windows"].isChecked() == False
mdi.on_cascade()
assert mdi.menu.checkboxes["Multiple windows"].isChecked() == True
mdi.enable_subwindow_view.assert_called_once()
mdi.cascadeSubWindows.assert_called_once()
def test_on_tile(self):
mdi = self.mw.mdi
mdi.enable_subwindow_view = mock.MagicMock()
mdi.tileSubWindows = mock.MagicMock()
mdi.menu.checkboxes["Multiple windows"].setChecked(False)
assert mdi.menu.checkboxes["Multiple windows"].isChecked() == False
mdi.on_tile()
assert mdi.menu.checkboxes["Multiple windows"].isChecked() == True
mdi.enable_subwindow_view.assert_called_once()
mdi.tileSubWindows.assert_called_once()
def test_enable_single_window_mode(self):
mdi = self.mw.mdi
mdi.enable_subwindow_view = mock.MagicMock()
mdi.closeInactiveSubWindows = mock.MagicMock()
active = mdi.activeSubWindow()
assert mdi.activeSubWindow() == None
sine_item = self.mw.lst.lst.get("sine")
sub = MDISubPlot("sine", sine_item.value)
mdi.addSubWindow(sub)
mdi.setActiveSubWindow(MDISubWindow("sine"))
# assert mdi.activeSubWindow() != None #TODO: check this!
mdi.enable_single_window_mode()
mdi.enable_subwindow_view.assert_called_once()
mdi.closeInactiveSubWindows.assert_called_once()
# active = mdi.activeSubWindow()
# if active:
# active.showMaximized()
# active.frame_off()
def test_enable_subwindow_view(self):
mdi = self.mw.mdi
mdi.setViewMode = mock.MagicMock()
sine_item = self.mw.lst.lst.get("sine")
sub = MDISubPlot("sine", sine_item.value)
mdi.addSubWindow(sub)
sub.frame_on = mock.MagicMock()
mdi.enable_subwindow_view()
mdi.setViewMode.assert_called_once_with(QMdiArea.SubWindowView)
# sub.frame_on.assert_called_once() #TODO: check this
def test_enable_tabbed_view(self):
mdi = self.mw.mdi
mdi.setViewMode = mock.MagicMock()
mdi.enable_tabbed_view()
mdi.setViewMode.assert_called_once_with(QMdiArea.TabbedView)
def test_add(self):
mdi = self.mw.mdi
sine_item = self.mw.lst.lst.get("sine")
sub = MDISubPlot("sine", sine_item.value)
mdi.add_multiple = mock.MagicMock()
mdi.add_single = mock.MagicMock()
assert mdi.menu.checkboxes["Single window"].isChecked() == False
mdi.add(sub)
mdi.add_multiple.assert_called_once_with(sub)
mdi.menu.checkboxes['Single window'].setChecked(True)
assert mdi.menu.checkboxes["Single window"].isChecked() == True
mdi.add(sub)
mdi.add_single.assert_called_once_with(sub)
def test_add_multiple(self):
mdi = self.mw.mdi
mdi.addSubWindow = mock.MagicMock()
sine_item = self.mw.lst.lst.get("sine")
sub = MDISubPlot("sine", sine_item.value)
sub.show = mock.MagicMock()
mdi.add_multiple(sub)
mdi.addSubWindow.assert_called_once()
sub.show.assert_called_once()
def test_add_single(self):
mdi = self.mw.mdi
mdi.addSubWindow = mock.MagicMock()
mdi.closeAllSubWindows = mock.MagicMock()
sine_item = self.mw.lst.lst.get("sine")
sub = MDISubPlot("sine", sine_item.value)
sub.maximize = mock.MagicMock()
sub.frame_off = mock.MagicMock()
mdi.add_single(sub)
mdi.closeAllSubWindows.assert_called_once()
mdi.addSubWindow.assert_called_once_with(sub)
sub.maximize.assert_called_once()
sub.frame_off.assert_called_once()
def test_paintEvent(self):
mdi = self.mw.mdi
mdi._draw_watermark = mock.MagicMock()
mdi.paintEvent('event')
mdi._draw_watermark.assert_called_once()
def test_findSubWindow(self):
mdi = self.mw.mdi
sine_item = self.mw.lst.lst.get("sine")
sub = MDISubPlot("sine", sine_item.value)
mdi.add(sub)
ret = mdi.findSubWindow('sine')
assert ret == sub
ret = mdi.findSubWindow('cosine')
assert ret == None
def test_closeInactiveSubWindows(self):
mdi = self.mw.mdi
sine_item = self.mw.lst.lst.get("sine")
sub = MDISubPlot("sine", sine_item.value)
mdi.add(sub)
cosine_item = self.mw.lst.lst.get("cosine")
cosine_sub = MDISubPlot("cosine", cosine_item.value)
mdi.add(cosine_sub)
sub.close = mock.MagicMock()
mdi.closeInactiveSubWindows()
active = mdi.activeSubWindow()
assert active == cosine_sub
for sub in mdi.subWindowList():
if sub != active:
sub.close.assert_called_once()