91 lines
3.1 KiB
Python
91 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Created the 17/10/2023
|
|
|
|
@author: Sebastien Weber
|
|
"""
|
|
import pytest
|
|
from pathlib import Path
|
|
import importlib
|
|
import pkgutil
|
|
|
|
|
|
MANDATORY_MOVE_METHODS = ['ini_attributes', 'get_actuator_value', 'close', 'commit_settings',
|
|
'ini_stage', 'move_abs', 'move_home', 'move_rel', 'stop_motion']
|
|
MANDATORY_VIEWER_METHODS = ['ini_attributes', 'grab_data', 'close', 'commit_settings',
|
|
'ini_detector', ]
|
|
|
|
|
|
def get_package_name():
|
|
here = Path(__file__).parent
|
|
package_name = here.parent.stem
|
|
return package_name
|
|
|
|
|
|
def get_move_plugins():
|
|
pkg_name = get_package_name()
|
|
move_mod = importlib.import_module(f'{pkg_name}.daq_move_plugins')
|
|
|
|
plugin_list = [mod for mod in [mod[1] for mod in
|
|
pkgutil.iter_modules([str(move_mod.path.parent)])]
|
|
if 'daq_move_' in mod]
|
|
return plugin_list, move_mod
|
|
|
|
|
|
def get_viewer_plugins(dim='0D'):
|
|
pkg_name = get_package_name()
|
|
viewer_mod = importlib.import_module(f'{pkg_name}.daq_viewer_plugins.plugins_{dim}')
|
|
|
|
plugin_list = [mod for mod in [mod[1] for mod in
|
|
pkgutil.iter_modules([str(viewer_mod.path.parent)])]
|
|
if f'daq_{dim}viewer_' in mod]
|
|
return plugin_list, viewer_mod
|
|
|
|
|
|
def test_package_name_ok():
|
|
assert 'pymodaq_plugins_' in get_package_name()[0:16]
|
|
|
|
|
|
def test_imports():
|
|
pkg_name = get_package_name()
|
|
mod = importlib.import_module(pkg_name)
|
|
assert hasattr(mod, 'config')
|
|
assert hasattr(mod, '__version__')
|
|
move_mod = importlib.import_module(f'{pkg_name}', 'daq_move_plugins')
|
|
importlib.import_module(f'{pkg_name}', 'daq_viewer_plugins')
|
|
importlib.import_module(f'{pkg_name}', 'extensions')
|
|
importlib.import_module(f'{pkg_name}', 'models')
|
|
importlib.import_module(f'{pkg_name}.daq_viewer_plugins', 'plugins_0D')
|
|
importlib.import_module(f'{pkg_name}.daq_viewer_plugins', 'plugins_1D')
|
|
importlib.import_module(f'{pkg_name}.daq_viewer_plugins', 'plugins_2D')
|
|
importlib.import_module(f'{pkg_name}.daq_viewer_plugins', 'plugins_ND')
|
|
|
|
|
|
def test_move_inst_plugins_name():
|
|
plugin_list, move_mod = get_move_plugins()
|
|
for plug in plugin_list:
|
|
name = plug.split('daq_move_')[1]
|
|
assert hasattr(getattr(move_mod, plug), f'DAQ_Move_{name}')
|
|
|
|
|
|
def test_move_has_mandatory_methods():
|
|
plugin_list, move_mod = get_move_plugins()
|
|
for plug in plugin_list:
|
|
name = plug.split('daq_move_')[1]
|
|
klass = getattr(getattr(move_mod, plug), f'DAQ_Move_{name}')
|
|
for meth in MANDATORY_MOVE_METHODS:
|
|
assert hasattr(klass, meth)
|
|
|
|
|
|
@pytest.mark.parametrize('dim', ('0D', '1D', '2D', 'ND'))
|
|
def test_viewer_has_mandatory_methods(dim):
|
|
plugin_list, mod = get_viewer_plugins(dim)
|
|
for plug in plugin_list:
|
|
name = plug.split(f'daq_{dim}viewer_')[1]
|
|
try:
|
|
module = importlib.import_module(f'.{plug}', mod.__package__)
|
|
except Exception:
|
|
break
|
|
klass = getattr(module, f'DAQ_{dim}Viewer_{name}')
|
|
for meth in MANDATORY_VIEWER_METHODS:
|
|
assert hasattr(klass, meth)
|