Пример #1
0
    def test_superfluous_arguments(self):
        # ARRANGE #
        arbitrary_transformer_symbol = StringTransformerSymbolContext.of_arbitrary_value(
            'TRANSFORMER_SYMBOL')

        src_file_relativity_conf = conf_rel_hds(RelHdsOptionType.REL_HDS_CASE)

        file_contents_builder = string_source_abs_stx.TransformableAbsStxBuilder(
            string_source_abs_stx.StringSourceOfFileAbsStx(
                src_file_relativity_conf.path_abs_stx_of_name('src-file.txt')))

        file_contents_cases = [
            NameAndValue('contents of existing file / without transformation',
                         file_contents_builder.without_transformation()),
            NameAndValue(
                'contents of existing file / with transformation',
                file_contents_builder.with_transformation(
                    arbitrary_transformer_symbol.abstract_syntax)),
        ]

        for file_contents_case in file_contents_cases:
            valid_instruction_syntax = instr_abs_stx.create_w_explicit_contents(
                path_abs_stx.DefaultRelPathAbsStx('dst-file.txt'),
                file_contents_case.value,
            )
            invalid_instruction_syntax = custom_abs_stx.SequenceAbsStx([
                valid_instruction_syntax,
                custom_abs_stx.CustomAbstractSyntax.singleton(
                    'superfluous_argument')
            ])
            with self.subTest(file_contents_variant=file_contents_case.name):
                # ACT & ASSERT #
                check_invalid_syntax__abs_stx(self, invalid_instruction_syntax)
Пример #2
0
    def _file_contents_cases(self) -> InvalidDestinationFileTestCasesData:
        arbitrary_transformer = StringTransformerSymbolContext.of_primitive(
            'TRANSFORMER_SYMBOL',
            string_transformers.to_uppercase(),
        )

        symbols = arbitrary_transformer.symbol_table

        relativity_conf = conf_rel_hds(RelHdsOptionType.REL_HDS_CASE)

        src_file = relativity_conf.path_abs_stx_of_name('src-file.txt')

        contents_abs_stx_builder = string_source_abs_stx.TransformableAbsStxBuilder(
            string_source_abs_stx.StringSourceOfFileAbsStx(src_file))

        src_file_in_hds_contents = relativity_conf.populator_for_relativity_option_root(
            DirContents([File.empty(src_file.name)]))

        file_contents_cases = [
            NameAndValue(
                'contents of existing file / without transformation',
                fs_abs_stx.FileContentsExplicitAbsStx(
                    fs_abs_stx.ModificationType.CREATE,
                    contents_abs_stx_builder.without_transformation())),
            NameAndValue(
                'contents of existing file / with transformation',
                fs_abs_stx.FileContentsExplicitAbsStx(
                    fs_abs_stx.ModificationType.CREATE,
                    contents_abs_stx_builder.with_transformation(
                        arbitrary_transformer.abstract_syntax))),
        ]

        return InvalidDestinationFileTestCasesData(file_contents_cases,
                                                   symbols,
                                                   src_file_in_hds_contents)
Пример #3
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))
                                               ),
                    )
Пример #4
0
    def runTest(self):
        # ARRANGE #

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

        expected_file = fs.File('a-file-name.txt', src_file.contents.upper())
        dst_rel_opt_conf = conf_rel_non_hds(RelNonHdsOptionType.REL_ACT)

        to_upper_transformer = StringTransformerSymbolContext.of_primitive(
            'TRANSFORMER_SYMBOL',
            to_uppercase(),
        )
        symbols = to_upper_transformer.symbol_table

        transformed_file_syntax = string_source_abs_stx.TransformedStringSourceAbsStx(
            string_source_abs_stx.StringSourceOfFileAbsStx(
                src_rel_opt_conf.path_abs_stx_of_name(src_file.name)),
            to_upper_transformer.abstract_syntax,
        )
        instruction_syntax = instr_abs_stx.create_w_explicit_contents(
            dst_rel_opt_conf.path_abs_stx_of_name(expected_file.name),
            transformed_file_syntax,
        )

        expected_non_hds_contents = dst_rel_opt_conf.assert_root_dir_contains_exactly(
            fs.DirContents([expected_file]))

        instruction_checker = self.conf.instruction_checker
        parser = self.conf.parser()
        for source_case in equivalent_source_variants__with_source_check__consume_last_line__abs_stx(
                instruction_syntax):
            with self.subTest(source_case.name):
                source = source_case.value.source
                # ACT #
                instruction = parser.parse(ARBITRARY_FS_LOCATION_INFO, source)
                # ASSERT #
                source_case.value.expectation.apply_with_message(
                    self, source, 'source-after-parse')
                # ACT & ASSERT #
                instruction_checker.check(
                    self, instruction,
                    self.conf.arrangement(
                        pre_contents_population_action=
                        SETUP_CWD_INSIDE_SDS_BUT_NOT_A_SDS_DIR,
                        tcds_contents=src_rel_opt_conf.
                        populator_for_relativity_option_root(
                            DirContents([src_file])),
                        symbols=symbols,
                    ),
                    self.conf.expect_success(
                        symbol_usages=asrt.matches_sequence([
                            to_upper_transformer.reference_assertion,
                        ]),
                        main_side_effects_on_sds=expected_non_hds_contents,
                    ))
Пример #5
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,
                ]),
            ),
        )
Пример #6
0
def cases__w_argument_list__excluding_program_reference() -> List[PgmAndArgsCase]:
    """Cases of pgm-and-arg:s that have a list of arguments."""
    executable_file = fs.executable_file('executable-file', '')
    exe_file_relativity = rel_opt.conf_rel_hds(RelHdsOptionType.REL_HDS_CASE)
    executable_file_ddv = path_ddvs.of_rel_option(exe_file_relativity.relativity,
                                                  path_ddvs.constant_path_part(executable_file.name)
                                                  )

    system_program = 'the-system-program'

    return [
        PgmAndArgsCase.w_tcds(
            'executable file',
            pgm_and_args=pgm_abs_stx.ProgramOfExecutableFileCommandLineAbsStx(
                exe_file_relativity.named_file_conf(executable_file.name).abstract_syntax
            ),
            expected_command_driver=lambda env: (
                asrt_command.matches_executable_file_command_driver(
                    asrt.equals(executable_file_ddv.value_of_any_dependency__d(env.tcds).primitive),
                )),
            tcds=exe_file_relativity.populator_for_relativity_option_root__hds(
                DirContents([executable_file])
            )
        ),
        PgmAndArgsCase.wo_tcds(
            '-python',
            pgm_and_args=pgm_abs_stx.ProgramOfPythonInterpreterAbsStx(()),
            expected_command_driver=prim_asrt__constant(
                asrt_command.matches_executable_file_command_driver(
                    asrt_path.path_as_str(asrt.equals(sys.executable)),
                )),
        ),
        PgmAndArgsCase.wo_tcds(
            'system program',
            pgm_and_args=pgm_abs_stx.ProgramOfSystemCommandLineAbsStx(
                StringLiteralAbsStx(system_program)
            ),
            expected_command_driver=prim_asrt__constant(
                asrt_command.matches_system_program_command_driver(
                    asrt.equals(system_program)
                ))
        ),
    ]
Пример #7
0
def _single_line_command_cases() -> List[Case]:
    exe_file_name = 'executable-file'
    exe_file_relativity__explicit = rel_opt.conf_rel_hds(
        RelHdsOptionType.REL_HDS_ACT)
    exe_file_ddv__explicit_relativity = path_ddvs.of_rel_option(
        exe_file_relativity__explicit.relativity,
        path_ddvs.constant_path_part(exe_file_name))

    exe_file_relativity__default = rel_opt.default_conf_rel_hds(
        RelHdsOptionType.REL_HDS_CASE)
    exe_file_ddv__default_relativity = path_ddvs.of_rel_option(
        exe_file_relativity__default.relativity,
        path_ddvs.constant_path_part(exe_file_name))

    system_program = 'the-system-program'
    system_program_symbol = StringConstantSymbolContext(
        'SYSTEM_PROGRAM_SYMBOL',
        system_program,
        default_restrictions=reference_assertions.
        IS_REFERENCE__STRING__W_ALL_INDIRECT_REFS_ARE_STRINGS,
    )

    return [
        Case(
            'executable file / explicit relativity',
            source=pgm_args.executable_file_command_line(
                exe_file_relativity__explicit.named_file_conf(
                    exe_file_name).cl_argument.as_str),
            expected_command_driver=lambda tcds:
            (asrt_command.matches_executable_file_command_driver(
                asrt.equals(
                    exe_file_ddv__explicit_relativity.
                    value_of_any_dependency__d(tcds).primitive), )),
        ),
        Case(
            'executable file / default relativity',
            source=pgm_args.executable_file_command_line(
                exe_file_relativity__default.named_file_conf(
                    exe_file_name).cl_argument.as_str),
            expected_command_driver=lambda tcds:
            (asrt_command.matches_executable_file_command_driver(
                asrt.equals(
                    exe_file_ddv__default_relativity.
                    value_of_any_dependency__d(tcds).primitive), )),
        ),
        Case(
            '-python',
            source=pgm_args.py_interpreter_command_line(),
            expected_command_driver=constant_assertion(
                asrt_command.matches_executable_file_command_driver(
                    asrt_path.path_as_str(asrt.equals(sys.executable)), )),
        ),
        Case('system program',
             source=pgm_args.system_program_command_line(system_program),
             expected_command_driver=constant_assertion(
                 asrt_command.matches_system_program_command_driver(
                     asrt.equals(system_program)))),
        Case('system program / w symbol reference',
             source=pgm_args.system_program_command_line(
                 system_program_symbol.name__sym_ref_syntax),
             symbols=[system_program_symbol],
             expected_command_driver=constant_assertion(
                 asrt_command.matches_system_program_command_driver(
                     asrt.equals(system_program_symbol.str_value)))),
    ]
Пример #8
0
EXPECTED_ACCEPTED_PATH_RELATIVITY_VARIANTS = PathRelativityVariants(
    {RelOptionType.REL_CWD,
     RelOptionType.REL_HDS_CASE,
     RelOptionType.REL_HDS_ACT,
     RelOptionType.REL_ACT,
     RelOptionType.REL_TMP},
    True)

ACCEPTED_REL_OPT_CONFIGURATIONS = (
        list(map(rel_opt_conf.conf_rel_any, EXPECTED_ACCEPTED_PATH_RELATIVITY_VARIANTS.rel_option_types)) +

        [rel_opt_conf.symbol_conf_rel_any(RelOptionType.REL_TMP,
                                          'symbol_name',
                                          EXPECTED_ACCEPTED_PATH_RELATIVITY_VARIANTS)] +

        [rel_opt_conf.default_conf_rel_any(RelOptionType.REL_CWD)]
)

UNACCEPTED_REL_OPT_CONFIGURATIONS = [
    rel_opt_conf.conf_rel_hds(RelHdsOptionType.REL_HDS_CASE),
    rel_opt_conf.conf_rel_sds(RelSdsOptionType.REL_RESULT),
]

MAKE_CWD_OUTSIDE_OF_EVERY_REL_OPT_DIR = TcdsActionFromPlainTcdsAction(
    MkSubDirAndMakeItCurrentDirectory(
        SdsSubDirResolverFromSdsFun(lambda sds: sds.root_dir / 'test-cwd')
    )
)
if __name__ == '__main__':
    unittest.TextTestRunner().run(suite())
Пример #9
0
    def test_symbol_usages(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_dst_file = fs.File('dst-file-name.txt',
                                    src_file.contents.upper())

        dst_file_symbol = ConstantSuffixPathDdvSymbolContext(
            'DST_FILE_SYMBOL',
            RelOptionType.REL_TMP,
            expected_dst_file.name,
            sut.REL_OPT_ARG_CONF.options.accepted_relativity_variants,
        )

        for phase_is_after_act in [False, True]:
            checker = integration_check.checker(phase_is_after_act)
            src_file_rel_opt_conf = src_rel_opt_arg_conf_for_phase(
                phase_is_after_act)

            src_file_symbol = ConstantSuffixPathDdvSymbolContext(
                'SRC_FILE_SYMBOL',
                src_file_rel_conf.relativity_option,
                src_file.name,
                src_file_rel_opt_conf.options.accepted_relativity_variants,
            )
            transformed_file_contents = string_source_abs_stx.TransformedStringSourceAbsStx(
                string_source_abs_stx.StringSourceOfFileAbsStx(
                    src_file_symbol.abstract_syntax),
                StringTransformerSymbolReferenceAbsStx(
                    to_upper_transformer.name))
            instruction_syntax = instr_abs_stx.create_w_explicit_contents(
                dst_file_symbol.abstract_syntax,
                transformed_file_contents,
            )
            symbols = SymbolContext.symbol_table_of_contexts([
                dst_file_symbol,
                src_file_symbol,
                to_upper_transformer,
            ])

            with self.subTest(phase_is_after_act=phase_is_after_act):
                # ACT & ASSERT #
                checker.check__abs_stx__std_layouts_and_source_variants(
                    self,
                    instruction_syntax,
                    Arrangement.phase_agnostic(
                        symbols=symbols,
                        tcds=TcdsArrangement(
                            hds_contents=src_file_rel_conf.
                            populator_for_relativity_option_root__hds(
                                DirContents([src_file]))),
                    ),
                    MultiSourceExpectation.phase_agnostic(
                        main_result=IS_SUCCESS,
                        symbol_usages=asrt.matches_sequence([
                            dst_file_symbol.
                            reference_assertion__path_or_string,
                            src_file_symbol.
                            reference_assertion__path_or_string,
                            is_reference_to_string_transformer__usage(
                                to_upper_transformer.name),
                        ]),
                    ),
                )
Пример #10
0
    def runTest(self):
        # ARRANGE #
        actor = sut.actor(COMMAND_THAT_RUNS_PYTHON_PROGRAM_FILE)

        exe_file = fs.python_executable_file(
            'program-name',
            py_programs.exit_with_0()
        )
        text_until_end_of_line = 'some {}invalidly quoted text'.format(SOFT_QUOTE_CHAR)

        existing_path_relativity = relativity_options.conf_rel_hds(RelHdsOptionType.REL_HDS_CASE)

        existing_path_argument = path_arguments.RelOptPathArgument(
            'existing-path',
            existing_path_relativity.relativity,
        )
        act_contents = ab.sequence__r([
            ab.singleton(exe_file.name),
            program_arguments.existing_path(
                existing_path_argument
            ),
            program_arguments.remaining_part_of_current_line_as_literal(text_until_end_of_line),
        ])

        def get_command_assertion(tcds: TestCaseDs) -> Assertion[Command]:
            symbols = SymbolTable.empty()
            return asrt_command.matches_command(
                asrt.anything_goes(),
                asrt.equals([
                    str(relativity_configurations.ATC_FILE
                        .named_file_conf(exe_file.name)
                        .path_sdv
                        .resolve(symbols)
                        .value_of_any_dependency__d(tcds)
                        .primitive
                        ),
                    str(existing_path_relativity
                        .named_file_conf(existing_path_argument.name)
                        .path_sdv
                        .resolve(symbols)
                        .value_of_any_dependency__d(tcds)
                        .primitive
                        ),
                    text_until_end_of_line,
                ])
            )

        act_instruction = instr([act_contents.as_str])
        executor_that_records_arguments = CommandExecutorThatRecordsArguments()
        # ACT & ASSERT #
        integration_check.check_execution(
            self,
            actor,
            [act_instruction],
            arrangement_w_tcds(
                process_execution=ProcessExecutionArrangement(
                    os_services=os_services_access.new_for_cmd_exe(executor_that_records_arguments)
                ),
                hds_contents=hds_populators.multiple([
                    relativity_configurations.ATC_FILE.populator_for_relativity_option_root__hds(
                        fs.DirContents([exe_file])
                    ),
                    existing_path_relativity.populator_for_relativity_option_root__hds(
                        fs.DirContents([fs.File.empty(existing_path_argument.name)])
                    ),
                ])
            ),
            Expectation(
                after_execution=ExecutedCommandAssertion(
                    executor_that_records_arguments,
                    get_command_assertion,
                )
            ),
        )
Пример #11
0
from exactly_lib.tcfs.path_relativity import RelHdsOptionType
from exactly_lib_test.impls.types.test_resources import relativity_options

PROGRAM_FILE = relativity_options.conf_rel_hds(RelHdsOptionType.REL_HDS_CASE)
INTERPRETER_FILE = relativity_options.conf_rel_hds(
    RelHdsOptionType.REL_HDS_CASE)
ATC_FILE = relativity_options.conf_rel_hds(RelHdsOptionType.REL_HDS_ACT)
Пример #12
0
from exactly_lib.tcfs.path_relativity import RelOptionType, PathRelativityVariants, DEPENDENCY_DICT, \
    DirectoryStructurePartition, RelHdsOptionType, RelNonHdsOptionType
from exactly_lib_test.impls.types.test_resources import relativity_options as rel_opt_conf


def path_relativity_variants__src(
        phase_is_after_act: bool) -> PathRelativityVariants:
    rel_opts = set(RelOptionType)
    if not phase_is_after_act:
        rel_opts.remove(RelOptionType.REL_RESULT)

    return PathRelativityVariants(rel_opts, True)


PATH_RELATIVITY_VARIANTS__DST = PathRelativityVariants(
    DEPENDENCY_DICT[DirectoryStructurePartition.NON_HDS] -
    {RelOptionType.REL_RESULT},
    False,
)
ARBITRARY_LEGAL_RELATIVITY__SRC = RelOptionType.REL_HDS_CASE
ARBITRARY_LEGAL_RELATIVITY__SRC__HDS = RelHdsOptionType.REL_HDS_CASE
ARBITRARY_LEGAL_RELATIVITY__DST = RelOptionType.REL_ACT
ARBITRARY_LEGAL_RELATIVITY__DST__NON_HDS = RelNonHdsOptionType.REL_ACT
ARBITRARY_SRC_REL_OPT = rel_opt_conf.conf_rel_hds(RelHdsOptionType.REL_HDS_ACT)
ARBITRARY_DST_REL_OPT = rel_opt_conf.conf_rel_non_hds(
    RelNonHdsOptionType.REL_ACT)
DEFAULT_SRC_REL_OPT = rel_opt_conf.default_conf_rel_hds(
    RelHdsOptionType.REL_HDS_CASE)
DEFAULT_DST_REL_OPT = rel_opt_conf.default_conf_rel_non_hds(
    RelNonHdsOptionType.REL_CWD)
Пример #13
0
from typing import Sequence, Set

from exactly_lib.tcfs.path_relativity import RelHdsOptionType, RelSdsOptionType, RelNonHdsOptionType, RelOptionType, \
    PathRelativityVariants
from exactly_lib_test.impls.types.test_resources.relativity_options import conf_rel_hds, conf_rel_sds, conf_rel_non_hds, \
    default_conf_rel_non_hds, RelativityOptionConfiguration, default_conf_rel_hds

ALLOWED_SRC_FILE_RELATIVITIES__BEFORE_ACT = [
    conf_rel_hds(RelHdsOptionType.REL_HDS_CASE),
    conf_rel_hds(RelHdsOptionType.REL_HDS_ACT),
    conf_rel_sds(RelSdsOptionType.REL_ACT),
    conf_rel_sds(RelSdsOptionType.REL_TMP),
    conf_rel_non_hds(RelNonHdsOptionType.REL_CWD),
    default_conf_rel_hds(RelHdsOptionType.REL_HDS_CASE),
]

DISALLOWED_DST_RELATIVITIES = [
    RelOptionType.REL_RESULT,
    RelOptionType.REL_HDS_CASE,
    RelOptionType.REL_HDS_ACT,
]

ARBITRARY_ALLOWED_SRC_FILE_RELATIVITY = conf_rel_non_hds(
    RelNonHdsOptionType.REL_TMP)
ARBITRARY_ALLOWED_DST_FILE_RELATIVITY = conf_rel_non_hds(
    RelNonHdsOptionType.REL_TMP)

ALLOWED_DST_FILE_RELATIVITIES = [
    conf_rel_non_hds(RelNonHdsOptionType.REL_ACT),
    conf_rel_non_hds(RelNonHdsOptionType.REL_TMP),
    conf_rel_non_hds(RelNonHdsOptionType.REL_CWD),
Пример #14
0
def source_relativity_options__hds() -> List[RelativityOptionConfigurationRelHds]:
    return [
        rel_opt_conf.default_conf_rel_hds(RelHdsOptionType.REL_HDS_CASE),
        rel_opt_conf.conf_rel_hds(RelHdsOptionType.REL_HDS_CASE),
        rel_opt_conf.conf_rel_hds(RelHdsOptionType.REL_HDS_ACT),
    ]