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
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
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)
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
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)
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
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)
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
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
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
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')
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)
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()
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
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)
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
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)
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), ), )
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
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, )
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
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)