238 lines
7.3 KiB
Python
238 lines
7.3 KiB
Python
# import pytest
|
|
import sys
|
|
# from parameterized import parameterized
|
|
from unittest import mock
|
|
|
|
from PyQt5.QtTest import QSignalSpy
|
|
from PyQt5.QtWidgets import QApplication, QAction, QListWidget
|
|
|
|
from grum.cli import main
|
|
from grum.dictlist.dictlistitem import DictListItem
|
|
from grum.dictlist import DictList
|
|
from grum import ctrl_c, theme, assets
|
|
from grum.mainwin import MainWindow
|
|
from grum.mdi import MDIArea, MDISubMultiPlot, MDISubPlot
|
|
from grum.menus import BarMenu
|
|
from grum.menus.rclickmenu import RClickMenu
|
|
from grum.plotdesc import PlotDescription
|
|
from grum.rpc import RPCServerThread
|
|
|
|
|
|
class TestMainWin:
|
|
|
|
def setup_method(self):
|
|
print("setup")
|
|
self.app = QApplication(sys.argv)
|
|
theme.apply(self.app)
|
|
# ctrl_c.setup(self.app)
|
|
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_defaults(self):
|
|
mw = self.mw
|
|
|
|
assert mw.windowTitle() == "grum"
|
|
# assert mw.windowIcon() == assets.icon()
|
|
assert isinstance(mw.lst, DictList)
|
|
|
|
for key in mw.lst.lst.items:
|
|
assert isinstance(mw.lst.lst.get(key), DictListItem)
|
|
assert isinstance(mw.lst.lst.get(key).value, PlotDescription)
|
|
|
|
assert isinstance(mw.lst.menu, RClickMenu)
|
|
assert isinstance(mw.menu_settings, BarMenu)
|
|
|
|
assert isinstance(mw.menu_settings.checkboxes["Open new plots"], QAction)
|
|
|
|
assert isinstance(mw.mdi, MDIArea)
|
|
|
|
|
|
# @parameterized.expand([["Dotted line", "r"], ["Line", "r"], ["Dots", None]])
|
|
def test_new_plot(self):
|
|
mw = self.mw
|
|
name = "plot_name"
|
|
title = "plot_title"
|
|
xlabel = "xlabel"
|
|
ylabel = "ylabel"
|
|
cfg = {"title": title, "xlabel": xlabel, "ylabel": ylabel}
|
|
spy_sig_make_new_plot = QSignalSpy(mw.sig_make_new_plot)
|
|
|
|
mw.new_plot(name, cfg=cfg)
|
|
|
|
assert name in mw.lst.lst.items.keys()
|
|
assert isinstance(mw.lst.lst.get(name).value, PlotDescription)
|
|
assert mw.lst.lst.get(name).value.title == title
|
|
assert mw.lst.lst.get(name).value.xlabel == xlabel
|
|
assert mw.lst.lst.get(name).value.ylabel == ylabel
|
|
|
|
assert mw.menu_settings.checkboxes["Open new plots"].isChecked()
|
|
assert len(spy_sig_make_new_plot) == 1 # assert called once
|
|
assert spy_sig_make_new_plot[0][0] == name # assert called with name
|
|
assert isinstance(spy_sig_make_new_plot[0][1], PlotDescription)
|
|
|
|
mw.menu_settings.checkboxes["Open new plots"].setChecked(False)
|
|
assert mw.menu_settings.checkboxes["Open new plots"].isChecked() == False
|
|
spy_sig_make_new_plot = QSignalSpy(mw.sig_make_new_plot)
|
|
|
|
mw.new_plot("new_name", cfg)
|
|
|
|
assert len(spy_sig_make_new_plot) == 0 # assert not called
|
|
|
|
mw.menu_settings.checkboxes["Open new plots"].setChecked(True)
|
|
assert mw.menu_settings.checkboxes["Open new plots"].isChecked() == True
|
|
spy_sig_make_new_plot = QSignalSpy(mw.sig_make_new_plot)
|
|
new_name_item = mw.lst.lst.get("new_name")
|
|
sub = MDISubPlot("new_name", new_name_item.value)
|
|
mw.mdi.add(sub)
|
|
|
|
mw.new_plot("new_name", cfg)
|
|
|
|
assert len(spy_sig_make_new_plot) == 0 # assert not called
|
|
|
|
|
|
def test_append_data(self):
|
|
mw = self.mw
|
|
sine_item = mw.lst.lst.get("sine")
|
|
sine_item.set_alarm = mock.MagicMock()
|
|
sine_item.value.append = mock.MagicMock()
|
|
|
|
point = (1, 2)
|
|
|
|
mw.append_data("sine", point)
|
|
sine_item.value.append.assert_called_once_with(point)
|
|
sine_item.set_alarm.assert_called_once_with(True)
|
|
|
|
sub = MDISubPlot("sine", sine_item.value)
|
|
mw.mdi.add(sub)
|
|
sub.plots["sine"].setData = mock.MagicMock()
|
|
|
|
mw.append_data("sine", point)
|
|
sub.plots["sine"].setData.assert_called_once_with(*sine_item.value.data)
|
|
print(sine_item.set_alarm.call_args)
|
|
assert sine_item.set_alarm.call_args[0][0] == False
|
|
|
|
|
|
def test_on_make_new_plot(self):
|
|
mw = self.mw
|
|
|
|
mw.make_subwin = mock.MagicMock()
|
|
|
|
args = (1, 2, "name")
|
|
kwargs = {"title": "plot_title"}
|
|
|
|
mw.on_make_new_plot(args, kwargs)
|
|
|
|
mw.make_subwin.assert_called_once_with(MDISubPlot, args, kwargs)
|
|
|
|
|
|
def test_on_dclick_list_item(self):
|
|
|
|
mw = self.mw
|
|
mw.plot_single_item = mock.MagicMock()
|
|
item = mw.lst.lst.get("sine")
|
|
|
|
mw.on_dclick_list_item(item)
|
|
|
|
mw.plot_single_item.assert_called_once_with(item)
|
|
|
|
|
|
def test_on_plot_selected(self):
|
|
mw = self.mw
|
|
sine_item = mw.lst.lst.get("sine")
|
|
cosine_item = mw.lst.lst.get("cosine")
|
|
mw.lst.setCurrentItem(sine_item)
|
|
assert mw.lst.selectedItems()
|
|
mw.plot_single_item = mock.MagicMock()
|
|
|
|
mw.on_plot_selected()
|
|
mw.plot_single_item.assert_called_once_with(sine_item)
|
|
|
|
mw.lst.setSelectionMode(QListWidget.MultiSelection)
|
|
sine_item.setSelected(True)
|
|
cosine_item.setSelected(True)
|
|
|
|
assert len(mw.lst.selectedItems()) == 2
|
|
|
|
mw.plot_multiple_items = mock.MagicMock()
|
|
mw.on_plot_selected()
|
|
mw.plot_multiple_items.assert_called_once_with([sine_item, cosine_item])
|
|
|
|
|
|
def test_plot_single_item(self):
|
|
mw = self.mw
|
|
sine_item = mw.lst.lst.get("sine")
|
|
sine_item.set_alarm = mock.MagicMock()
|
|
mw.activate_or_make_subwin = mock.MagicMock()
|
|
|
|
mw.plot_single_item(sine_item)
|
|
|
|
sine_item.set_alarm.assert_called_once_with(False)
|
|
mw.activate_or_make_subwin.assert_called_once_with(
|
|
MDISubPlot, sine_item.key, sine_item.value
|
|
)
|
|
|
|
|
|
def test_plot_multiple_items(self):
|
|
mw = self.mw
|
|
sine_item = mw.lst.lst.get("sine")
|
|
cosine_item = mw.lst.lst.get("cosine")
|
|
names = ["sine", "cosine"]
|
|
name = " | ".join(names)
|
|
items = [sine_item, cosine_item]
|
|
descs = {"sine": sine_item.value, "cosine": cosine_item.value}
|
|
|
|
mw.activate_or_make_subwin = mock.MagicMock()
|
|
|
|
mw.plot_multiple_items(items)
|
|
|
|
mw.activate_or_make_subwin.assert_called_once_with(MDISubMultiPlot, name, descs)
|
|
|
|
|
|
def test_activate_or_make_subwin(self):
|
|
mw = self.mw
|
|
sine_item = mw.lst.lst.get("sine")
|
|
sub = MDISubPlot("sine", sine_item.value)
|
|
mw.mdi.add(sub)
|
|
|
|
cosine_item = mw.lst.get("cosine")
|
|
|
|
mw.mdi.setActiveSubWindow = mock.MagicMock()
|
|
assert mw.mdi.findSubWindow("sine")
|
|
|
|
mw.activate_or_make_subwin(MDISubPlot, sine_item.key, sine_item.value)
|
|
|
|
mw.mdi.setActiveSubWindow.assert_called_once_with(sub)
|
|
|
|
mw.make_subwin = mock.MagicMock()
|
|
mw.activate_or_make_subwin(MDISubPlot, cosine_item.key, cosine_item.value)
|
|
mw.make_subwin.assert_called_once_with(
|
|
MDISubPlot, cosine_item.key, cosine_item.value
|
|
)
|
|
|
|
|
|
def test_make_subwin(self):
|
|
|
|
mw = self.mw
|
|
cosine_item = mw.lst.get("cosine")
|
|
|
|
mw.mdi.add = mock.MagicMock()
|
|
# sub = MDISubPlot(cosine_item.key, cosine_item.value)
|
|
|
|
mw.make_subwin(MDISubPlot, cosine_item.key, cosine_item.value)
|
|
|
|
assert isinstance(mw.mdi.add.call_args[0][0], MDISubPlot)
|
|
# mw.mdi.add.assert_called_once_with(sub)
|
|
|
|
|
|
|