コード例 #1
0
    def run_test(self):
        def resolve_validator_that_fails_pre_sds(
                symbols: SymbolTable) -> DdvValidator:
            return ConstantDdvValidator.of_pre_sds(
                asrt_text_doc.new_single_string_text_for_test('err msg'))

        referenced_system_program_sdv_w_invalid_arguments = program_sdvs.system_program(
            string_sdvs.str_constant('valid-system-program'),
            ArgumentsSdv(list_sdvs.from_str_constant('the arg'),
                         [resolve_validator_that_fails_pre_sds]))

        valid_program_symbol = ProgramSymbolContext.of_sdv(
            'VALID_PROGRAM', referenced_system_program_sdv_w_invalid_arguments)

        argument_syntax = ArgumentOfRichStringAbsStx.of_str('valid-arg')

        reference_and_additional_invalid_argument = self.source_to_parse(
            valid_program_symbol.name,
            [argument_syntax],
        )
        # ACT & ASSERT #
        self.integration_checker(
        ).check__abs_stx__layouts__source_variants__wo_input(
            self.put,
            equivalent_source_variants__for_consume_until_end_of_last_line__s__nsc,
            reference_and_additional_invalid_argument,
            arrangement_w_tcds(symbols=valid_program_symbol.symbol_table, ),
            MultiSourceExpectation.of_const(
                symbol_references=valid_program_symbol.references_assertion,
                primitive=asrt.anything_goes(),
                execution=ExecutionExpectation(
                    validation=validation.ValidationAssertions.
                    pre_sds_fails__w_any_msg(), )),
        )
コード例 #2
0
    def run_test(self):
        relativity_conf = relativity_options.conf_rel_any(
            self._missing_file_relativity)

        referenced_program_arguments = [
            'valid arg 1 of referenced', 'valid arg 2 of referenced'
        ]
        referenced_system_program_sdv = program_sdvs.system_program(
            string_sdvs.str_constant('valid-system-program'),
            ArgumentsSdv.new_without_validation(
                list_sdvs.from_str_constants(referenced_program_arguments)))

        valid_program_symbol = ProgramSymbolContext.of_sdv(
            'VALID_PROGRAM', referenced_system_program_sdv)

        invalid_argument_syntax = ArgumentOfExistingPathAbsStx(
            relativity_conf.path_abs_stx_of_name('non-existing-file'))
        reference_and_additional_invalid_argument = self.source_to_parse(
            valid_program_symbol.name,
            [invalid_argument_syntax],
        )
        # ACT & ASSERT #
        self.integration_checker(
        ).check__abs_stx__layouts__source_variants__wo_input(
            self.put,
            equivalent_source_variants__for_consume_until_end_of_last_line__s__nsc,
            reference_and_additional_invalid_argument,
            arrangement_w_tcds(symbols=valid_program_symbol.symbol_table, ),
            MultiSourceExpectation.of_const(
                symbol_references=valid_program_symbol.references_assertion,
                primitive=asrt.anything_goes(),
                execution=ExecutionExpectation(
                    validation=FAILING_VALIDATION_ASSERTION_FOR_PARTITION[
                        relativity_conf.directory_structure_partition], )),
        )
コード例 #3
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,
                     })
コード例 #4
0
ファイル: stdin.py プロジェクト: emilkarlen/exactly
    def test_stdin_only_as_source_argument(self):
        # ARRANGE #
        for pgm_and_args_case in pgm_and_args_cases.cases_w_and_wo_argument_list__including_program_reference(
        ):
            for validation_case in validation_cases.failing_validation_cases():
                program_w_stdin = FullProgramAbsStx(
                    pgm_and_args_case.pgm_and_args,
                    stdin=validation_case.value.syntax,
                )

                symbols = list(pgm_and_args_case.symbols) + [
                    validation_case.value.symbol_context
                ]

                # ACT & ASSERT #
                CHECKER_WO_EXECUTION.check__abs_stx__layouts__source_variants__wo_input(
                    self,
                    equivalent_source_variants__for_expr_parse__s__nsc,
                    program_w_stdin,
                    pgm_and_args_case.mk_arrangement(
                        SymbolContext.symbol_table_of_contexts(symbols)),
                    MultiSourceExpectation.of_const(
                        symbol_references=SymbolContext.
                        references_assertion_of_contexts(symbols),
                        execution=ExecutionExpectation(
                            validation=validation_case.value.assertion, ),
                        primitive=asrt.anything_goes(),
                    ),
                    sub_test_identifiers={
                        'command': pgm_and_args_case.name,
                        'validation': validation_case.name
                    },
                )
コード例 #5
0
ファイル: stdin.py プロジェクト: emilkarlen/exactly
    def test_stdin_is_contents_of_string_source_WHEN_program_defines_single_stdin(
            self):
        # ARRANGE #
        test_setup = SingleStdinOfProgramTestSetup(self, exit_code=0)

        for output_file in ProcOutputFile:
            for pgm_and_args_case in pgm_and_args_cases.cases_w_and_wo_argument_list__including_program_reference(
            ):
                for ignore_exit_code in [False, True]:
                    with self.subTest(output_file=output_file,
                                      program=pgm_and_args_case.name,
                                      ignore_exit_code=ignore_exit_code):
                        # ACT & ASSERT #
                        CHECKER.check__abs_stx__layouts__source_variants__wo_input(
                            self,
                            equivalent_source_variants__for_expr_parse__s__nsc,
                            StringSourceOfProgramAbsStx(
                                output_file,
                                test_setup.program_w_stdin_syntax(
                                    pgm_and_args_case.pgm_and_args),
                                ignore_exit_code,
                            ),
                            arrangement_w_tcds(
                                symbols=pgm_and_args_case.symbol_table,
                                process_execution=test_setup.
                                proc_exe_env__w_stdin_check,
                                tcds_contents=pgm_and_args_case.tcds,
                            ),
                            MultiSourceExpectation.of_prim__const(
                                symbol_references=pgm_and_args_case.
                                references_assertion,
                                primitive=IS_EMPTY_STRING_SOURCE,
                            ),
                        )
コード例 #6
0
 def test_transformer_component(self):
     checker = integration_check.checker__w_arbitrary_file_relativities()
     for validation_case in failing_validation_cases():
         transformer_symbol = validation_case.value.symbol_context
         program_syntax = program_abs_stx.FullProgramAbsStx(
             program_abs_stx.ProgramOfSystemCommandLineAbsStx.of_str(
                 'a-system-command'),
             transformation=transformer_symbol.abstract_syntax,
         )
         string_source_syntax = string_source_abs_stx.StringSourceOfProgramAbsStx(
             ProcOutputFile.STDOUT,
             program_syntax,
             ignore_exit_code=False,
         )
         with self.subTest(validation_case.name):
             checker.check__abs_stx__layouts__source_variants__wo_input(
                 self, equivalent_source_variants__for_expr_parse__s__nsc,
                 OptionallyOnNewLine(string_source_syntax),
                 arrangement_wo_tcds(
                     symbols=transformer_symbol.symbol_table),
                 MultiSourceExpectation(
                     symbol_references=transformer_symbol.
                     references_assertion,
                     execution=ExecutionExpectation(
                         validation=validation_case.value.expectation)))
コード例 #7
0
ファイル: stdin.py プロジェクト: emilkarlen/exactly
 def test_stdin_is_concatenation_of_string_sources_WHEN_program_defines_multiple_stdin(
         self):
     # ARRANGE #
     test_setup = MultipleStdinOfProgramTestSetup(self, exit_code=0)
     # ACT & ASSERT #
     for output_file in ProcOutputFile:
         for ignore_exit_code in [False, True]:
             with self.subTest(output_file=output_file,
                               ignore_exit_code=ignore_exit_code):
                 CHECKER.check__abs_stx__layouts__source_variants__wo_input(
                     self,
                     equivalent_source_variants__for_expr_parse__s__nsc,
                     StringSourceOfProgramAbsStx(
                         output_file,
                         test_setup.program_w_stdin_syntax,
                         ignore_exit_code,
                     ),
                     arrangement_w_tcds(
                         symbols=test_setup.program_symbol.symbol_table,
                         process_execution=test_setup.
                         proc_exe_env__w_stdin_check,
                     ),
                     MultiSourceExpectation.of_prim__const(
                         symbol_references=test_setup.program_symbol.
                         references_assertion,
                         primitive=IS_EMPTY_STRING_SOURCE,
                     ),
                 )
コード例 #8
0
    def test_with_reference_to_existing_file(self):
        referenced_file = 'referenced-file.txt'

        relativity_cases = [
            relativity_options.conf_rel_hds(RelHdsOptionType.REL_HDS_CASE),
            relativity_options.conf_rel_non_hds(RelNonHdsOptionType.REL_ACT),
        ]
        for file_existence_case in FILE_EXISTENCE_CASES:
            for relativity_conf in relativity_cases:
                source_syntax = RawSystemCommandLineAbsStx.of_str(
                    'program_name', [
                        ArgumentOfExistingPathAbsStx(
                            relativity_conf.path_abs_stx_of_name(
                                referenced_file))
                    ])

                with self.subTest(
                        relativity=relativity_conf.option_string,
                        file_do_existence_case=file_existence_case.name):
                    # ACT & ASSERT #
                    CHECKER_WO_EXECUTION.check__abs_stx__layouts__source_variants__wo_input(
                        self,
                        equivalent_source_variants__for_consume_until_end_of_last_line__s__nsc,
                        source_syntax,
                        arrangement_w_tcds(
                            tcds_contents=relativity_conf.
                            populator_for_relativity_option_root(
                                DirContents(
                                    file_existence_case.files_for_name(
                                        referenced_file)))),
                        MultiSourceExpectation(execution=ExecutionExpectation(
                            validation=file_existence_case.expectation_for(
                                relativity_conf.directory_structure_partition))
                                               ),
                    )
コード例 #9
0
ファイル: stdin.py プロジェクト: emilkarlen/exactly
    def test_stdin_is_contents_of_string_source_WHEN_program_defines_single_stdin(self):
        # ARRANGE #
        test_setup = SingleStdinOfProgramTestSetup(self, exit_code=0)

        for pgm_and_args_case in pgm_and_args_cases.cases_w_and_wo_argument_list__including_program_reference():
            with self.subTest(pgm_and_args_case.name):
                # ACT & ASSERT #
                integration_check.CHECKER__PARSE_FULL.check__abs_stx__layouts__source_variants(
                    self,
                    equivalent_source_variants__for_expr_parse__s__nsc,
                    abstract_syntaxes.RunProgramAbsStx(
                        test_setup.program_w_stdin_syntax(pgm_and_args_case.pgm_and_args),
                        abstract_syntaxes.PathArgumentPositionLast()
                    ),
                    integration_check.ARBITRARY_MODEL,
                    arrangement_w_tcds(
                        symbols=pgm_and_args_case.symbol_table,
                        process_execution=test_setup.proc_exe_env__w_stdin_check,
                        tcds_contents=pgm_and_args_case.tcds,
                    ),
                    MultiSourceExpectation(
                        symbol_references=pgm_and_args_case.references_assertion,
                        execution=ExecutionExpectation(
                            main_result=asrt_matching_result.matches_value(True)
                        ),
                    ),
                )
コード例 #10
0
 def runTest(self):
     # ARRANGE #
     leaf_file_name = 'created-leaf'
     for create_path_case in create_path_cases(leaf_file_name):
         for rel_file_name_case in rel_file_name_cases__create(
                 leaf_file_name, create_path_case.expected_created_file):
             syntax = LiteralFilesSourceAbsStx([
                 abs_stx.FileSpecAbsStx.of_file_type(
                     create_path_case.file_type,
                     file_name_arg(
                         str(rel_file_name_case.file_spec_file_name)),
                     create_path_case.contents__syntax,
                 )
             ])
             # ACT & ASSERT #
             integration_check.CHECKER.check__abs_stx__layout__std_source_variants(
                 self,
                 syntax,
                 rel_file_name_case.arrangement,
                 arrangement_w_tcds(),
                 MultiSourceExpectation(execution=ExecutionExpectation(
                     main_result=asrt_fs.dir_contains_exactly_2(
                         rel_file_name_case.expected_root_dir_contents))),
                 sub_test_identifiers={
                     'create_case': create_path_case.name,
                     'rel_file_name_case': rel_file_name_case.name,
                 })
コード例 #11
0
ファイル: validation.py プロジェクト: emilkarlen/exactly
 def test_string_symbol_reference(self):
     for other_valid_file_spec_case in OTHER_VALID_FILE_SPECS:
         for file_name_case in INVALID_FILE_NAMES:
             file_name_symbol = StringSymbolContext.of_constant(
                 'FILE_NAME_SYMBOL',
                 file_name_case.value,
                 default_restrictions=asrt_rest.is__string__w_all_indirect_refs_are_strings(),
             )
             file_name_abs_stx = file_name_symbol.abstract_syntax
             for file_spec_case in file_type_and_contents_variants(file_name_abs_stx):
                 integration_check.CHECKER.check__abs_stx__layout__std_source_variants(
                     self,
                     LiteralFilesSourceAbsStx(other_valid_file_spec_case.value + [file_spec_case.value]),
                     models.empty(),
                     arrangement_wo_tcds(
                         symbols=file_name_symbol.symbol_table
                     ),
                     MultiSourceExpectation(
                         symbol_references=file_name_symbol.references_assertion,
                         execution=ExecutionExpectation(
                             validation=ValidationAssertions.pre_sds_fails__w_any_msg()
                         )
                     ),
                     sub_test_identifiers={
                         'file-name': file_name_case.name,
                         'type-and-contents': file_spec_case.name,
                         'other-valid-file-spec': other_valid_file_spec_case.name,
                     }
                 )
コード例 #12
0
ファイル: stdin.py プロジェクト: emilkarlen/exactly
    def test_stdin_is_concatenation_of_model_and_program_stdin_WHEN_program_defines_single_stdin(
            self):
        # ARRANGE #
        model_contents = '\n'.join(('the', 'contents', 'of', 'the', 'model'))
        test_setup = SingleStdinOfProgramTestSetup(
            self, exit_code=0, additional_stdin=model_contents)

        for pgm_and_args_case in pgm_and_args_cases.cases_w_and_wo_argument_list__including_program_reference(
        ):
            with self.subTest(pgm_and_args_case.name):
                # ACT & ASSERT #
                integration_check.CHECKER__PARSE_FULL.check__abs_stx__layouts__source_variants(
                    self,
                    equivalent_source_variants__for_expr_parse__s__nsc,
                    RunProgramAbsStx(
                        test_setup.program_w_stdin_syntax(
                            pgm_and_args_case.pgm_and_args), ),
                    model_constructor.of_str(self, model_contents),
                    arrangement_w_tcds(
                        symbols=pgm_and_args_case.symbol_table,
                        process_execution=test_setup.
                        proc_exe_env__w_stdin_check,
                        tcds_contents=pgm_and_args_case.tcds,
                    ),
                    MultiSourceExpectation(
                        symbol_references=pgm_and_args_case.
                        references_assertion,
                        execution=EXECUTION_OUTPUT_IS_EMPTY,
                        primitive=PRIMITIVE_IS_NOT_IDENTITY_TRANSFORMATION,
                    ),
                )
コード例 #13
0
 def runTest(self):
     # ARRANGE #
     contents_cases: Sequence[NameAndValue[fs.FileSystemElements]] = [
         NameAndValue(
             'empty',
             (),
         ),
         NameAndValue(
             'non-empty',
             [fs.File.empty('empty-file.txt')],
         ),
     ]
     for contents_case in contents_cases:
         symbol = FilesSourceSymbolContext.of_primitive(
             'SYMBOL_NAME',
             FilesSourceThatWritesFileSystemElements(contents_case.value),
         )
         # ACT & ASSERT #
         integration_check.CHECKER.check__abs_stx__layout__std_source_variants(
             self,
             symbol.abstract_syntax,
             models.empty(),
             arrangement_w_tcds(
                 symbols=symbol.symbol_table,
             ),
             MultiSourceExpectation(
                 symbol_references=symbol.references_assertion,
                 execution=ExecutionExpectation(
                     main_result=asrt_fs.dir_contains_exactly_2(contents_case.value)
                 )
             ),
             sub_test_identifiers={
                 'contents': contents_case.name,
             }
         )
コード例 #14
0
    def test_without_transformer(self):
        # ARRANGE #
        src_file = fs.File('source-file.txt', 'contents of source file')
        src_rel_opt_conf = conf_rel_any(RelOptionType.REL_TMP)

        checker = integration_check.checker(parse_check.rel_opts_conf_of_single(src_rel_opt_conf.relativity))

        file_contents_abs_stx = string_source_abs_stx.StringSourceOfFileAbsStx(
            src_rel_opt_conf.path_abs_stx_of_name(src_file.name)
        )
        # ACT & ASSERT #
        checker.check__abs_stx__layouts__std_source_variants__wo_input(
            self,
            OptionallyOnNewLine(file_contents_abs_stx),
            arrangement_w_tcds(
                tcds_contents=src_rel_opt_conf.populator_for_relativity_option_root(
                    DirContents([src_file]))
            ),
            MultiSourceExpectation.of_prim__const(
                asrt_string_source.pre_post_freeze__matches_str__const(
                    src_file.contents,
                    may_depend_on_external_resources=True,
                ),
                symbol_references=asrt.is_empty_sequence,
            )
        )
コード例 #15
0
ファイル: within_parens.py プロジェクト: emilkarlen/exactly
    def runTest(self):
        # ARRANGE #
        program_ref_case = pgm_and_args_cases.program_reference__w_argument_list()

        def expected_program(env: AssertionResolvingEnvironment) -> Assertion[Program]:
            return asrt_pgm_val.matches_program(
                asrt_command.matches_command(
                    driver=program_ref_case.expected_command_driver(env),
                    arguments=asrt.is_empty_sequence,
                ),
                stdin=asrt_pgm_val.is_no_stdin(),
                transformer=asrt_pgm_val.is_no_transformation(),
            )

        # ACT & ASSERT #
        CHECKER_WO_EXECUTION.check__abs_stx__layouts__source_variants__wo_input(
            self,
            equivalent_source_variants__for_expr_parse__s__nsc,
            OptionallyOnNewLine(WithinParensAbsStx(program_ref_case.pgm_and_args,
                                                   end_paren_on_separate_line=False)),
            arrangement_wo_tcds(
                symbols=SymbolContext.symbol_table_of_contexts(program_ref_case.symbols),
            ),
            MultiSourceExpectation(
                symbol_references=SymbolContext.references_assertion_of_contexts(program_ref_case.symbols),
                primitive=expected_program,
            )
        )
コード例 #16
0
    def test_transformation_only_as_source_argument(self):
        # ARRANGE #
        transformer = StringTransformerPrimitiveSymbolContext(
            'STRING_TRANSFORMER', string_transformers.to_uppercase())

        for pgm_and_args_case in pgm_and_args_cases.cases_w_and_wo_argument_list__including_program_reference(
        ):
            program_w_transformer = FullProgramAbsStx(
                pgm_and_args_case.pgm_and_args,
                transformation=transformer.abstract_syntax)

            symbols = list(pgm_and_args_case.symbols) + [transformer]

            with self.subTest(command=pgm_and_args_case.name):
                # ACT & ASSERT #
                CHECKER_WO_EXECUTION.check__abs_stx__layouts__source_variants__wo_input(
                    self, equivalent_source_variants__for_expr_parse__s__nsc,
                    program_w_transformer,
                    pgm_and_args_case.mk_arrangement(
                        SymbolContext.symbol_table_of_contexts(symbols)),
                    MultiSourceExpectation(
                        symbol_references=SymbolContext.
                        references_assertion_of_contexts(symbols),
                        primitive=lambda env: (asrt_pgm_val.matches_program(
                            asrt_command.
                            matches_command(driver=pgm_and_args_case.
                                            expected_command_driver(env),
                                            arguments=asrt.is_empty_sequence),
                            stdin=asrt_pgm_val.is_no_stdin(),
                            transformer=asrt.matches_singleton_sequence(
                                asrt.is_(transformer.primitive)),
                        ))))
コード例 #17
0
    def runTest(self):
        # ARRANGE #
        for validation_case in validation_cases.failing_validation_cases():
            for preserve_new_lines in [False, True]:
                syntax = ReplaceRegexAbsStx.of_str(
                    'valid_regex',
                    'valid_replacement',
                    preserve_new_lines=preserve_new_lines,
                    lines_filter=validation_case.value.matcher_abs_stx,
                )

                line_matcher_symbol_context = validation_case.value.symbol_context
                # ACT & ASSERT #
                integration_check.CHECKER__PARSE_FULL.check__abs_stx__layout__std_source_variants(
                    self,
                    syntax,
                    model_constructor.arbitrary(self),
                    arrangement_wo_tcds(
                        symbols=line_matcher_symbol_context.symbol_table),
                    MultiSourceExpectation(
                        symbol_references=line_matcher_symbol_context.
                        references_assertion,
                        execution=ExecutionExpectation(
                            validation=validation_case.value.expectation, )),
                    sub_test_identifiers={
                        'preserve_new_lines': preserve_new_lines,
                        'validation': validation_case.name,
                    })
コード例 #18
0
ファイル: validation.py プロジェクト: emilkarlen/exactly
 def _check_case(self,
                 invalid_file_spec: FileSpecAbsStx,
                 contents_case: ContentsCase,
                 validation_case: NameAndValue[ValidationCaseWSymbolContextAndAssertion],
                 ):
     symbol_context = validation_case.value.symbol_context
     integration_check.CHECKER.check__abs_stx__layout__std_source_variants(
         self,
         LiteralFilesSourceAbsStx(contents_case.other_valid_file_spec.value + [invalid_file_spec]),
         models.empty(),
         arrangement_wo_tcds(
             symbols=symbol_context.symbol_table
         ),
         MultiSourceExpectation(
             symbol_references=symbol_context.references_assertion,
             execution=ExecutionExpectation(
                 validation=validation_case.value.assertion
             )
         ),
         sub_test_identifiers={
             'validation': validation_case.name,
             'other-valid-file-spec': contents_case.other_valid_file_spec.name,
             'modification-type': contents_case.modification_type,
         }
     )
コード例 #19
0
    def test_dir(self):
        # ARRANGE #
        to_append_file = fs.File('file-to-append',
                                 'contents of file to append')
        pre_existing_file = fs.File('pre-existing',
                                    'contents of pre existing file')

        append_single_file__contents_syntax = abs_stx.DirContentsExplicitAbsStx(
            ModificationType.APPEND,
            abs_stx.LiteralFilesSourceAbsStx([
                abs_stx.regular_file_spec(
                    file_name_arg(to_append_file.name),
                    abs_stx.FileContentsExplicitAbsStx(
                        ModificationType.CREATE,
                        str_src_abs_stx.StringSourceOfStringAbsStx.of_str(
                            to_append_file.contents, QuoteType.HARD)))
            ]))
        target_dir_name = 'destination-dir'

        contents_cases: Sequence[AppendDirContentsCase] = [
            AppendDirContentsCase(
                'empty',
                [],
                [to_append_file],
            ),
            AppendDirContentsCase(
                'non-empty',
                [pre_existing_file],
                [pre_existing_file, to_append_file],
            ),
        ]
        for target_location_case in target_locations():
            syntax = abs_stx.LiteralFilesSourceAbsStx([
                abs_stx.dir_spec(
                    file_name_arg(
                        target_location_case.target_rel_path(target_dir_name)),
                    append_single_file__contents_syntax,
                )
            ])
            for contents_case in contents_cases:
                # ACT & ASSERT #
                integration_check.CHECKER.check__abs_stx__layout__std_source_variants(
                    self,
                    syntax, [
                        target_location_case.file_for_leaf(
                            contents_case.original(target_dir_name))
                    ],
                    arrangement_w_tcds(),
                    MultiSourceExpectation(execution=ExecutionExpectation(
                        main_result=asrt_fs.dir_contains_exactly_2([
                            target_location_case.file_for_leaf(
                                fs.Dir(
                                    target_dir_name, contents_case.
                                    expected_contents_after_modification))
                        ]))),
                    sub_test_identifiers={
                        'contents': contents_case.name,
                        'target_location': target_location_case.name
                    })
コード例 #20
0
    def runTest(self):
        # ARRANGE #
        arguments = ['arg']
        str_src_contents = 'the_str_src_contents'
        stdin_syntax = str_src_abs_stx.StringSourceWithinParensAbsStx(
            str_src_abs_stx.StringSourceOfStringAbsStx.of_str(
                str_src_contents))
        transformer_symbol = StringTransformerPrimitiveSymbolContext(
            'TRANSFORMER', string_transformers.to_uppercase())

        for pgm_and_args_case in pgm_and_args_cases.cases__w_argument_list__including_program_reference(
        ):
            program_w_stdin = FullProgramAbsStx(
                PgmAndArgsWArgumentsAbsStx(
                    pgm_and_args_case.pgm_and_args,
                    [
                        ArgumentOfRichStringAbsStx.of_str(arg)
                        for arg in arguments
                    ],
                ),
                stdin=stdin_syntax,
                transformation=transformer_symbol.abstract_syntax,
            )

            symbols = list(pgm_and_args_case.symbols) + [transformer_symbol]

            def expected_program(
                    env: AssertionResolvingEnvironment) -> Assertion[Program]:
                return asrt_pgm_val.matches_program(
                    asrt_command.matches_command(
                        driver=pgm_and_args_case.expected_command_driver(env),
                        arguments=asrt.equals(arguments),
                    ),
                    stdin=asrt.matches_singleton_sequence(
                        asrt_str_src.matches__str(
                            asrt.equals(str_src_contents), )),
                    transformer=asrt.matches_singleton_sequence(
                        asrt.is_(transformer_symbol.primitive)),
                )

            # ACT & ASSERT #
            CHECKER_WO_EXECUTION.check__abs_stx__layouts__source_variants__wo_input(
                self,
                equivalent_source_variants__for_expr_parse__s__nsc,
                program_w_stdin,
                arrangement_w_tcds(
                    symbols=SymbolContext.symbol_table_of_contexts(symbols),
                    tcds_contents=pgm_and_args_case.tcds,
                ),
                MultiSourceExpectation(
                    symbol_references=SymbolContext.
                    references_assertion_of_contexts(symbols),
                    primitive=expected_program,
                ),
                sub_test_identifiers={'command': pgm_and_args_case.name})
コード例 #21
0
    def _check_failing_validation_of_referenced_program__for_relativity(self, missing_file_relativity: RelOptionType):
        relativity_conf = relativity_options.conf_rel_any(missing_file_relativity)

        program_symbol_with_ref_to_non_exiting_exe_file = ProgramSymbolContext.of_sdv(
            'PGM_WITH_REF_TO_EXE_FILE',
            program_sdvs.ref_to_exe_file(
                constant(simple_of_rel_option(relativity_conf.relativity_option,
                                              'non-existing-exe-file')))
        )

        program_symbol_with_ref_to_non_exiting_file_as_argument = ProgramSymbolContext.of_sdv(
            'PGM_WITH_ARG_WITH_REF_TO_FILE',
            program_sdvs.interpret_py_source_file_that_must_exist(
                constant(simple_of_rel_option(relativity_conf.relativity_option,
                                              'non-existing-python-file.py')))
        )

        expectation = MultiSourceExpectation.of_const(
            symbol_references=asrt.anything_goes(),
            primitive=asrt.anything_goes(),
            execution=ExecutionExpectation(
                validation=FAILING_VALIDATION_ASSERTION_FOR_PARTITION[relativity_conf.directory_structure_partition],
            )
        )

        symbols = SymbolContext.symbol_table_of_contexts([
            program_symbol_with_ref_to_non_exiting_exe_file,
            program_symbol_with_ref_to_non_exiting_file_as_argument,
        ])
        arrangement = arrangement_w_tcds(
            symbols=symbols,
        )

        cases = [
            NameAndValue(
                'executable does not exist',
                RawProgramOfSymbolReferenceAbsStx(program_symbol_with_ref_to_non_exiting_exe_file.name),
            ),
            NameAndValue(
                'file referenced from argument does not exist',
                RawProgramOfSymbolReferenceAbsStx(program_symbol_with_ref_to_non_exiting_file_as_argument.name),
            ),
        ]

        for case in cases:
            with self.subTest(case=case.name):
                # ACT & ASSERT #
                CHECKER_WO_EXECUTION.check__abs_stx__layouts__source_variants__wo_input(
                    self,
                    equivalent_source_variants__for_consume_until_end_of_last_line__s__nsc,
                    case.value,
                    arrangement,
                    expectation,
                )
コード例 #22
0
ファイル: transformation.py プロジェクト: emilkarlen/exactly
    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)
                        ),
                    ),
                )
コード例 #23
0
    def test_regular(self):
        # ARRANGE #
        to_append__text = '<appended text>'
        non_empty_original__text = '<original text>'

        append_contents_syntax = abs_stx.FileContentsExplicitAbsStx(
            ModificationType.APPEND,
            str_src_abs_stx.StringSourceOfStringAbsStx.of_str_hard(
                to_append__text))
        name_of_modified_file = 'destination.txt'

        contents_cases: Sequence[AppendRegularContentsCase] = [
            AppendRegularContentsCase(
                'empty',
                '',
                to_append__text,
            ),
            AppendRegularContentsCase(
                'non-empty',
                non_empty_original__text,
                non_empty_original__text + to_append__text,
            ),
        ]
        for target_location_case in target_locations():
            syntax = abs_stx.LiteralFilesSourceAbsStx([
                abs_stx.regular_file_spec(
                    file_name_arg(
                        target_location_case.target_rel_path(
                            name_of_modified_file)),
                    append_contents_syntax,
                )
            ])
            for contents_case in contents_cases:
                # ACT & ASSERT #
                integration_check.CHECKER.check__abs_stx__layout__std_source_variants(
                    self,
                    syntax, [
                        target_location_case.file_for_leaf(
                            contents_case.original(name_of_modified_file))
                    ],
                    arrangement_w_tcds(),
                    MultiSourceExpectation(execution=ExecutionExpectation(
                        main_result=asrt_fs.dir_contains_exactly_2([
                            target_location_case.file_for_leaf(
                                fs.File(
                                    name_of_modified_file, contents_case.
                                    expected_contents_after_modification))
                        ]))),
                    sub_test_identifiers={
                        'contents': contents_case.name,
                        'target_location': target_location_case.name
                    })
コード例 #24
0
    def runTest(self):
        # ARRANGE #

        to_upper_transformer = StringTransformerSymbolContext.of_primitive(
            'TRANSFORMER_SYMBOL',
            string_transformers.to_uppercase(),
        )

        src_file = fs.File('src-file.txt', 'contents of source file')
        src_file_rel_conf = conf_rel_hds(RelHdsOptionType.REL_HDS_CASE)

        expected_contents = src_file.contents.upper()

        path_relativity_variants = PathRelativityVariants({src_file_rel_conf.relativity}, True)
        checker = integration_check.checker(RelOptionsConfiguration(path_relativity_variants,
                                                                    src_file_rel_conf.relativity))

        src_file_symbol = ConstantSuffixPathDdvSymbolContext(
            'SRC_FILE_SYMBOL',
            src_file_rel_conf.relativity,
            src_file.name,
            path_relativity_variants,
        )
        string_source_syntax = string_source_abs_stx.TransformedStringSourceAbsStx(
            string_source_abs_stx.StringSourceOfFileAbsStx(src_file_symbol.abstract_syntax),
            to_upper_transformer.abstract_syntax,
        )
        symbol_table = SymbolContext.symbol_table_of_contexts([
            src_file_symbol,
            to_upper_transformer,
        ])

        # ACT & ASSERT #
        checker.check__abs_stx__layouts__std_source_variants__wo_input(
            self,
            OptionallyOnNewLine(string_source_syntax),
            arrangement_w_tcds(
                symbols=symbol_table,
                hds_contents=src_file_rel_conf.populator_for_relativity_option_root__hds(
                    DirContents([src_file]))
            ),
            MultiSourceExpectation.of_prim__const(
                asrt_string_source.pre_post_freeze__matches_str__const(
                    expected_contents,
                    may_depend_on_external_resources=True,
                ),
                symbol_references=asrt.matches_sequence([
                    src_file_symbol.reference_assertion__path_or_string,
                    to_upper_transformer.reference_assertion,
                ]),
            ),
        )
コード例 #25
0
    def _check_failing_validation___for_relativity(
            self, missing_file_relativity: RelOptionType):
        relativity_conf = relativity_options.conf_rel_any(
            missing_file_relativity)

        invalid_argument_syntax = ArgumentOfExistingPathAbsStx(
            relativity_conf.path_abs_stx_of_name('non-existing-file'))

        arguments_cases = [
            NameAndValue(
                '1st argument fails validation',
                [invalid_argument_syntax],
            ),
            NameAndValue(
                '2nd argument fails validation',
                [
                    ArgumentOfRichStringAbsStx.of_str('valid1'),
                    invalid_argument_syntax,
                    ArgumentOfRichStringAbsStx.of_str('valid2')
                ],
            ),
        ]

        for pgm_and_args_case in pgm_and_args_cases.cases__w_argument_list__excluding_program_reference(
        ):
            for arguments_case in arguments_cases:
                pgm_w_args = PgmAndArgsWArgumentsAbsStx(
                    pgm_and_args_case.pgm_and_args, arguments_case.value)
                with self.subTest(pgm_and_args=pgm_and_args_case.name,
                                  arguments=arguments_case.name):
                    # ACT & ASSERT #
                    CHECKER_WO_EXECUTION.check__abs_stx__layouts__source_variants__wo_input(
                        self,
                        equivalent_source_variants__for_consume_until_end_of_last_line__s__nsc,
                        pgm_w_args,
                        arrangement_w_tcds(
                            symbols=SymbolContext.symbol_table_of_contexts(
                                pgm_and_args_case.symbols),
                            tcds_contents=pgm_and_args_case.tcds,
                        ),
                        MultiSourceExpectation.of_const(
                            symbol_references=SymbolContext.
                            references_assertion_of_contexts(
                                pgm_and_args_case.symbols),
                            primitive=asrt.anything_goes(),
                            execution=ExecutionExpectation(
                                validation=
                                FAILING_VALIDATION_ASSERTION_FOR_PARTITION[
                                    relativity_conf.
                                    directory_structure_partition], )),
                    )
コード例 #26
0
    def test_shell_program(self):
        argument_string_template = 'first {string_symbol} between {list_symbol} after'
        string_argument_symbol = StringConstantSymbolContext(
            'STRING_ARGUMENT_SYMBOL',
            'string argument',
        )
        list_argument_symbol = ListConstantSymbolContext(
            'LIST_ARGUMENT_SYMBOL', ['list_arg_value_1', 'list arg value 2'])
        symbols = [string_argument_symbol, list_argument_symbol]

        command_line_syntax_str = argument_string_template.format(
            string_symbol=string_argument_symbol.name__sym_ref_syntax,
            list_symbol=list_argument_symbol.name__sym_ref_syntax,
        )

        command_line_str = argument_string_template.format(
            string_symbol=string_argument_symbol.str_value,
            list_symbol=' '.join(list_argument_symbol.constant_list),
        )

        syntax = ProgramOfShellCommandLineAbsStx(
            StringLiteralAbsStx(command_line_syntax_str))

        def expected_program(
                env: AssertionResolvingEnvironment) -> Assertion[Program]:
            return asrt_pgm_val.matches_program(
                command=asrt_command.equals_shell_command(
                    command_line=command_line_str,
                    arguments=[],
                ),
                stdin=asrt_pgm_val.is_no_stdin(),
                transformer=asrt_pgm_val.is_no_transformation(),
            )

        expectation = MultiSourceExpectation(
            symbol_references=asrt.matches_sequence([
                string_argument_symbol.reference_assertion__w_str_rendering,
                list_argument_symbol.reference_assertion__w_str_rendering,
            ]),
            primitive=expected_program,
        )

        # ACT & ASSERT #
        CHECKER_WO_EXECUTION.check__abs_stx__layouts__source_variants__wo_input(
            self,
            equivalent_source_variants__for_consume_until_end_of_last_line__s__nsc,
            syntax,
            arrangement_wo_tcds(
                symbols=SymbolContext.symbol_table_of_contexts(symbols), ),
            expectation,
        )
コード例 #27
0
 def test_without_reference_to_existing_file(self):
     # ARRANGE #
     abstract_syntax = RawSystemCommandLineAbsStx.of_str(
         'program_name',
         [ArgumentOfRichStringAbsStx.of_str('argument-that-is-not-a-file')])
     # ACT & ASSERT #
     CHECKER_WO_EXECUTION.check__abs_stx__layouts__source_variants__wo_input(
         self,
         equivalent_source_variants__for_consume_until_end_of_last_line__s__nsc,
         abstract_syntax,
         arrangement_wo_tcds(),
         MultiSourceExpectation(execution=ExecutionExpectation(
             validation=validation.ValidationAssertions.all_passes())),
     )
コード例 #28
0
    def test_wo_transformation(self):
        # ARRANGE #
        cases: List[NameAndValue[Case]] = [
            NameAndValue('string', _string_case(_no_transformation)),
            NameAndValue('string-source',
                         _string_source_case(_no_transformation)),
        ]

        for case in cases:
            # ACT & ASSERT #
            CHECKER.check__abs_stx__layouts__std_source_variants__wo_input(
                self,
                case.value.syntax,
                arrangement_w_tcds(symbols=case.value.symbol.symbol_table, ),
                MultiSourceExpectation.of_prim(
                    symbol_references=asrt.matches_singleton_sequence(
                        references.is_reference_to__string_source_or_string(
                            case.value.symbol.name)),
                    primitive=case.value.expectation_of_primitive,
                ),
                sub_test_identifiers={
                    'case': case.name,
                })
コード例 #29
0
 def check__w_source_variants_for_full_line_parser_2(
     self,
     put: unittest.TestCase,
     arguments: Arguments,
     input_: INPUT,
     arrangement: Arrangement,
     expectation: Expectation[PRIMITIVE, OUTPUT],
 ):
     self.check__w_source_variants_for_full_line_parser(
         put, arguments, input_, arrangement,
         MultiSourceExpectation(
             expectation.parse.symbol_references,
             expectation.execution,
             expectation.primitive,
         ))
コード例 #30
0
ファイル: within_parens.py プロジェクト: emilkarlen/exactly
 def test_here_doc(self):
     # ARRANGE #
     string_value = rich_str_abs_stx.HereDocAbsStx(
         'single line in here doc\n')
     string_source_syntax = string_source_abs_stx.StringSourceOfStringAbsStx(
         string_value)
     CHECKER.check__abs_stx__layouts__source_variants__wo_input(
         self, equivalent_source_variants__for_full_line_expr_parse__s__nsc,
         OptionallyOnNewLine(
             WithinParensAbsStx(string_source_syntax,
                                end_paren_on_separate_line=True)),
         arrangement_w_tcds(),
         MultiSourceExpectation.of_prim__const(
             asrt_string_source.pre_post_freeze__matches_str__const(
                 string_value.value,
                 may_depend_on_external_resources=False,
             )))