Files
codeql/misc/codegen/test/utils.py
Paolo Tranquilli 14d48e9d58 Add black pre-commit hook
This switched `codegen` from the `autopep8` formatting to the `black`
one, and applies it to `bulk_mad_generator.py` as well. We can enroll
more python scripts to it in the future.
2025-06-10 12:25:39 +02:00

86 lines
2.2 KiB
Python

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