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())),
        )
예제 #2
0
    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)),
         ),
     )
예제 #4
0
    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)
                        )
                    ),
                )
예제 #5
0
 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,
                )
예제 #9
0
    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
        )
예제 #10
0
    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
        )
예제 #11
0
 def model_constructor_for_checked_dir__non_recursive(
         self) -> ModelConstructor:
     return model.model_constructor__non_recursive(self.dir_arg.path_sdv)