def test_insert_module_code__verify_offsets(mocker): """ When: replacing ApiModule code Given: a script with an ApiModule import Then: verify the wrapper of the section line numbers are correct. """ mocker.patch.object(IntegrationScriptUnifier, '_get_api_module_code', return_value=DUMMY_MODULE) import_name = 'from MicrosoftApiModule import * # noqa: E402' before_api_import, after_api_import = DUMMY_SCRIPT.split(import_name, 1) module_name = 'MicrosoftApiModule' code = IntegrationScriptUnifier.insert_module_code(DUMMY_SCRIPT, import_name, module_name) # get only the generated ApiModule code code = code[len(before_api_import):-len(after_api_import)] # we expect the start wrapper will have a negative number so adding it to the regex search start_offset = re.search(rf"register_module_line\('{module_name}', 'start', __line__\(\), wrapper=-(\d+)\)\n", code) end_offset = re.search(rf"register_module_line\('{module_name}', 'end', __line__\(\), wrapper=(\d+)\)\n", code) assert start_offset # the number of lines before the register start match the wrapper value assert int(start_offset.group(1)) == len(code[:start_offset.span()[0]].splitlines()) assert end_offset # the number of lines after the register end match the wrapper value assert int(end_offset.group(1)) == len(code[end_offset.span()[1]:].splitlines())
def test_insert_module_code(mocker, import_name): mocker.patch.object(IntegrationScriptUnifier, '_get_api_module_code', return_value=DUMMY_MODULE) module_name = 'MicrosoftApiModule' module_code = f'\n### GENERATED CODE ###' \ f': {import_name}\n' \ f'# This code was inserted in place of an API module.\n' \ f"register_module_line('MicrosoftApiModule', 'start', __line__(), wrapper=-3)\n" \ f'{DUMMY_MODULE}\n' \ f"register_module_line('MicrosoftApiModule', 'end', __line__(), wrapper=1)\n" \ f'### END GENERATED CODE ###' new_code = DUMMY_SCRIPT.replace(import_name, module_code) code = IntegrationScriptUnifier.insert_module_code(DUMMY_SCRIPT, import_name, module_name) assert code == new_code