예제 #1
0
def tcds_with_act_as_curr_dir_2(
    hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
    sds_contents: sds_populator.SdsPopulator = sds_populator.empty(),
    non_hds_contents: non_hds_populator.NonHdsPopulator = non_hds_populator.
    empty(),
    tcds_contents: tcds_populators.TcdsPopulator = tcds_populators.empty(),
    act_result: Optional[ActResultProducer] = None,
    pre_contents_population_action: PlainTcdsAction = PlainTcdsAction(),
    post_contents_population_action: PlainTcdsAction = PlainTcdsAction(),
) -> ContextManager[TestCaseDs]:
    prefix = strftime(program_info.PROGRAM_NAME + '-test-%Y-%m-%d-%H-%M-%S',
                      localtime())
    with home_directory_structure(prefix=prefix + '-home') as hds:
        with sandbox_directory_structure(prefix=prefix + "-sds-") as sds:
            tcds = TestCaseDs(hds, sds)
            with preserved_cwd():
                os.chdir(str(sds.act_dir))
                pre_contents_population_action.apply(tcds)
                hds_contents.populate_hds(hds)
                sds_contents.populate_sds(sds)
                non_hds_contents.populate_non_hds(sds)
                tcds_contents.populate_tcds(tcds)
                if act_result:
                    actual_act_result = act_result.apply(ActEnvironment(tcds))
                    write_act_result(tcds.sds, actual_act_result)
                post_contents_population_action.apply(tcds)
                yield tcds
예제 #2
0
 def __init__(
     self,
     pre_contents_population_action: TcdsAction = TcdsAction(),
     hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
     sds_contents_before_main: sds_populator.SdsPopulator = sds_populator.
     empty(),
     non_hds_contents_before_main: non_hds_populator.
     NonHdsPopulator = non_hds_populator.empty(),
     tcds_contents: tcds_populators.TcdsPopulator = tcds_populators.empty(),
     os_services: OsServices = new_for_current_os(),
     process_execution_settings:
     ProcessExecutionSettings = ProcessExecutionSettings.null(),
     default_environ_getter: DefaultEnvironGetter = get_empty_environ,
     previous_phase: PreviousPhase = PreviousPhase.ASSERT,
     symbols: SymbolTable = None,
     fs_location_info: FileSystemLocationInfo = ARBITRARY_FS_LOCATION_INFO,
 ):
     super().__init__(
         pre_contents_population_action=pre_contents_population_action,
         hds_contents=hds_contents,
         sds_contents=sds_contents_before_main,
         non_hds_contents=non_hds_contents_before_main,
         tcds_contents=tcds_contents,
         os_services=os_services,
         process_execution_settings=process_execution_settings,
         default_environ_getter=default_environ_getter,
         symbols=symbols,
         fs_location_info=fs_location_info)
     self.previous_phase = previous_phase
예제 #3
0
 def check_both_single_and_multiple_line_source(
         self,
         put: unittest.TestCase,
         first_source_line_instruction_argument_source_template: str,
         act_phase_source_lines: List[str],
         symbol_usages: Assertion[Sequence[SymbolUsage]],
         expected_command: Callable[[TestCaseDs], Assertion[Command]],
         hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
 ):
     instruction_argument_source = first_source_line_instruction_argument_source_template.format_map(
         self.format_map_for_template_string)
     for source, source_assertion in equivalent_source_variants_with_assertion(put, instruction_argument_source):
         # ARRANGE #
         command_executor = CommandExecutorThatRecordsArguments()
         arrangement = Arrangement(
             source,
             act_phase_source_lines,
             os_services=os_services_access.new_for_cmd_exe(command_executor),
             hds_contents=hds_contents,
         )
         expectation = Expectation(
             source_after_parse=source_assertion,
             symbol_usages=symbol_usages,
             after_execution=ExecutedCommandAssertion(command_executor, expected_command)
         )
         # ACT & ASSERT #
         check_actor_execution(put, arrangement, expectation)
예제 #4
0
 def __init__(self,
              pre_contents_population_action: TcdsAction = TcdsAction(),
              hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
              sds_contents: sds_populator.SdsPopulator = sds_populator.empty(),
              non_hds_contents: non_hds_populator.NonHdsPopulator = non_hds_populator.empty(),
              tcds_contents: tcds_populators.TcdsPopulator = tcds_populators.empty(),
              os_services: OsServices = os_services_access.new_for_current_os(),
              process_execution_settings: ProcessExecutionSettings = proc_exe_env_for_test(),
              default_environ_getter: DefaultEnvironGetter = get_empty_environ,
              post_sds_population_action: TcdsAction = TcdsAction(),
              symbols: SymbolTable = None,
              fs_location_info: FileSystemLocationInfo = ARBITRARY_FS_LOCATION_INFO,
              ):
     super().__init__(hds_contents=hds_contents,
                      process_execution_settings=process_execution_settings,
                      default_environ_getter=default_environ_getter)
     self.pre_contents_population_action = pre_contents_population_action
     self.sds_contents = sds_contents
     self.non_hds_contents = non_hds_contents
     self.tcds_contents = tcds_contents
     self.post_sds_population_action = post_sds_population_action
     self.os_services = os_services
     self.process_execution_settings = process_execution_settings
     self.symbols = symbol_table_from_none_or_value(symbols)
     self.fs_location_info = fs_location_info
예제 #5
0
 def __init__(
     self,
     pre_contents_population_action: TcdsAction = TcdsAction(),
     hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
     sds_contents_before_main: sds_populator.SdsPopulator = sds_populator.
     empty(),
     non_hds_contents: non_hds_populator.
     NonHdsPopulator = non_hds_populator.empty(),
     tcds_contents: tcds_populators.TcdsPopulator = tcds_populators.empty(),
     os_services: OsServices = os_services_access.new_for_current_os(),
     process_execution_settings:
     ProcessExecutionSettings = ProcessExecutionSettings.null(),
     default_environ_getter: DefaultEnvironGetter = get_empty_environ,
     settings_builder: Optional[SetupSettingsBuilder] = None,
     symbols: SymbolTable = None,
     fs_location_info: FileSystemLocationInfo = ARBITRARY_FS_LOCATION_INFO,
 ):
     super().__init__(
         pre_contents_population_action=pre_contents_population_action,
         hds_contents=hds_contents,
         sds_contents=sds_contents_before_main,
         non_hds_contents=non_hds_contents,
         tcds_contents=tcds_contents,
         os_services=os_services,
         process_execution_settings=process_execution_settings,
         default_environ_getter=default_environ_getter,
         symbols=symbols,
         fs_location_info=fs_location_info,
     )
     self.initial_settings_builder = settings_handlers.builder_from_optional(
         settings_builder)
예제 #6
0
 def __init__(self,
              pre_contents_population_action: TcdsAction = TcdsAction(),
              hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
              sds_contents: sds_populator.SdsPopulator = sds_populator.empty(),
              non_hds_contents: non_hds_populator.NonHdsPopulator = non_hds_populator.empty(),
              tcds_contents: tcds_populators.TcdsPopulator = tcds_populators.empty(),
              post_sds_population_action: TcdsAction = TcdsAction(),
              act_result_producer: ActResultProducer = ActResultProducerFromActResult(),
              os_services: OsServices = os_services_access.new_for_current_os(),
              process_execution_settings: ProcessExecutionSettings = ProcessExecutionSettings.null(),
              default_environ_getter: DefaultEnvironGetter = get_empty_environ,
              symbols: SymbolTable = None,
              fs_location_info: FileSystemLocationInfo = ARBITRARY_FS_LOCATION_INFO,
              ):
     super().__init__(pre_contents_population_action=pre_contents_population_action,
                      sds_contents=sds_contents,
                      hds_contents=hds_contents,
                      non_hds_contents=non_hds_contents,
                      tcds_contents=tcds_contents,
                      post_sds_population_action=post_sds_population_action,
                      os_services=os_services,
                      process_execution_settings=process_execution_settings,
                      default_environ_getter=default_environ_getter,
                      symbols=symbols,
                      fs_location_info=fs_location_info)
     self.act_result_producer = act_result_producer
예제 #7
0
def arrangement(
    pre_contents_population_action: TcdsAction = TcdsAction(),
    hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
    sds_contents_before_main: sds_populator.SdsPopulator = sds_populator.empty(
    ),
    non_hds_contents_before_main: non_hds_populator.
    NonHdsPopulator = non_hds_populator.empty(),
    tcds_contents: tcds_populators.TcdsPopulator = tcds_populators.empty(),
    act_result_producer: ActResultProducer = ActResultProducerFromActResult(),
    os_services: OsServices = new_for_current_os(),
    process_execution_settings:
    ProcessExecutionSettings = ProcessExecutionSettings.null(),
    default_environ_getter: DefaultEnvironGetter = get_empty_environ,
    symbols: SymbolTable = None,
) -> ArrangementPostAct:
    return ArrangementPostAct(
        pre_contents_population_action=pre_contents_population_action,
        hds_contents=hds_contents,
        sds_contents=sds_contents_before_main,
        non_hds_contents=non_hds_contents_before_main,
        tcds_contents=tcds_contents,
        act_result_producer=act_result_producer,
        os_services=os_services,
        process_execution_settings=process_execution_settings,
        default_environ_getter=default_environ_getter,
        symbols=symbols)
예제 #8
0
 def __init__(self,
              hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
              process_execution_settings: ProcessExecutionSettings = ProcessExecutionSettings.null(),
              default_environ_getter: DefaultEnvironGetter = get_empty_environ,
              ):
     self.hds_contents = hds_contents
     self.process_execution_settings = process_execution_settings
     self.default_environ_getter = default_environ_getter
예제 #9
0
def home_directory_structure(contents: HdsPopulator = hds_populators.empty(),
                             prefix: str = program_info.PROGRAM_NAME + '-test-hds-') \
        -> HomeDs:
    with tempfile.TemporaryDirectory(prefix=prefix + '-case') as case_dir_name:
        with tempfile.TemporaryDirectory(prefix=prefix +
                                         '-act') as act_dir_name:
            hds = HomeDs(case_dir=resolved_path(case_dir_name),
                         act_dir=resolved_path(act_dir_name))
            contents.populate_hds(hds)
            yield hds
예제 #10
0
 def __init__(self,
              source: ParseSource,
              act_phase_source_lines: List[str],
              hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
              os_services: OsServices = os_services_access.new_for_current_os(),
              ):
     self.hds_contents = hds_contents
     self.source = source
     self.act_phase_source_lines = act_phase_source_lines
     self.os_services = os_services
예제 #11
0
    def test_populate_hds(self):
        # ARRANGE #
        populator = sut.empty()
        expectation = f_asrt.dir_is_empty()

        with home_directory_structure() as hds:
            # ACT #
            populator.populate_hds(hds)
            # ASSERT #
            expectation.apply_with_message(self, hds.case_dir,
                                           'contents of HDS/case dir')
예제 #12
0
 def __init__(self,
              pre_contents_population_action: TcdsAction = TcdsAction(),
              hds_contents_before: hds_populators.
              HdsPopulator = hds_populators.empty(),
              sds_contents_before: sds_populator.
              SdsPopulator = sds_populator.empty(),
              pre_action_action: TcdsAction = TcdsAction(),
              symbols: SymbolTable = None):
     self.pre_contents_population_action = pre_contents_population_action
     self.hds_contents_before = hds_contents_before
     self.sds_contents_before = sds_contents_before
     self.pre_action_action = pre_action_action
     self.symbols = symbol_table_from_none_or_value(symbols)
예제 #13
0
 def arrangement(
         self,
         pre_contents_population_action: TcdsAction = TcdsAction(),
         hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
         sds_contents_before_main: sds_populator.
     SdsPopulator = sds_populator.empty(),
         tcds_contents: tcds_populators.TcdsPopulator = tcds_populators.
     empty(),
         environ: Optional[Dict[str, str]] = None,
         default_environ_getter: DefaultEnvironGetter = get_empty_environ,
         os_services: OsServices = new_for_current_os(),
         symbols: SymbolTable = None):
     raise NotImplementedError()
예제 #14
0
 def __init__(
         self,
         tcds_contents: tcds_populators.TcdsPopulator = tcds_populators.
     empty(),
         hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
         non_hds_contents: non_hds_populator.
     NonHdsPopulator = non_hds_populator.empty(),
         pre_population_action: PlainTcdsAction = PlainTcdsAction(),
         post_population_action: PlainTcdsAction = PlainTcdsAction(),
 ):
     self.hds_contents = hds_contents
     self.non_hds_contents = non_hds_contents
     self.tcds_contents = tcds_contents
     self.pre_population_action = pre_population_action
     self.post_population_action = post_population_action
예제 #15
0
 def _check_both_single_and_multiple_line_source(
         self,
         instruction_argument_source_template: str,
         act_phase_source_lines: List[str],
         symbol_usages: Assertion[Sequence[SymbolUsage]],
         expected_command: Callable[[TestCaseDs], Assertion[Command]],
         hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
 ):
     self.helper.check_both_single_and_multiple_line_source(
         self,
         instruction_argument_source_template,
         act_phase_source_lines=act_phase_source_lines,
         symbol_usages=symbol_usages,
         expected_command=expected_command,
         hds_contents=hds_contents)
예제 #16
0
 def __init__(
         self,
         tcds_contents: tcds_populators.TcdsPopulator = tcds_populators.
     empty(),
         hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
         non_hds_contents: non_hds_populator.
     NonHdsPopulator = non_hds_populator.empty(),
         act_result: ActResultProducer = ActResultProducerFromActResult(),
         pre_population_action: PlainTcdsAction = PlainTcdsAction(),
         post_population_action: PlainTcdsAction = PlainTcdsAction(),
 ):
     self.hds_contents = hds_contents
     self.non_hds_contents = non_hds_contents
     self.tcds_contents = tcds_contents
     self.act_result = act_result
     self.pre_population_action = pre_population_action
     self.post_population_action = post_population_action
예제 #17
0
 def arrangement(self,
                 pre_contents_population_action: TcdsAction = TcdsAction(),
                 hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
                 sds_contents_before_main: sds_populator.SdsPopulator = sds_populator.empty(),
                 tcds_contents: tcds_populators.TcdsPopulator = tcds_populators.empty(),
                 environ: Optional[Dict[str, str]] = None,
                 default_environ_getter: DefaultEnvironGetter = get_empty_environ,
                 os_services: OsServices = new_for_current_os(),
                 symbols: SymbolTable = None):
     return ic.Arrangement(pre_contents_population_action=pre_contents_population_action,
                           hds_contents=hds_contents,
                           sds_contents_before_main=sds_contents_before_main,
                           tcds_contents=tcds_contents,
                           process_execution_settings=ProcessExecutionSettings.from_non_immutable(environ=environ),
                           default_environ_getter=default_environ_getter,
                           os_services=os_services,
                           symbols=symbols)
예제 #18
0
 def _sub_test__copy_file(
         self,
         src_rel_option: rel_opt_conf.RelativityOptionConfigurationRelHds,
         dst_rel_option: rel_opt_conf.RelativityOptionConfigurationForRelNonHds,
         src_file_name: str,
         dst_file_name: str,
         expected_destination_dir_contents: DirContents,
         sds_populator_before_main: sds_populator.SdsPopulator,
         hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
 ):
     arguments = args.copy(src_rel_option.path_argument_of_rel_name(src_file_name),
                           dst_rel_option.path_argument_of_rel_name(dst_file_name))
     for parser_case in _EXECUTION_CHECKERS:
         with self.subTest(parser=parser_case.name,
                           arguments=arguments.as_str):
             symbols_in_arrangement = SymbolContext.symbol_table_of_contexts(
                 src_rel_option.symbols.contexts_for_arrangement() +
                 dst_rel_option.symbols.contexts_for_arrangement()
             )
             expected_symbol_usages = asrt.matches_sequence(
                 src_rel_option.symbols.usage_expectation_assertions() +
                 dst_rel_option.symbols.usage_expectation_assertions()
             )
             parser_case.value.check__w_source_variants(
                 self,
                 arguments.as_str,
                 Arrangement.phase_agnostic(
                     tcds=TcdsArrangement(
                         pre_population_action=MAKE_SUB_DIR_OF_SDS_CURRENT_DIRECTORY,
                         hds_contents=hds_contents,
                         sds_contents=sds_populator_before_main,
                     ),
                     symbols=symbols_in_arrangement,
                 ),
                 MultiSourceExpectation.phase_agnostic(
                     symbol_usages=expected_symbol_usages,
                     main_result=asrt.is_none,
                     main_side_effects_on_sds=sds_contents_check.non_hds_dir_contains_exactly(
                         dst_rel_option.root_dir__non_hds,
                         expected_destination_dir_contents),
                 ),
             )
예제 #19
0
 def __init__(
         self,
         tcds_contents: tcds_populators.TcdsPopulator = tcds_populators.
     empty(),
         hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
         non_hds_contents: non_hds_populator.
     NonHdsPopulator = non_hds_populator.empty(),
         sds_contents: sds_populator.SdsPopulator = sds_populator.empty(),
         act_result: Optional[ActResultProducer] = None,
         pre_population_action: PlainTcdsAction = PlainTcdsAction(),
         post_population_action: PlainTcdsAction = PlainTcdsAction(),
 ):
     self.hds_contents = hds_contents
     self.sds_contents = sds_contents
     self.non_hds_contents = non_hds_populator.multiple(
         [non_hds_contents, sds_contents])
     self.tcds_contents = tcds_contents
     self.act_result = act_result
     self.pre_population_action = pre_population_action
     self.post_population_action = post_population_action
예제 #20
0
def arrangement_w_tcds(
    hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
    symbol_table: Optional[SymbolTable] = None,
    process_execution:
    ProcessExecutionArrangement = ProcessExecutionArrangement(
        process_execution_settings=proc_exe_env_for_test()),
    act_exe_input: AtcExeInputArr = AtcExeInputArr(),
    post_sds_action: PlainTcdsAction = PlainTcdsAction(),
    mem_buff_size: int = 2**10,
) -> Arrangement:
    return Arrangement(
        tcds=TcdsArrangementPreAct(
            hds_contents=hds_contents,
            post_population_action=post_sds_action,
        ),
        symbols=symbol_table,
        process_execution=process_execution,
        atc_exe_input=act_exe_input,
        mem_buff_size=mem_buff_size,
    )
예제 #21
0
def tcds_with_act_as_curr_dir(
        hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
        sds_contents: sds_populator.SdsPopulator = sds_populator.empty(),
        non_hds_contents: non_hds_populator.NonHdsPopulator = non_hds_populator.empty(),
        tcds_contents: tcds_populators.TcdsPopulator = tcds_populators.empty(),
        pre_contents_population_action: TcdsAction = TcdsAction(),
        symbols: SymbolTable = None) -> ContextManager[PathResolvingEnvironmentPreOrPostSds]:
    symbols = symbol_table_from_none_or_value(symbols)
    prefix = strftime(program_info.PROGRAM_NAME + '-test-%Y-%m-%d-%H-%M-%S', localtime())
    with home_directory_structure(prefix=prefix + '-home') as hds:
        with sandbox_directory_structure(prefix=prefix + "-sds-") as sds:
            tcds = TestCaseDs(hds, sds)
            ret_val = PathResolvingEnvironmentPreOrPostSds(tcds, symbols)
            with preserved_cwd():
                os.chdir(str(sds.act_dir))
                pre_contents_population_action.apply(ret_val)
                hds_contents.populate_hds(hds)
                sds_contents.populate_sds(sds)
                non_hds_contents.populate_non_hds(sds)
                tcds_contents.populate_tcds(tcds)
                yield ret_val
예제 #22
0
def arrangement_w_tcds(
    tcds_contents: tcds_populators.TcdsPopulator = tcds_populators.empty(),
    hds_contents: hds_populators.HdsPopulator = hds_populators.empty(),
    non_hds_contents: non_hds_populator.NonHdsPopulator = non_hds_populator.
    empty(),
    act_result: Optional[ActResultProducer] = None,
    pre_population_action: PlainTcdsAction = PlainTcdsAction(),
    post_population_action: PlainTcdsAction = PlainTcdsAction(),
    symbols: Optional[SymbolTable] = None,
    process_execution:
    ProcessExecutionArrangement = ProcessExecutionArrangement(),
) -> Arrangement:
    """
    :return: An Arrangement with will create a TCDS
    """
    tcds = TcdsArrangement(
        hds_contents=hds_contents,
        non_hds_contents=non_hds_contents,
        tcds_contents=tcds_contents,
        act_result=act_result,
        pre_population_action=pre_population_action,
        post_population_action=post_population_action,
    )
    return Arrangement(symbols, tcds, process_execution)