Files
grum/tests/test_mdiarea.py
2023-01-24 16:53:22 +01:00

203 lines
5.7 KiB
Python

import sys
import unittest
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 TestViewUnit(unittest.TestCase):
def setUp(self) -> None:
print("setup")
self.app = QApplication(sys.argv)
self.mw = MainWindow(add_examples=True)
self.mw.show()
def tearDown(self) -> None:
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
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.showMaximized = mock.MagicMock()
sub.frame_off = mock.MagicMock()
mdi.add_single(sub)
mdi.closeAllSubWindows.assert_called_once()
mdi.addSubWindow.assert_called_once_with(sub)
sub.showMaximized.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()