def file_must_exist_as_regular_source_cases(file_name: str) -> Sequence[NameAndValue[FileSpecAbsStx]]:
    file_name_syntax = StringLiteralAbsStx(file_name, QuoteType.HARD)

    explicit_file_contents = str_src_abs_stx.StringSourceOfStringAbsStx.of_plain(
        StringLiteralAbsStx.empty_string()
    )
    explicit_dir_contents = LiteralFilesSourceAbsStx(())

    return [
        NameAndValue(
            'regular / explicit append',
            regular_file_spec(file_name_syntax,
                              FileContentsExplicitAbsStx(ModificationType.CREATE,
                                                         explicit_file_contents)),
        ),
        NameAndValue(
            'dir / implicit empty',
            dir_spec(file_name_syntax,
                     DirContentsEmptyAbsStx()),
        ),
        NameAndValue(
            'dir / explicit creation',
            dir_spec(file_name_syntax,
                     DirContentsExplicitAbsStx(ModificationType.CREATE,
                                               explicit_dir_contents)),
        ),
    ]
Example #2
0
    def test_dir(self):
        # ARRANGE #
        to_append_file = fs.File('file-to-append',
                                 'contents of file to append')
        pre_existing_file = fs.File('pre-existing',
                                    'contents of pre existing file')

        append_single_file__contents_syntax = abs_stx.DirContentsExplicitAbsStx(
            ModificationType.APPEND,
            abs_stx.LiteralFilesSourceAbsStx([
                abs_stx.regular_file_spec(
                    file_name_arg(to_append_file.name),
                    abs_stx.FileContentsExplicitAbsStx(
                        ModificationType.CREATE,
                        str_src_abs_stx.StringSourceOfStringAbsStx.of_str(
                            to_append_file.contents, QuoteType.HARD)))
            ]))
        target_dir_name = 'destination-dir'

        contents_cases: Sequence[AppendDirContentsCase] = [
            AppendDirContentsCase(
                'empty',
                [],
                [to_append_file],
            ),
            AppendDirContentsCase(
                'non-empty',
                [pre_existing_file],
                [pre_existing_file, to_append_file],
            ),
        ]
        for target_location_case in target_locations():
            syntax = abs_stx.LiteralFilesSourceAbsStx([
                abs_stx.dir_spec(
                    file_name_arg(
                        target_location_case.target_rel_path(target_dir_name)),
                    append_single_file__contents_syntax,
                )
            ])
            for contents_case in contents_cases:
                # ACT & ASSERT #
                integration_check.CHECKER.check__abs_stx__layout__std_source_variants(
                    self,
                    syntax, [
                        target_location_case.file_for_leaf(
                            contents_case.original(target_dir_name))
                    ],
                    arrangement_w_tcds(),
                    MultiSourceExpectation(execution=ExecutionExpectation(
                        main_result=asrt_fs.dir_contains_exactly_2([
                            target_location_case.file_for_leaf(
                                fs.Dir(
                                    target_dir_name, contents_case.
                                    expected_contents_after_modification))
                        ]))),
                    sub_test_identifiers={
                        'contents': contents_case.name,
                        'target_location': target_location_case.name
                    })
Example #3
0
 def test_directory(self):
     # ARRANGE #
     valid_file_name = StringLiteralAbsStx('valid_file_name')
     for validation_case in file_src_validation_cases.failing_validation_cases():
         symbol_context = validation_case.value.symbol_context
         for contents_case in ContentsCase.cases():
             invalid_file_spec = abs_stx.dir_spec(
                 valid_file_name,
                 abs_stx.DirContentsExplicitAbsStx(contents_case.modification_type,
                                                   symbol_context.abstract_syntax),
             )
             # ACT & ASSERT #
             self._check_case(
                 invalid_file_spec,
                 contents_case,
                 validation_case,
             )
    def test_illegal_path_with_regular_file_as_dir_component(self):
        # ARRANGE #
        existing_regular_file = fs.File.empty('regular-file')
        file_name = str(PurePosixPath(existing_regular_file.name, 'destination'))

        file_name_syntax = StringLiteralAbsStx(file_name, QuoteType.HARD)

        explicit_file_contents = str_src_abs_stx.StringSourceOfStringAbsStx.of_plain(
            StringLiteralAbsStx.empty_string()
        )
        file_spec_cases = [
            NameAndValue(
                'regular',
                regular_file_spec(
                    file_name_syntax,
                    FileContentsExplicitAbsStx(ModificationType.APPEND,
                                               explicit_file_contents),
                ),
            ),
            NameAndValue(
                'dir',
                dir_spec(
                    file_name_syntax,
                    DirContentsExplicitAbsStx(ModificationType.APPEND,
                                              LiteralFilesSourceAbsStx(())),
                ),
            ),
        ]
        for file_spec_case in file_spec_cases:
            with self.subTest(file_spec=file_spec_case.name):
                # ACT & ASSERT #
                integration_check.CHECKER.check__abs_stx(
                    self,
                    LiteralFilesSourceAbsStx([file_spec_case.value]),
                    [existing_regular_file],
                    arrangement_w_tcds(),
                    Expectation(
                        parse=IS_AT_END_OF_1ST_LNE,
                        execution=ExecutionExpectation(
                            is_hard_error=asrt_text_doc.is_any_text(),
                        )
                    ),
                )
 def test_dir(self):
     file_name = 'destination'
     file_name_syntax = StringLiteralAbsStx(file_name, QuoteType.HARD)
     explicit_dir_contents = LiteralFilesSourceAbsStx(())
     file_spec_syntax = dir_spec(
         file_name_syntax,
         DirContentsExplicitAbsStx(ModificationType.APPEND,
                                   explicit_dir_contents),
     )
     for dir_contents_case in file_must_exist_as_dir(file_name):
         with self.subTest(dir_contents=dir_contents_case.name):
             integration_check.CHECKER.check__abs_stx(
                 self,
                 LiteralFilesSourceAbsStx([file_spec_syntax]),
                 dir_contents_case.value,
                 arrangement_w_tcds(),
                 Expectation(
                     parse=IS_AT_END_OF_1ST_LNE,
                     execution=ExecutionExpectation(
                         is_hard_error=asrt_text_doc.is_any_text(),
                     )
                 ),
             )
Example #6
0
def create_path_cases(
        created_leaf_file_name: str) -> Sequence[FileSpecAndExpectedCase]:
    explicit_file_contents = 'explicit file contents'
    name_of_created_file_in_dir = 'file-in-dir.txt'
    name_of_sub_dir = 'created-sub-dir'
    file_in_created_dir__file_spec = abs_stx.regular_file_spec(
        StringLiteralAbsStx(name_of_created_file_in_dir, QuoteType.HARD),
        abs_stx.FileContentsEmptyAbsStx(),
    )
    return [
        FileSpecAndExpectedCase(
            'regular / implicit empty',
            FileType.REGULAR,
            abs_stx.FileContentsEmptyAbsStx(),
            fs.File.empty(created_leaf_file_name),
        ),
        FileSpecAndExpectedCase(
            'regular / explicit contents',
            FileType.REGULAR,
            abs_stx.FileContentsExplicitAbsStx(
                ModificationType.CREATE,
                str_src_abs_stx.StringSourceOfStringAbsStx.of_str_hard(
                    explicit_file_contents)),
            fs.File(created_leaf_file_name, explicit_file_contents),
        ),
        FileSpecAndExpectedCase(
            'dir / implicit empty',
            FileType.DIR,
            abs_stx.DirContentsEmptyAbsStx(),
            fs.Dir.empty(created_leaf_file_name),
        ),
        FileSpecAndExpectedCase(
            'dir / explicit contents',
            FileType.DIR,
            abs_stx.DirContentsExplicitAbsStx(
                ModificationType.CREATE,
                abs_stx.LiteralFilesSourceAbsStx(
                    [file_in_created_dir__file_spec])),
            fs.Dir(created_leaf_file_name,
                   [fs.File.empty(name_of_created_file_in_dir)]),
        ),
        FileSpecAndExpectedCase(
            'dir / explicit contents / nested dirs',
            FileType.DIR,
            abs_stx.DirContentsExplicitAbsStx(
                ModificationType.CREATE,
                abs_stx.LiteralFilesSourceAbsStx([
                    abs_stx.dir_spec(
                        file_name_arg(name_of_sub_dir),
                        abs_stx.DirContentsExplicitAbsStx(
                            ModificationType.CREATE,
                            abs_stx.LiteralFilesSourceAbsStx([
                                file_in_created_dir__file_spec,
                            ])),
                    )
                ])),
            fs.Dir(created_leaf_file_name, [
                fs.Dir(name_of_sub_dir,
                       [fs.File.empty(name_of_created_file_in_dir)])
            ]),
        ),
    ]