def test_access_of_sub_dir_for_failure_message_rendering(self): # ARRANGE # root_1__file = File.empty('f-1') root_2__dir = Dir('d-2', []) arguments = args.matches_full( fc_args.FilesCondition([fc_args.FileCondition(root_1__file.name)]) ) checked_dir = DirArgumentHelper(RelOptionType.REL_TMP, 'checked-dir') # ACT & ASSERT # integration_check.CHECKER__PARSE_FULL.check__w_source_variants( self, arguments.as_arguments, input_=model_constructor__recursive(checked_dir.path_sdv), arrangement=Arrangement( tcds=checked_dir.tcds_arrangement_dir_with_contents([ root_1__file, root_2__dir, ]) ), expectation=Expectation( parse=ParseExpectation( symbol_references=asrt.is_empty_sequence, ), execution=PRIM_AND_EXE_EXPECTATION__NON_MATCH.execution, primitive=PRIM_AND_EXE_EXPECTATION__NON_MATCH.primitive, ), )
def runTest(self): # ARRANGE # checked_dir = DirArgumentHelper(RelOptionType.REL_TMP, 'a-dir') unconditionally_hard_error_file_matcher = FileMatcherSymbolContext.of_primitive( 'unconditionally_hard_error_file_matcher', matchers.MatcherThatReportsHardError()) file_in_model = 'a-file' # ACT & ASSERT # check_non_full_and_full( self, fc_args.FilesCondition([ fc_args.FileCondition( file_in_model, fm_args.SymbolReferenceWReferenceSyntax( unconditionally_hard_error_file_matcher.name)), ]), model_constructor__non_recursive(checked_dir.path_sdv), Arrangement( symbols=unconditionally_hard_error_file_matcher.symbol_table, tcds=checked_dir.tcds_arrangement_dir_with_contents( [File.empty(file_in_model)])), Expectation( ParseExpectation( symbol_references=asrt.matches_singleton_sequence( unconditionally_hard_error_file_matcher. reference_assertion)), ExecutionExpectation( is_hard_error=asrt_text_doc.is_any_text())), )
def test_1_file_in_fc_wo_matcher(self): # ARRANGE # name_of_file_in_fc = 'file-in-files-condition' name_of_file_not_in_fc_1 = 'file-not-in-files-condition-1' name_of_file_not_in_fc_2 = 'file-not-in-files-condition-2' arguments = args.matches_full( fc_args.FilesCondition([fc_args.FileCondition(name_of_file_in_fc)]) ) checked_dir = DirArgumentHelper(RelOptionType.REL_TMP, 'dir-w-more-than-one-file') execution_cases = [ NExArr( '2 files: one file name matches', PRIM_AND_EXE_EXPECTATION__NON_MATCH, Arrangement( tcds=checked_dir.tcds_arrangement_dir_with_contents([ File.empty(name_of_file_in_fc), File.empty(name_of_file_not_in_fc_1), ]) ) ), NExArr( '2 files: no file name matches', PRIM_AND_EXE_EXPECTATION__NON_MATCH, Arrangement( tcds=checked_dir.tcds_arrangement_dir_with_contents([ File.empty(name_of_file_not_in_fc_1), File.empty(name_of_file_not_in_fc_2), ]) ) ), NExArr( '3 files: one file name matches', PRIM_AND_EXE_EXPECTATION__NON_MATCH, Arrangement( tcds=checked_dir.tcds_arrangement_dir_with_contents([ File.empty(name_of_file_in_fc), File.empty(name_of_file_not_in_fc_1), File.empty(name_of_file_not_in_fc_2), ]) ) ) ] # ACT & ASSERT # integration_check.CHECKER__PARSE_FULL.check_multi__w_source_variants( self, arguments.as_arguments, symbol_references=asrt.is_empty_sequence, input_=model_constructor__non_recursive(checked_dir.path_sdv), execution=execution_cases )
def test_empty(self): # ARRANGE # checked_dir = DirArgumentHelper(RelOptionType.REL_TMP, 'empty-dir') # ACT & ASSERT # check_non_full_and_full( self, fc_args.FilesCondition([]), model_constructor__non_recursive(checked_dir.path_sdv), Arrangement( tcds=checked_dir.tcds_arrangement_dir_with_contents([])), Expectation( ParseExpectation(symbol_references=asrt.is_empty_sequence), ExecutionExpectation(main_result=asrt.equals(True)), ), )
def __init__( self, files_matcher_name: str = 'the_files_matcher', checked_dir_location: RelOptionType = RelOptionType.REL_TMP, checked_dir_name: str = 'checked-dir', ): self.files_matcher_name = files_matcher_name self._dir_arg_helper = DirArgumentHelper(checked_dir_location, checked_dir_name)
def test_empty_fc(self): # ARRANGE # checked_dir = DirArgumentHelper(RelOptionType.REL_TMP, 'dir-w-single-file') # ACT & ASSERT # integration_check.CHECKER__PARSE_FULL.check__w_source_variants( self, args.matches_full(fc_args.FilesConditionArg.empty()).as_arguments, model_constructor__non_recursive(checked_dir.path_sdv), Arrangement( tcds=checked_dir.tcds_arrangement_dir_with_contents([ File.empty('a-file') ]) ), Expectation( ParseExpectation( symbol_references=asrt.is_empty_sequence ), exe_w_added_header_matcher(MATCHES_FULL__STRUCTURE_NAME, NON_MATCHING_EXECUTION_EXPECTATION), ), )
def test_recursive_model(self): # ARRANGE # file_in_sub_dir = File.empty('file-in-sub-dir') dir_in_checked_dir = Dir( 'top-level-dir', [file_in_sub_dir], ) checked_dir = DirArgumentHelper(RelOptionType.REL_TMP, 'the-dir') # ACT & ASSERT # check_non_full_and_full( self, fc_args.FilesCondition([ fc_args.FileCondition(dir_in_checked_dir.name), fc_args.FileCondition(file_in_sub_dir.name), ]), model_constructor__recursive(checked_dir.path_sdv), Arrangement(tcds=checked_dir.tcds_arrangement_dir_with_contents( [dir_in_checked_dir])), Expectation( ParseExpectation(symbol_references=asrt.is_empty_sequence), ExecutionExpectation(main_result=asrt.equals(False)), ), )
def runTest(self): # ARRANGE # checked_dir = DirArgumentHelper(RelOptionType.REL_ACT, 'a-dir') fc_file_1 = 'file-1' fc_file_2 = 'file-2' file_name_not_in_fc = 'not-in-fc' unconditionally_matching_file_matcher = FileMatcherSymbolContext.of_primitive_constant( 'unconditionally_matching_file_matcher', True) unconditionally_matching_file_matcher_sym_ref_arg = fm_args.SymbolReferenceWReferenceSyntax( unconditionally_matching_file_matcher.name) unconditionally_matching_file_matcher_sym_ref_assertion = unconditionally_matching_file_matcher.reference_assertion symbol_table_with_unconditionally_matching_file_matcher = unconditionally_matching_file_matcher.symbol_table files_condition_w_2_files_cases = [ NIE( 'no file matcher', asrt.is_empty_sequence, fc_args.FilesCondition([ fc_args.FileCondition(fc_file_1), fc_args.FileCondition(fc_file_2), ]), ), NIE( 'file matcher on one file', asrt.matches_sequence([ unconditionally_matching_file_matcher_sym_ref_assertion, ]), fc_args.FilesCondition([ fc_args.FileCondition( fc_file_1, unconditionally_matching_file_matcher_sym_ref_arg), fc_args.FileCondition(fc_file_2), ]), ), NIE( 'file matcher on all files', asrt.matches_sequence([ unconditionally_matching_file_matcher_sym_ref_assertion, unconditionally_matching_file_matcher_sym_ref_assertion, ]), fc_args.FilesCondition([ fc_args.FileCondition( fc_file_1, unconditionally_matching_file_matcher_sym_ref_arg), fc_args.FileCondition( fc_file_2, unconditionally_matching_file_matcher_sym_ref_arg), ]), ), ] expectation_of_matching_giving_false = PrimAndExeExpectation.of_exe( main_result=asrt.equals(False)) model_contents_cases = [ NExArr( 'model is empty', expectation_of_matching_giving_false, Arrangement( symbols= symbol_table_with_unconditionally_matching_file_matcher, tcds=checked_dir.tcds_arrangement_dir_with_contents([])), ), NExArr( 'model contains single file with name in FILES-CONDITION', expectation_of_matching_giving_false, Arrangement( symbols= symbol_table_with_unconditionally_matching_file_matcher, tcds=checked_dir.tcds_arrangement_dir_with_contents( [File.empty(fc_file_1)])), ), NExArr( 'model contains single file with name not in FILES-CONDITION', expectation_of_matching_giving_false, Arrangement( symbols= symbol_table_with_unconditionally_matching_file_matcher, tcds=checked_dir.tcds_arrangement_dir_with_contents( [File.empty(file_name_not_in_fc)])), ), ] for files_condition_w_2_files_case in files_condition_w_2_files_cases: with self.subTest(files_condition_w_2_files_case.name): # ACT & ASSERT # check_non_full_and_full__multi( self, files_condition_w_2_files_case.input_value, symbol_references=files_condition_w_2_files_case. expected_value, model=model_constructor__non_recursive( checked_dir.path_sdv), execution=model_contents_cases, )
def test_multiple_files(self): # ARRANGE # name_of_regular_file = 'a-regular-file' name_of_dir = 'a-dir' checked_dir = DirArgumentHelper(RelOptionType.REL_TMP, 'dir-w-multiple-files') arrangement = Arrangement( IS_REGULAR_AND_IS_DIR_MATCHER_SYMBOLS, checked_dir.tcds_arrangement_dir_with_contents([ File.empty(name_of_regular_file), Dir.empty(name_of_dir), ])) cases = [ Case( 'no file matchers', fc_args.FilesCondition([ fc_args.FileCondition(name_of_regular_file), fc_args.FileCondition(name_of_dir), ]), arrangement, Expectation( ParseExpectation(symbol_references=asrt.is_empty_sequence), MATCHING_EXECUTION_EXPECTATION, ), ), Case( 'with matcher on regular file', fc_args.FilesCondition([ fc_args.FileCondition( name_of_regular_file, fm_args.SymbolReferenceWReferenceSyntax( IS_REGULAR_FILE_FILE_MATCHER.name)), fc_args.FileCondition(name_of_dir), ]), arrangement, Expectation( ParseExpectation( symbol_references=asrt.matches_singleton_sequence( IS_REGULAR_FILE_FILE_MATCHER.reference_assertion)), MATCHING_EXECUTION_EXPECTATION, ), ), Case( 'with matcher on dir', fc_args.FilesCondition([ fc_args.FileCondition(name_of_regular_file), fc_args.FileCondition( name_of_dir, fm_args.SymbolReferenceWReferenceSyntax( IS_DIR_FILE_MATCHER.name)), ]), arrangement, Expectation( ParseExpectation( symbol_references=asrt.matches_singleton_sequence( IS_DIR_FILE_MATCHER.reference_assertion)), MATCHING_EXECUTION_EXPECTATION, ), ), Case( 'with matcher on both files', fc_args.FilesCondition([ fc_args.FileCondition( name_of_regular_file, fm_args.SymbolReferenceWReferenceSyntax( IS_REGULAR_FILE_FILE_MATCHER.name)), fc_args.FileCondition( name_of_dir, fm_args.SymbolReferenceWReferenceSyntax( IS_DIR_FILE_MATCHER.name)), ]), arrangement, Expectation( ParseExpectation(symbol_references=asrt.matches_sequence([ IS_REGULAR_FILE_FILE_MATCHER.reference_assertion, IS_DIR_FILE_MATCHER.reference_assertion, ])), MATCHING_EXECUTION_EXPECTATION, ), ), ] for case in cases: with self.subTest(case.name): # ACT & ASSERT # check_non_full_and_full( self, case.files_condition, model_constructor__non_recursive(checked_dir.path_sdv), case.arrangement, case.expectation, )
def test_single_file(self): # ARRANGE # name_of_file_in_model = 'file-in-model' name_of_file_not_in_model = 'file-not-in-model' checked_dir = DirArgumentHelper(RelOptionType.REL_TMP, 'dir-w-single-file') cases = [ Case( 'no file matcher - different names', fc_args.FilesCondition([ fc_args.FileCondition(name_of_file_not_in_model), ]), Arrangement( IS_REGULAR_AND_IS_DIR_MATCHER_SYMBOLS, checked_dir.tcds_arrangement_dir_with_contents( [File.empty(name_of_file_in_model)])), Expectation( ParseExpectation(symbol_references=asrt.is_empty_sequence), NON_MATCHING_EXECUTION_EXPECTATION, ), ), Case( 'same names - non-matching matcher/actual is dir', fc_args.FilesCondition([ fc_args.FileCondition( name_of_file_in_model, fm_args.SymbolReferenceWReferenceSyntax( IS_REGULAR_FILE_FILE_MATCHER.name)), ]), Arrangement( IS_REGULAR_AND_IS_DIR_MATCHER_SYMBOLS, checked_dir.tcds_arrangement_dir_with_contents( [Dir.empty(name_of_file_in_model)])), Expectation( ParseExpectation( symbol_references=asrt.matches_singleton_sequence( IS_REGULAR_FILE_FILE_MATCHER.reference_assertion)), NON_MATCHING_EXECUTION_EXPECTATION, ), ), Case( 'same names - non-matching matcher/actual is regular file', fc_args.FilesCondition([ fc_args.FileCondition( name_of_file_in_model, fm_args.SymbolReferenceWReferenceSyntax( IS_DIR_FILE_MATCHER.name)), ]), Arrangement( IS_REGULAR_AND_IS_DIR_MATCHER_SYMBOLS, checked_dir.tcds_arrangement_dir_with_contents( [File.empty(name_of_file_in_model)])), Expectation( ParseExpectation( symbol_references=asrt.matches_singleton_sequence( IS_DIR_FILE_MATCHER.reference_assertion)), NON_MATCHING_EXECUTION_EXPECTATION, ), ), ] for case in cases: with self.subTest(case.name): # ACT & ASSERT # check_non_full_and_full( self, case.files_condition, model_constructor__non_recursive(checked_dir.path_sdv), case.arrangement, case.expectation, )
def test_2_files_in_fc(self): # ARRANGE # name_of_file_in_fc__1 = 'file-in-files-condition-1' name_of_file_in_fc__2 = 'file-in-files-condition-2' name_of_file_not_in_fc__1 = 'file-not-in-files-condition-1' name_of_file_not_in_fc__2 = 'file-not-in-files-condition-2' file_matcher_name = 'the_file_matcher' arguments = args.matches_full( fc_args.FilesCondition([ fc_args.FileCondition(name_of_file_in_fc__1, fm_args.SymbolReferenceWReferenceSyntax(file_matcher_name)), fc_args.FileCondition(name_of_file_in_fc__2), ]) ) checked_dir = DirArgumentHelper(RelOptionType.REL_TMP, 'dir-w-more-than-two-files') execution_cases = [ NExArr( '3 files: one file name matches, and matcher matches', PRIM_AND_EXE_EXPECTATION__NON_MATCH, Arrangement( symbols=is_regular_file_matcher(file_matcher_name).symbol_table, tcds=checked_dir.tcds_arrangement_dir_with_contents([ File.empty(name_of_file_in_fc__1), File.empty(name_of_file_not_in_fc__1), File.empty(name_of_file_not_in_fc__2), ]) ) ), NExArr( '3 files: both file names matches, and matcher matches', PRIM_AND_EXE_EXPECTATION__NON_MATCH, Arrangement( symbols=is_regular_file_matcher(file_matcher_name).symbol_table, tcds=checked_dir.tcds_arrangement_dir_with_contents([ File.empty(name_of_file_in_fc__1), File.empty(name_of_file_in_fc__2), File.empty(name_of_file_not_in_fc__1), ]) ) ), NExArr( '3 files: both file name matches, but matcher does not match', PRIM_AND_EXE_EXPECTATION__NON_MATCH, Arrangement( symbols=is_dir_file_matcher(file_matcher_name).symbol_table, tcds=checked_dir.tcds_arrangement_dir_with_contents([ File.empty(name_of_file_in_fc__1), File.empty(name_of_file_in_fc__2), File.empty(name_of_file_not_in_fc__1), ]) ) ), NExArr( '4 files: both file name matches, and matcher matches', PRIM_AND_EXE_EXPECTATION__NON_MATCH, Arrangement( symbols=is_regular_file_matcher(file_matcher_name).symbol_table, tcds=checked_dir.tcds_arrangement_dir_with_contents([ File.empty(name_of_file_in_fc__1), File.empty(name_of_file_in_fc__2), File.empty(name_of_file_not_in_fc__1), File.empty(name_of_file_not_in_fc__2), ]) ) ), ] # ACT & ASSERT # integration_check.CHECKER__PARSE_FULL.check_multi__w_source_variants( self, arguments.as_arguments, symbol_references=asrt.matches_sequence([ is_reference_to_file_matcher(file_matcher_name), ]), input_=model_constructor__non_recursive(checked_dir.path_sdv), execution=execution_cases )
def test_1_file_in_fc_w_matcher(self): # ARRANGE # name_of_file_in_fc = 'file-in-files-condition' name_of_file_not_in_fc_1 = 'file-not-in-files-condition-1' name_of_file_not_in_fc_2 = 'file-not-in-files-condition-2' arguments = args.matches_non_full( fc_args.FilesCondition([ fc_args.FileCondition(name_of_file_in_fc, fm_args.SymbolReferenceWReferenceSyntax(IS_REGULAR_FILE_FILE_MATCHER.name)), ]) ) checked_dir = DirArgumentHelper(RelOptionType.REL_TMP, 'dir-w-more-than-one-file') execution_cases = [ NExArr( '2 files: one file name matches, and matcher matches', PRIM_AND_EXE_EXPECTATION__MATCH, Arrangement( symbols=IS_REGULAR_FILE_FILE_MATCHER.symbol_table, tcds=checked_dir.tcds_arrangement_dir_with_contents([ File.empty(name_of_file_in_fc), File.empty(name_of_file_not_in_fc_1), ]) ) ), NExArr( '2 files: one file name matches, but matcher does not match', PRIM_AND_EXE_EXPECTATION__NON_MATCH, Arrangement( symbols=is_dir_file_matcher(IS_REGULAR_FILE_FILE_MATCHER.name).symbol_table, tcds=checked_dir.tcds_arrangement_dir_with_contents([ File.empty(name_of_file_in_fc), File.empty(name_of_file_not_in_fc_1), ]) ) ), NExArr( '3 files: one file name matches, and matcher matches', PRIM_AND_EXE_EXPECTATION__MATCH, Arrangement( symbols=is_dir_file_matcher(IS_REGULAR_FILE_FILE_MATCHER.name).symbol_table, tcds=checked_dir.tcds_arrangement_dir_with_contents([ Dir.empty(name_of_file_in_fc), File.empty(name_of_file_not_in_fc_1), File.empty(name_of_file_not_in_fc_2), ]) ) ) ] # ACT & ASSERT # integration_check.CHECKER__PARSE_FULL.check_multi__w_source_variants( self, arguments.as_arguments, symbol_references=asrt.matches_sequence([ IS_REGULAR_FILE_FILE_MATCHER.reference_assertion, ]), input_=model_constructor__non_recursive(checked_dir.path_sdv), execution=execution_cases )