mirror of
https://github.com/bec-project/bec_widgets.git
synced 2025-07-14 03:31:50 +02:00
fix(plugins): fixes and tests for auto-gen plugins
This commit is contained in:
155
tests/unit_tests/test_generate_plugin.py
Normal file
155
tests/unit_tests/test_generate_plugin.py
Normal file
@ -0,0 +1,155 @@
|
||||
import importlib
|
||||
import inspect
|
||||
import os
|
||||
import sys
|
||||
|
||||
import pytest
|
||||
|
||||
from bec_widgets.utils.generate_designer_plugin import DesignerPluginGenerator
|
||||
|
||||
|
||||
def load_plugin(dir_path, content, plugin_name="MyWidget"):
|
||||
plugin_path = dir_path.mkdir("plugin").join("plugin.py")
|
||||
plugin_path.write(content)
|
||||
sys.path.append(str(dir_path))
|
||||
plugin = importlib.import_module("plugin.plugin")
|
||||
importlib.reload(plugin)
|
||||
yield getattr(plugin, plugin_name)
|
||||
sys.path.pop()
|
||||
|
||||
|
||||
@pytest.fixture(
|
||||
params=[
|
||||
"""
|
||||
from qtpy.QtWidgets import QWidget
|
||||
class MyWidget(QWidget):
|
||||
def __init__(self, parent=None):
|
||||
QWidget.__init__(self, parent)
|
||||
""",
|
||||
"""
|
||||
from qtpy.QtWidgets import QWidget
|
||||
class MyWidget(QWidget):
|
||||
def __init__(self, parent=None):
|
||||
QWidget.__init__(self, parent=parent)
|
||||
""",
|
||||
"""
|
||||
from qtpy.QtWidgets import QWidget
|
||||
class MyWidget(QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
""",
|
||||
"""
|
||||
from qtpy.QtWidgets import QWidget
|
||||
class MyWidget(QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent=parent)
|
||||
""",
|
||||
"""
|
||||
from qtpy.QtWidgets import QWidget
|
||||
class MyWidget(QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super(QWidget, self).__init__(parent)"""
|
||||
"""
|
||||
from qtpy.QtWidgets import QWidget
|
||||
class MyWidget(QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super(QWidget, self).__init__(parent=parent)
|
||||
""",
|
||||
]
|
||||
)
|
||||
def plugin_with_correct_parent(tmpdir, request):
|
||||
yield from load_plugin(tmpdir, request.param)
|
||||
|
||||
|
||||
@pytest.fixture(
|
||||
params=[
|
||||
"""
|
||||
from qtpy.QtWidgets import QWidget
|
||||
class MyWidget(QWidget):
|
||||
def __init__(self, parent=None):
|
||||
QWidget.__init__(self)
|
||||
""",
|
||||
"""
|
||||
from qtpy.QtWidgets import QWidget
|
||||
class MyWidget(QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__()
|
||||
""",
|
||||
"""
|
||||
from qtpy.QtWidgets import QWidget
|
||||
class MyWidget(QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super(QWidget, self).__init__()
|
||||
""",
|
||||
]
|
||||
)
|
||||
def plugin_with_missing_parent(tmpdir, request):
|
||||
yield from load_plugin(tmpdir, request.param)
|
||||
|
||||
|
||||
def test_generate_plugin(plugin_with_correct_parent):
|
||||
generator = DesignerPluginGenerator(plugin_with_correct_parent)
|
||||
generator.run()
|
||||
assert os.path.exists(f"{generator.info.base_path}/register_my_widget.py")
|
||||
assert os.path.exists(f"{generator.info.base_path}/my_widget_plugin.py")
|
||||
assert os.path.exists(f"{generator.info.base_path}/my_widget.pyproject")
|
||||
|
||||
|
||||
def test_generate_plugin_with_missing_parent(plugin_with_missing_parent):
|
||||
with pytest.raises(ValueError) as excinfo:
|
||||
generator = DesignerPluginGenerator(plugin_with_missing_parent)
|
||||
generator.run()
|
||||
assert "Widget class MyWidget must call the super constructor with parent." in str(
|
||||
excinfo.value
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def plugin_with_excluded_widget(tmpdir):
|
||||
content = """
|
||||
from qtpy.QtWidgets import QWidget
|
||||
class BECDock(QWidget):
|
||||
def __init__(self, parent=None):
|
||||
QWidget.__init__(self, parent)
|
||||
"""
|
||||
yield from load_plugin(tmpdir, content, plugin_name="BECDock")
|
||||
|
||||
|
||||
def test_generate_plugin_with_excluded_widget(plugin_with_excluded_widget, capsys):
|
||||
generator = DesignerPluginGenerator(plugin_with_excluded_widget)
|
||||
generator.run()
|
||||
captured = capsys.readouterr()
|
||||
|
||||
assert "Plugin BECDock is excluded from generation." in captured.out
|
||||
assert not os.path.exists(f"{generator.info.base_path}/register_bec_dock.py")
|
||||
assert not os.path.exists(f"{generator.info.base_path}/bec_dock_plugin.py")
|
||||
assert not os.path.exists(f"{generator.info.base_path}/bec_dock.pyproject")
|
||||
|
||||
|
||||
@pytest.fixture(
|
||||
params=[
|
||||
"""
|
||||
from qtpy.QtWidgets import QWidget
|
||||
class MyWidget(QWidget):
|
||||
def __init__(self):
|
||||
QWidget.__init__(self)
|
||||
""",
|
||||
"""
|
||||
from qtpy.QtWidgets import QWidget
|
||||
class MyWidget(QWidget):
|
||||
def __init__(self, config, parent=None):
|
||||
super().__init__()
|
||||
""",
|
||||
]
|
||||
)
|
||||
def plugin_with_no_parent_as_first_arg(tmpdir, request):
|
||||
yield from load_plugin(tmpdir, request.param)
|
||||
|
||||
|
||||
def test_generate_plugin_raises_exception_when_first_argument_is_not_parent(
|
||||
plugin_with_no_parent_as_first_arg,
|
||||
):
|
||||
with pytest.raises(ValueError) as excinfo:
|
||||
generator = DesignerPluginGenerator(plugin_with_no_parent_as_first_arg)
|
||||
generator.run()
|
||||
assert "Widget class MyWidget must have parent as the first argument." in str(excinfo.value)
|
Reference in New Issue
Block a user