Exemplo n.º 1
0
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')
Exemplo n.º 2
0
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
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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