Beispiel #1
0
 def runTest(self):
     for line_filter_case in LINE_FILTER_CASES:
         for preserve_new_lines in [False, True]:
             for regex_case in failing_regex_validation_cases():
                 all_symbols = line_filter_case.value.symbols + regex_case.symbols
                 source = ReplaceRegexAbsStx.of_str(
                     regex_case.regex_string,
                     'arbitrary_replacement',
                     preserve_new_lines=preserve_new_lines,
                     lines_filter=line_filter_case.value.syntax,
                 )
                 # ACT & ASSERT #
                 integration_check.CHECKER__PARSE_FULL.check__abs_stx__layout__std_source_variants(
                     self,
                     source,
                     model_constructor.arbitrary(self),
                     arrangement_w_tcds(
                         symbols=SymbolContext.symbol_table_of_contexts(
                             all_symbols)),
                     MultiSourceExpectation(
                         symbol_references=line_filter_case.value.
                         references_assertion__followed_by(
                             regex_case.reference_assertions),
                         execution=ExecutionExpectation(
                             validation=regex_case.expectation),
                         primitive=prim_asrt__constant(
                             is_identity_transformer(False)),
                     ),
                     sub_test_identifiers={
                         'regex_case': regex_case.case_name,
                         'preserve_new_lines': preserve_new_lines,
                         'lines_filtering': line_filter_case.name,
                     })
Beispiel #2
0
    def runTest(self):
        # ARRANGE #
        arguments = names.IDENTITY_TRANSFORMER_NAME

        model_content_lines = ['the model contents line 1']

        # ACT & ASSERT #

        integration_check.CHECKER__PARSE_FULL.check__w_source_variants(
            self,
            Arguments(arguments),
            model_constructor.of_lines(self, model_content_lines),
            arrangement_w_tcds(),
            Expectation(
                ParseExpectation(
                    symbol_references=asrt.is_empty_sequence,
                ),
                ExecutionExpectation(
                    main_result=asrt_string_source.pre_post_freeze__matches_lines__identical(
                        asrt.equals(model_content_lines),
                        may_depend_on_external_resources=asrt.equals(False),
                    )
                ),
                prim_asrt__constant(is_identity_transformer(True)),
                adv=freeze_check.first_invoked_method_of_source_model__is_freeze,
            )
        )
Beispiel #3
0
 def runTest(self):
     # ARRANGE #
     for arguments in self.argument_cases():
         for may_depend_on_external_resources in [False, True]:
             with self.subTest(may_depend_on_external_resources=may_depend_on_external_resources,
                               arguments=repr(arguments)):
                 # ACT & ASSERT #
                 integration_check.CHECKER__PARSE_SIMPLE.check(
                     self,
                     remaining_source(arguments),
                     self.model(may_depend_on_external_resources),
                     arrangement_w_tcds(),
                     Expectation(
                         ParseExpectation(
                             symbol_references=asrt.is_empty_sequence
                         ),
                         ExecutionExpectation(
                             main_result=asrt_string_source.pre_post_freeze__matches_lines__any_frozen_ext_deps(
                                 self.expected_output_lines_for_model(),
                                 may_depend_on_external_resources=asrt.equals(may_depend_on_external_resources),
                             ),
                         ),
                         prim_asrt__constant(
                             asrt_string_transformer.is_identity_transformer(
                                 self.is_identity_transformer()
                             )
                         )
                     ),
                 )
def expectation_of_successful_execution(output_lines: List[str],
                                        may_depend_on_external_resources: bool,
                                        frozen_may_depend_on_external_resources: Assertion[bool],
                                        symbol_references: Assertion[Sequence[SymbolReference]],
                                        is_identity_transformer: bool = False,
                                        source: Assertion[ParseSource] = asrt.anything_goes(),
                                        adv: Callable[
                                            [AssertionResolvingEnvironment],
                                            Assertion[ApplicationEnvironmentDependentValue[StringTransformer]]
                                        ] = adv_asrt__any,
                                        ) -> StExpectation:
    return Expectation(
        ParseExpectation(
            source=source,
            symbol_references=symbol_references
        ),
        ExecutionExpectation(
            main_result=asrt_string_source.pre_post_freeze__matches_lines(
                asrt.equals(output_lines),
                may_depend_on_external_resources=asrt.equals(may_depend_on_external_resources),
                frozen_may_depend_on_external_resources=frozen_may_depend_on_external_resources,
            ),
        ),
        prim_asrt__constant(
            asrt_string_transformer.is_identity_transformer(is_identity_transformer)
        ),
        adv,
    )
Beispiel #5
0
    def runTest(self):
        # ARRANGE #

        py_file = File('stdin-to-upper.py',
                       _PGM_THAT_OUTPUTS_STDIN_IN_UPPER_CASE)

        py_file_rel_opt_conf = rel_opt.conf_rel_any(RelOptionType.REL_TMP)
        py_file_conf = py_file_rel_opt_conf.named_file_conf(py_file.name)

        program_symbol = ProgramSymbolContext.of_sdv(
            'PROGRAM_THAT_EXECUTES_PY_FILE',
            program_sdvs.interpret_py_source_file_that_must_exist(py_file_conf.path_sdv)
        )

        input_model_lines = [
            'the\n',
            'input\n',
            'model',
        ]
        expected_output_model_lines = list(map(str.upper, input_model_lines))

        for with_ignored_exit_code in [False, True]:
            with self.subTest(with_ignored_exit_code=with_ignored_exit_code):
                # ACT && ASSERT #

                integration_check.CHECKER__PARSE_FULL.check__w_source_variants_for_full_line_parser(
                    self,
                    args.syntax_for_run(
                        program_args.symbol_ref_command_elements(program_symbol.name),
                        ignore_exit_code=with_ignored_exit_code,
                    ),
                    model_constructor.of_lines(self, input_model_lines),
                    arrangement_w_tcds(
                        tcds_contents=py_file_rel_opt_conf.populator_for_relativity_option_root(
                            DirContents([py_file])
                        ),
                        symbols=program_symbol.symbol_table,
                    ),
                    MultiSourceExpectation(
                        symbol_references=program_symbol.references_assertion,
                        execution=ExecutionExpectation(
                            main_result=asrt_string_source.pre_post_freeze__matches_lines(
                                asrt.equals(expected_output_model_lines),
                                may_depend_on_external_resources=asrt.equals(True),
                                frozen_may_depend_on_external_resources=asrt.anything_goes(),
                            )
                        ),
                        primitive=prim_asrt__constant(
                            asrt_string_transformer.is_identity_transformer(False)
                        ),
                    ),
                )
Beispiel #6
0
    def runTest(self):
        # ARRANGE #
        program_symbol = ProgramSymbolContext.of_arbitrary_value(
            'PROGRAM_SYMBOL')
        executor_that_do_not_run_any_program = CommandExecutorThatJustReturnsConstant(
            0)

        for may_depend_on_external_resources in [False, True]:
            for with_ignored_exit_code in [False, True]:
                with self.subTest(
                        with_ignored_exit_code=with_ignored_exit_code,
                        may_depend_on_external_resources=
                        may_depend_on_external_resources):
                    # ACT && ASSERT #
                    pass
                integration_check.CHECKER__PARSE_SIMPLE.check(
                    self,
                    args.syntax_for_run(
                        program_args.symbol_ref_command_elements(
                            program_symbol.name),
                        ignore_exit_code=with_ignored_exit_code,
                    ).as_remaining_source,
                    model_constructor.empty(self,
                                            may_depend_on_external_resources=
                                            may_depend_on_external_resources),
                    arrangement_w_tcds(
                        symbols=program_symbol.symbol_table,
                        process_execution=ProcessExecutionArrangement(
                            os_services=os_services_access.new_for_cmd_exe(
                                executor_that_do_not_run_any_program)),
                    ),
                    Expectation(
                        ParseExpectation(symbol_references=program_symbol.
                                         references_assertion, ),
                        ExecutionExpectation(
                            main_result=asrt_string_source.
                            pre_post_freeze__matches_lines(
                                asrt.anything_goes(),
                                may_depend_on_external_resources=asrt.equals(
                                    True),
                                frozen_may_depend_on_external_resources=asrt.
                                anything_goes(),
                            )),
                        prim_asrt__constant(
                            asrt_string_transformer.is_identity_transformer(
                                False)),
                    ),
                )
Beispiel #7
0
def expectation_of_successful_execution__check_only_as_lines(
        output_lines: List[str],
        symbol_references: Assertion[Sequence[SymbolReference]],
        source: Assertion[ParseSource] = asrt.anything_goes(),
) -> StExpectation:
    return Expectation(
        ParseExpectation(
            source=source,
            symbol_references=symbol_references
        ),
        ExecutionExpectation(
            main_result=asrt_string_source.matches__lines__check_just_as_lines(output_lines),
        ),
        prim_asrt__constant(
            asrt_string_transformer.is_identity_transformer(False)
        )
    )
Beispiel #8
0
    def runTest(self):
        successful_transformer = StringTransformerSymbolContext.of_identity(
            'successful_transformer')
        for case in validation_cases.failing_validation_cases(
                'failing_transformer'):
            failing_symbol_context = case.value.symbol_context

            symbols = SymbolContext.symbol_table_of_contexts([
                failing_symbol_context,
                successful_transformer,
            ])

            order_cases = [
                NameAndValue(
                    '1st transformer fails',
                    [failing_symbol_context.name, successful_transformer.name
                     ]),
                NameAndValue(
                    '2nd transformer fails',
                    [successful_transformer.name, failing_symbol_context.name
                     ]),
            ]
            for order_case in order_cases:
                arguments = st_args.syntax_for_sequence_of_transformers(
                    order_case.value)
                expected_symbol_references = asrt.matches_sequence([
                    is_reference_to_string_transformer(symbol_name)
                    for symbol_name in order_case.value
                ])

                with self.subTest(validation_case=case.name,
                                  order_case=order_case.name):
                    integration_check.CHECKER__PARSE_FULL.check__w_source_variants(
                        self, Arguments(arguments),
                        model_constructor.of_lines(self, []),
                        arrangement_w_tcds(symbols=symbols),
                        Expectation(
                            ParseExpectation(
                                symbol_references=expected_symbol_references),
                            ExecutionExpectation(
                                validation=case.value.expectation, ),
                            prim_asrt__constant(
                                is_identity_transformer(False)),
                        ))
Beispiel #9
0
        def arguments_case(
            command_line_arguments: List[str],
        ) -> NExArr[PrimAndExeExpectation[StringTransformer, StringSource],
                    Arrangement]:
            arg_list_symbol = ListSymbolContext.of_constants(
                command_line_arg_list_symbol_name, command_line_arguments)

            symbols = [
                program_symbol,
                arg_list_symbol,
            ]

            expected_lines_on_stdout = asrt.matches_sequence(
                [asrt.equals(arg + '\n') for arg in command_line_arguments])

            return NExArr(
                'Arguments: ' + repr(command_line_arguments),
                PrimAndExeExpectation(
                    ExecutionExpectation(
                        main_result=asrt_string_source.
                        pre_post_freeze__matches_lines(
                            expected_lines_on_stdout,
                            may_depend_on_external_resources=asrt.equals(True),
                            frozen_may_depend_on_external_resources=asrt.
                            anything_goes(),
                        )),
                    prim_asrt__constant(
                        asrt_string_transformer.is_identity_transformer(
                            False)),
                ),
                arrangement_w_tcds(
                    symbols=SymbolContext.symbol_table_of_contexts(symbols),
                    tcds_contents=py_file_rel_opt_conf.
                    populator_for_relativity_option_root(DirContents([py_file
                                                                      ])),
                ),
            )
Beispiel #10
0
        # ARRANGE #
        model_contents = 'the contents of the model'
        test_setup = StdinCheckViaCopyToOutputFileTestSetup(
            ProcOutputFile.STDOUT)
        # ACT & ASSERT #
        integration_check.CHECKER__PARSE_FULL.check__abs_stx(
            self,
            RunProgramAbsStx(test_setup.program_that_copies_stdin_syntax(), ),
            model_constructor.of_str(self, model_contents),
            arrangement_w_tcds(symbols=SymbolContext.symbol_table_of_contexts(
                test_setup.symbols), ),
            Expectation(
                parse=ParseExpectation(
                    symbol_references=SymbolContext.
                    references_assertion_of_contexts(test_setup.symbols)),
                execution=ExecutionExpectation(
                    main_result=asrt_string_source.pre_post_freeze__identical(
                        asrt_contents.matches__str(asrt.equals(
                            model_contents)))),
                primitive=PRIMITIVE_IS_NOT_IDENTITY_TRANSFORMATION,
            ),
        )


EXECUTION_OUTPUT_IS_EMPTY = ExecutionExpectation(
    main_result=asrt_string_source.pre_post_freeze__identical(
        asrt_contents.matches__str(asrt.equals(''))))

PRIMITIVE_IS_NOT_IDENTITY_TRANSFORMATION = prim_asrt__constant(
    asrt_string_transformer.is_identity_transformer(False))
    def test_successful_parse_of_sequence(self):
        # ARRANGE #

        regex_str = 'the_regex'
        replacement_str = 'the_replacement'

        symbol = StringTransformerSymbolContext.of_primitive(
            'the_symbol_name',
            string_transformers.must_not_be_used()
        )

        replace_transformer_syntax = argument_syntax.syntax_for_replace_transformer(regex_str,
                                                                                    replacement_str)

        defined_name = 'defined_name'

        cases = [
            SourceCase('Expression on single line',
                       source=
                       remaining_source(
                           src2(ValueType.STRING_TRANSFORMER,
                                defined_name,
                                argument_syntax.syntax_for_sequence_of_transformers([
                                    symbol.name,
                                    replace_transformer_syntax,
                                ])),
                           following_lines=['following line'],
                       ),
                       source_assertion=asrt_source.is_at_beginning_of_line(2)
                       ),
            SourceCase('Expression on following line',
                       source=
                       remaining_source(
                           src2(ValueType.STRING_TRANSFORMER, defined_name, '{new_line} {transformer_argument}',
                                transformer_argument=argument_syntax.syntax_for_sequence_of_transformers([
                                    symbol.name,
                                    replace_transformer_syntax,
                                ])),
                           following_lines=['following line'],
                       ),
                       source_assertion=asrt_source.is_at_beginning_of_line(3)
                       ),
            SourceCase('1st expr on first line followed by operator, 2nd expr on next line',
                       source=
                       remaining_source(
                           src2(ValueType.STRING_TRANSFORMER, defined_name, '{the_symbol_name} {sequence_operator}',
                                the_symbol_name=symbol.name,
                                sequence_operator=SEQUENCE_OPERATOR_NAME),
                           following_lines=[replace_transformer_syntax],
                       ),
                       source_assertion=asrt_source.source_is_at_end
                       ),
            SourceCase('1st expr on first line followed by operator, 2nd expr on next line, non-exr on 3rd line',
                       source=
                       remaining_source(
                           src2(ValueType.STRING_TRANSFORMER, defined_name, '{the_symbol_name} {sequence_operator}',
                                the_symbol_name=symbol.name,
                                sequence_operator=SEQUENCE_OPERATOR_NAME),
                           following_lines=[replace_transformer_syntax,
                                            'following line'],
                       ),
                       source_assertion=asrt_source.is_at_beginning_of_line(3)
                       ),
        ]
        # EXPECTATION #

        expected_container = matches_container(
            asrt.equals(ValueType.STRING_TRANSFORMER),
            sdv=matches_sdv_of_string_transformer_constant(
                references=asrt.matches_sequence([
                    is_reference_to_string_transformer(symbol.name),
                ]),
                primitive_value=asrt_string_transformer.is_identity_transformer(False),
                symbols=symbol.symbol_table,
            )
        )

        for source_case in cases:
            with self.subTest(source_case.name):
                expectation = Expectation.phase_agnostic(
                    symbol_usages=asrt.matches_sequence([
                        asrt_sym_usage.matches_definition(asrt.equals(defined_name),
                                                          expected_container)
                    ]),
                    symbols_after_main=assert_symbol_table_is_singleton(
                        defined_name,
                        expected_container,
                    ),
                    source=source_case.source_assertion
                )

                # ACT & ASSERT #

                INSTRUCTION_CHECKER.check(self, source_case.source, Arrangement.phase_agnostic(), expectation)