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 runTest(self): # ARRANGE # checked_dir_rel_conf = relativity_options.conf_rel_any(RelOptionType.REL_ACT) checked_dir_populator = checked_dir_rel_conf.populator_for_relativity_option_root( DirContents([ File.empty('a-file-so-that-checked-dir-is-not-empty') ] ) ) file_matcher = FileMatcherSymbolContextOfPrimitiveConstant( 'MATCHER', True, ) after_bin_op = 'after bin op' fm_argument = fm_args.conjunction([ fm_args.SymbolReference(file_matcher.name), fm_args.Custom(after_bin_op), ]) # ACT & ASSERT # for quantifier in Quantifier: arguments = args.Quantification(quantifier, fm_argument) with self.subTest(quantifier): # ACT & ASSERT # integration_check.CHECKER__PARSE_SIMPLE.check( self, source=arguments.as_remaining_source, input_=model.model_constructor__non_recursive( path_sdvs.of_rel_option(checked_dir_rel_conf.relativity) ), arrangement=arrangement_w_tcds( symbols=file_matcher.symbol_table, tcds_contents=checked_dir_populator ), expectation=Expectation( ParseExpectation( source=asrt_source.is_at_line( current_line_number=1, remaining_part_of_current_line=fm_argument.operator + ' ' + after_bin_op), symbol_references=file_matcher.references_assertion ), ExecutionExpectation( main_result=asrt_matching_result.matches_value(file_matcher.result_value) ) ), )
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 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 )
def model_constructor_for_checked_dir__non_recursive( self) -> ModelConstructor: return model.model_constructor__non_recursive(self.dir_arg.path_sdv)