def test_get_process_raise(): class NotAProcess: pass with pytest.raises(NotAProcessClassError) as excinfo: get_process_cls(NotAProcess) assert "is not a process-decorated class" in str(excinfo.value) with pytest.raises(NotAProcessClassError) as excinfo: get_process_obj(NotAProcess) assert "is not a process-decorated class" in str(excinfo.value)
def test_process_properties_docstrings(in_var_details): # order of lines in string is not ensured (printed from a dictionary) to_lines = lambda details_str: sorted(details_str.split("\n")) _ExampleProcess = get_process_cls(ExampleProcess) assert to_lines(_ExampleProcess.in_var.__doc__) == to_lines(in_var_details)
def test_process_properties_readonly(cls, var_name, prop_is_read_only): p_cls = get_process_cls(cls) if prop_is_read_only: assert getattr(p_cls, var_name).fset is None else: assert getattr(p_cls, var_name).fset is not None
def test_get_target_variable(var_name, expected_cls, expected_var_name): _ExampleProcess = get_process_cls(ExampleProcess) expected_p_cls = get_process_cls(expected_cls) var = variables_dict(_ExampleProcess)[var_name] expected_var = variables_dict(expected_p_cls)[expected_var_name] actual_cls, actual_var = get_target_variable(var) if expected_p_cls is _ExampleProcess: assert actual_cls is None else: actual_p_cls = get_process_cls(actual_cls) assert actual_p_cls is expected_p_cls assert actual_var is expected_var
def test_get_process_raise(): class NotAProcess: pass with pytest.raises(NotAProcessClassError, match=".*is not a process-decorated class."): get_process_cls(NotAProcess) @xs.process class A: pass class B(A): pass with pytest.raises(NotAProcessClassError, match=".*inherits.*not itself process-decorated.*"): get_process_cls(B)
def test_process_inheritance(self, model): @xs.process class InheritedProfile(Profile): pass new_model = model.update_processes({"profile": InheritedProfile}) assert type(new_model["profile"]) is get_process_cls(InheritedProfile) assert isinstance(new_model["profile"], Profile) with pytest.raises(ValueError, match=r".*multiple processes.*"): model.update_processes({"profile2": InheritedProfile})
def test_has_method(): _ExampleProcess = get_process_cls(ExampleProcess) assert utils.has_method(_ExampleProcess(), "compute_od_var") assert not utils.has_method(_ExampleProcess(), "invalid_meth")
def test_get_process_obj(example_process_obj): p_cls = get_process_cls(ExampleProcess) assert type(get_process_obj(ExampleProcess)) is p_cls # get_process_obj returns a new instance assert get_process_obj(example_process_obj) is not example_process_obj
def test_get_process_cls(example_process_obj): p_cls = get_process_cls(ExampleProcess) assert get_process_cls(example_process_obj) is p_cls