def test_language_context() -> None: """ Verify that the LanguageContext objects works as required. """ context_w_no_target = LanguageContext(extension='.json') assert None is context_w_no_target.get_target_language() assert 'c' in context_w_no_target.get_supported_languages() assert 'cpp' in context_w_no_target.get_supported_languages() assert 'py' in context_w_no_target.get_supported_languages() assert context_w_no_target.get_id_filter() is not None assert 'if' == context_w_no_target.get_id_filter()('if') context_w_target = LanguageContext('c') assert context_w_target.get_target_language() is not None assert context_w_target.get_id_filter() is not None assert '_if' == context_w_target.get_id_filter()('if')
def test_language_context() -> None: """ Verify that the LanguageContext objects works as required. """ context_w_no_target = LanguageContext(extension='.json') assert None is context_w_no_target.get_target_language() assert 'c' in context_w_no_target.get_supported_languages() assert 'cpp' in context_w_no_target.get_supported_languages() assert 'py' in context_w_no_target.get_supported_languages() assert 'if' == context_w_no_target.filter_id_for_target('if', '') context_w_target = LanguageContext('c') assert context_w_target.get_target_language() is not None target_language = context_w_target.get_target_language() assert target_language is not None target_named_types = target_language.get_named_types() assert 'byte' in target_named_types
def _assert_language_config_value(target_language: typing.Union[typing.Optional[str], LanguageContext], key: str, expected_value: typing.Any, message: typing.Optional[str]) -> None: if isinstance(target_language, LanguageContext): lctx = target_language else: lctx = LanguageContext(target_language) language = lctx.get_target_language() if language is None: raise AssertionError('Unable to determine target language from provided arguments.') if expected_value != language.get_config_value(key): raise AssertionError(message)
def _make_filter_test_template(filter_or_list: typing.Union[typing.Callable, typing.List[typing.Callable]], body: str, expected: str, target_language_or_language_context: typing.Union[typing.Optional[str], LanguageContext], **globals: typing.Optional[typing.Dict[str, typing.Any]]) -> str: from nunavut.jinja import CodeGenEnvironment e = CodeGenEnvironment(loader=DictLoader({'test': body})) if globals is not None: e.globals.update(globals) if isinstance(target_language_or_language_context, LanguageContext): lctx = target_language_or_language_context else: lctx = LanguageContext(target_language_or_language_context) filters = (filter_or_list if isinstance(filter_or_list, list) else [filter_or_list]) for filter in filters: filter_name = filter.__name__[7:] if hasattr(filter, ENVIRONMENT_FILTER_ATTRIBUTE_NAME) and \ getattr(filter, ENVIRONMENT_FILTER_ATTRIBUTE_NAME): e.filters[filter_name] = functools.partial(filter, e) else: e.filters[filter_name] = filter if hasattr(filter, CONTEXT_FILTER_ATTRIBUTE_NAME) and getattr(filter, CONTEXT_FILTER_ATTRIBUTE_NAME): context = MagicMock() e.filters[filter_name] = functools.partial(filter, context) else: e.filters[filter_name] = filter if hasattr(filter, LANGUAGE_FILTER_ATTRIBUTE_NAME): language_name = getattr(filter, LANGUAGE_FILTER_ATTRIBUTE_NAME) e.filters[filter_name] = functools.partial(filter, lctx.get_language(language_name)) else: e.filters[filter_name] = filter target_language_resolved = lctx.get_target_language() if target_language_resolved is not None: e.globals.update(target_language_resolved.get_globals()) e.globals['options'].update(target_language_resolved.get_options()) rendered = str(e.get_template('test').render()) if expected != rendered: msg = 'Unexpected template output\n\texpected : {}\n\twas : {}'.format( expected.replace('\n', '\\n'), rendered.replace('\n', '\\n')) raise AssertionError(msg) return rendered