plugin_test.py 1.92 KB
Newer Older
mashun1's avatar
veros  
mashun1 committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import pytest

from veros.plugins import load_plugin
from veros.routines import veros_routine
from veros.state import get_default_state
from veros.variables import Variable
from veros.settings import Setting


@pytest.fixture
def fake_plugin():
    class FakePlugin:
        pass

    def run_setup(state):
        plugin._setup_ran = True

    def run_main(state):
        plugin._main_ran = True

    plugin = FakePlugin()
    plugin.__name__ = "foobar"
    plugin._setup_ran = False
    plugin._main_ran = False
    plugin.__VEROS_INTERFACE__ = {
        "name": "foo",
        "setup_entrypoint": run_setup,
        "run_entrypoint": run_main,
        "settings": dict(mydimsetting=Setting(15, int, "bar")),
        "variables": dict(myvar=Variable("myvar", ("xt", "yt", "mydim"))),
        "dimensions": dict(mydim="mydimsetting"),
        "diagnostics": [],
    }
    yield plugin


def test_load_plugin(fake_plugin):
    plugin_interface = load_plugin(fake_plugin)
    assert plugin_interface.name == "foo"


def test_state_plugin(fake_plugin):
    plugin_interface = load_plugin(fake_plugin)
    state = get_default_state(plugin_interfaces=plugin_interface)
    assert "mydimsetting" in state.settings
    assert "mydim" in state.dimensions
    assert state.dimensions["mydim"] == state.settings.mydimsetting
    state.initialize_variables()
    assert "myvar" in state.variables
    assert state.variables.myvar.shape == (4, 4, state.settings.mydimsetting)


def test_run_plugin(fake_plugin):
    from veros.setups.acc_basic import ACCBasicSetup

    class FakeSetup(ACCBasicSetup):
        __veros_plugins__ = (fake_plugin,)

        @veros_routine
        def set_diagnostics(self, state):
            pass

    setup = FakeSetup(override=dict(dt_tracer=100, runlen=100))

    assert not fake_plugin._setup_ran
    setup.setup()
    assert fake_plugin._setup_ran

    assert not fake_plugin._main_ran
    setup.run()
    assert fake_plugin._main_ran