コード例 #1
0
ファイル: parse.py プロジェクト: emilkarlen/exactly
 def __init__(self, phase_is_after_act: bool):
     self._phase_is_after_act = phase_is_after_act
     self._name_parser = parse_string.StringFromTokensParser(
         parse_string.Configuration(defs.VAR_NAME_ELEMENT,
                                    reference_restrictions.is_string__all_indirect_refs_are_strings())
     )
     self._value_parser = parse_str_src.default_parser_for(phase_is_after_act=self._phase_is_after_act)
     self._unset_keyword_matcher = token_matchers.is_unquoted_and_equals(defs.UNSET_IDENTIFIER)
コード例 #2
0
    def test_fail_WHEN_restriction_is_of_other_type__multi(self):
        # ARRANGE #
        assertion_to_check = sut.is_reference_restrictions__value_type(
            [ValueType.PATH, ValueType.PROGRAM])

        restriction = reference_restrictions.is_string__all_indirect_refs_are_strings(
        )
        # ACT & ASSERT #
        assert_that_assertion_fails(assertion_to_check, restriction)
コード例 #3
0
 def __init__(
     self,
     name: str,
     value_int: int,
     value_str: str,
 ):
     self.name = name
     self.value_int = value_int
     self.value_str = value_str
     self.ref_syntax = symbol_reference_syntax_for_name(name)
     self.symbol_reference = SymbolReference(
         name,
         reference_restrictions.is_string__all_indirect_refs_are_strings())
コード例 #4
0
    def test_symbols_from_contents_assertion_SHOULD_be_reported(self):
        # ARRANGE #

        operand_sym_ref = SymbolReference('operand_symbol_name',
                                          is_string__all_indirect_refs_are_strings())

        condition_str = '{operator} {symbol_reference}'.format(
            operator=comparators.EQ.name,
            symbol_reference=symbol_reference_syntax_for_name(operand_sym_ref.name)
        )
        arguments_constructor = args.complete_arguments_constructor(
            FileQuantificationAssertionVariant(
                Quantifier.ALL,
                file_contents_arg2(sm_arg.NumLines(condition_str))))

        argument = arguments_constructor.apply(
            expectation_type_config__non_is_success(ExpectationType.NEGATIVE)
        )

        source = remaining_source(argument)

        # ACT #

        matcher_sdv = sut.parsers().full.parse(source)

        assert isinstance(matcher_sdv, MatcherSdv)

        actual_symbol_references = matcher_sdv.references

        # ASSERT #

        expected_symbol_references = [
            operand_sym_ref,
        ]
        assertion = equals_symbol_references__w_str_rendering(expected_symbol_references)

        assertion.apply_without_message(self, actual_symbol_references)
コード例 #5
0
            AccumulatedComponents.empty(),
        )


class _ParseAsCommand(ParserFromTokenParserBase[CommandSdv]):
    def __init__(self):
        super().__init__(consume_last_line_if_is_at_eol_after_parse=False)
        self._arguments_parser = parse_arguments.parser()

    def parse_from_token_parser(self, parser: TokenParser) -> CommandSdv:
        program_name = parse_string.parse_string_from_token_parser(
            parser, _PARSE_NAME_CONF)
        arguments = self._arguments_parser.parse_from_token_parser(parser)
        return CommandSdv(CommandDriverSdvForSystemProgram(program_name),
                          arguments)


_PROGRAM_NAME_STRING_REFERENCES_RESTRICTION = is_string__all_indirect_refs_are_strings(
    text_docs.single_pre_formatted_line_object(
        str_constructor.FormatMap(
            'A program name must be defined in terms of {string_type}.',
            {
                'string_type':
                define_symbol.TYPE_W_STR_RENDERING_INFO_DICT[
                    WithStrRenderingType.STRING].identifier
            },
        )))

_PARSE_NAME_CONF = parse_string.Configuration(
    'NAME', _PROGRAM_NAME_STRING_REFERENCES_RESTRICTION)
コード例 #6
0
from exactly_lib.type_val_prims.files_source.files_source import FilesSource
from exactly_lib.util.description_tree import details
from exactly_lib.util.description_tree.renderer import DetailsRenderer
from exactly_lib.util.description_tree.tree import Detail
from exactly_lib.util.render import combinators as rend_comb
from exactly_lib.util.str_ import str_constructor
from exactly_lib.util.symbol_table import SymbolTable
from .. import syntax
from ..file_maker import FileMakerAdv, FileMakerDdv, FileMakerSdv, FileMaker

FILE_NAME_STRING_REFERENCES_RESTRICTION = reference_restrictions.is_string__all_indirect_refs_are_strings(
    text_docs.single_pre_formatted_line_object(
        str_constructor.FormatMap(
            'A {file_name} must be defined in terms of {string_type}.',
            {
                'file_name': syntax.FILE_NAME.name,
                'string_type': syntax_elements.STRING_SYNTAX_ELEMENT.singular_name
            },
        )
    )
)


class FileSpecification(WithDetailsDescription):
    def __init__(self,
                 file_name: str,
                 file_maker: FileMaker,
                 ):
        self.name = file_name
        self.maker = file_maker
コード例 #7
0
ファイル: parse.py プロジェクト: emilkarlen/exactly

_ARGUMENTS__LINE_NUMS = [
    a.Single(a.Multiplicity.MANDATORY, names.LINE_NUMBERS_FILTER_OPTION),
    a.Single(a.Multiplicity.ONE_OR_MORE, a.Named(names.RANGE_EXPR_SED_NAME))
]

_MATCHER_ARGUMENT = a.Named('MATCHER')

_RANGE_LIMIT_SEPARATOR = ':'

_RANGE_EXPR_REFERENCE_RESTRICTIONS = is_string__all_indirect_refs_are_strings(
    text_docs.single_pre_formatted_line_object(
        str_constructor.FormatMap(
            'A {RANGE} must be made up of just {string_type} values.', {
                'RANGE':
                names.RANGE_EXPR_SED_NAME,
                'string_type':
                help_texts.ANY_TYPE_INFO_DICT[ValueType.STRING].identifier
            })))


class SyntaxDescription(
        grammar.PrimitiveDescriptionWithNameAsInitialSyntaxToken):
    def __init__(self):
        self._tp = TextParser({
            'MATCHER':
            _MATCHER_ARGUMENT.name,
            '_LINE_MATCHER_':
            syntax_elements.LINE_MATCHER_SYNTAX_ELEMENT.singular_name,
            'FIRST_LINE_NUMBER':
コード例 #8
0
ファイル: parse_integer.py プロジェクト: emilkarlen/exactly
    def parse(self, token_parser: TokenParser) -> IntegerSdv:
        string_sdv = self._string_parser.parse(token_parser)
        return integer_sdv.IntegerSdv(string_sdv,
                                      self._custom_integer_restriction)


def validator_for_non_negative(actual: int) -> Optional[TextRenderer]:
    if actual < 0:
        return expected_found.unexpected_lines(
            _NON_NEGATIVE_INTEGER_ARGUMENT_DESCRIPTION, str(actual))
    return None


_NON_NEGATIVE_INTEGER_ARGUMENT_DESCRIPTION = 'An integer >= 0'

_REFERENCE_RESTRICTIONS = is_string__all_indirect_refs_are_strings(
    text_docs.single_pre_formatted_line_object(
        str_constructor.FormatMap(
            'The {INTEGER} argument must be made up of just {string_type} values.',
            {
                'INTEGER':
                syntax_elements.INTEGER_SYNTAX_ELEMENT.argument.name,
                'string_type':
                help_texts.ANY_TYPE_INFO_DICT[ValueType.STRING].identifier
            })))

_STRING_PARSER_CONFIGURATION = parse_string.Configuration(
    syntax_elements.INTEGER_SYNTAX_ELEMENT.singular_name,
    _REFERENCE_RESTRICTIONS,
)
コード例 #9
0
from exactly_lib.symbol.sdv_structure import SymbolUsage, SymbolReference
from exactly_lib.type_val_deps.sym_ref.w_str_rend_restrictions.reference_restrictions import \
    is_string__all_indirect_refs_are_strings
from exactly_lib_test.symbol.test_resources import symbol_usage_assertions as asrt_sym_usage
from exactly_lib_test.test_resources.value_assertions import value_assertion as asrt
from exactly_lib_test.test_resources.value_assertions.value_assertion import Assertion
from exactly_lib_test.type_val_deps.test_resources.w_str_rend import data_restrictions_assertions as asrt_rest

IS_REFERENCE__STRING__W_ALL_INDIRECT_REFS_ARE_STRINGS = (
    asrt_rest.equals__w_str_rendering(
        is_string__all_indirect_refs_are_strings()))


def is_sym_ref_to_string__w_all_indirect_refs_are_strings__usage(
        name_of_symbol: str) -> Assertion[SymbolUsage]:
    return asrt_sym_usage.matches_reference(
        asrt.equals(name_of_symbol),
        IS_REFERENCE__STRING__W_ALL_INDIRECT_REFS_ARE_STRINGS)


def is_sym_ref_to_string__w_all_indirect_refs_are_strings(
    name_of_symbol: str, ) -> Assertion[SymbolReference]:
    return asrt_sym_usage.matches_reference__ref(
        asrt.equals(name_of_symbol),
        IS_REFERENCE__STRING__W_ALL_INDIRECT_REFS_ARE_STRINGS)