-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Expand file tree
/
Copy pathutils.py
More file actions
85 lines (62 loc) · 2.21 KB
/
utils.py
File metadata and controls
85 lines (62 loc) · 2.21 KB
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import pathlib
from unittest import mock
import pytest
from misc.codegen.lib import render, schema, paths
schema_dir = pathlib.Path("a", "dir")
schema_file = schema_dir / "schema.py"
dbscheme_file = pathlib.Path("another", "dir", "test.dbscheme")
def write(out, contents=""):
out.parent.mkdir(parents=True, exist_ok=True)
with open(out, "w") as out:
out.write(contents)
@pytest.fixture
def renderer():
return mock.Mock(spec=render.Renderer)
@pytest.fixture
def render_manager(renderer):
ret = mock.Mock(spec=render.RenderManager)
ret.__enter__ = mock.Mock(return_value=ret)
ret.__exit__ = mock.Mock(return_value=None)
ret.is_customized_stub.return_value = False
return ret
@pytest.fixture
def opts():
ret = mock.MagicMock()
ret.root_dir = paths.root_dir
return ret
@pytest.fixture(autouse=True)
def override_paths(tmp_path):
with mock.patch("misc.codegen.lib.paths.root_dir", tmp_path), mock.patch(
"misc.codegen.lib.paths.exe_file", tmp_path / "exe"
):
yield
@pytest.fixture
def input(opts, tmp_path):
opts.schema = tmp_path / schema_file
with mock.patch("misc.codegen.loaders.schemaloader.load_file") as load_mock:
load_mock.return_value = schema.Schema([])
yield load_mock.return_value
assert load_mock.mock_calls == [
mock.call(opts.schema),
], load_mock.mock_calls
@pytest.fixture
def dbscheme_input(opts, tmp_path):
opts.dbscheme = tmp_path / dbscheme_file
with mock.patch("misc.codegen.loaders.dbschemeloader.iterload") as load_mock:
load_mock.entities = []
load_mock.side_effect = lambda _: load_mock.entities
yield load_mock
assert load_mock.mock_calls == [
mock.call(opts.dbscheme),
], load_mock.mock_calls
def run_generation(generate, opts, renderer):
output = {}
renderer.render.side_effect = lambda data, out: output.__setitem__(out, data)
generate(opts, renderer)
return output
def run_managed_generation(generate, opts, renderer, render_manager):
output = {}
renderer.manage.side_effect = (render_manager,)
render_manager.render.side_effect = lambda data, out: output.__setitem__(out, data)
generate(opts, renderer)
return output