mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
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.
86 lines
2.2 KiB
Python
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
|