コード例 #1
0
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)
コード例 #2
0
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)
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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)
コード例 #6
0
    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})
コード例 #7
0
ファイル: test_utils.py プロジェクト: rlange2/xarray-simlab
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")
コード例 #8
0
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
コード例 #9
0
def test_get_process_cls(example_process_obj):
    p_cls = get_process_cls(ExampleProcess)
    assert get_process_cls(example_process_obj) is p_cls