Improve FileMetadata & tests.

This commit is contained in:
2025-07-12 20:40:35 +02:00
parent 69bb85af01
commit 2b961baa5b
2 changed files with 270 additions and 136 deletions

View File

@@ -23,7 +23,7 @@ from pathlib import Path, PurePosixPath
import pytest
from bsv.vfs import FsError, Permissions, VirtualFileSystem
from bsv.vfs import FileMetadata, FsError, Permissions, VirtualFileSystem
@pytest.fixture
@@ -53,6 +53,158 @@ def test_permissions():
assert str(perm1) == "rwxr-x-w-"
########################################################################################
# FileMetadata
def test_file_metadata():
path = PurePosixPath("/some_dir/some_file")
permissions = Permissions(0o1234)
mod_time = datetime(2025, 7, 12, 12, 34, 56, tzinfo=UTC)
file_md = FileMetadata(
path,
type="file",
permissions=permissions,
modification_time=mod_time,
byte_size=123,
)
assert file_md.path == path
assert file_md.type == "file"
assert file_md.permissions == permissions
assert file_md.modification_time == mod_time
assert file_md.byte_size == 123
assert file_md.unix_mode == "--w--wxr-T"
assert not file_md.is_hidden
assert file_md.is_file
assert not file_md.is_dir
assert not file_md.is_symlink
assert not file_md.is_other
dir_md = FileMetadata(
path,
type="dir",
permissions=permissions,
modification_time=mod_time,
byte_size=123,
)
assert dir_md.type == "dir"
assert not dir_md.is_file
assert dir_md.is_dir
assert not dir_md.is_symlink
assert not dir_md.is_other
symlink_md = FileMetadata(
path,
type="symlink",
permissions=permissions,
modification_time=mod_time,
byte_size=123,
)
assert symlink_md.type == "symlink"
assert not symlink_md.is_file
assert not symlink_md.is_dir
assert symlink_md.is_symlink
assert not symlink_md.is_other
other_md = FileMetadata(
path,
type="other",
permissions=permissions,
modification_time=mod_time,
byte_size=123,
)
assert other_md.type == "other"
assert not other_md.is_file
assert not other_md.is_dir
assert not other_md.is_symlink
assert other_md.is_other
assert FileMetadata(
PurePosixPath("/some_dir/.some_file"),
type="file",
permissions=permissions,
modification_time=mod_time,
byte_size=123,
).is_hidden
def test_file_metadata_eq():
path = PurePosixPath("/some_dir/some_file")
permissions = Permissions(0o1234)
mod_time = datetime(2025, 7, 12, 12, 34, 56, tzinfo=UTC)
md = FileMetadata(
path,
type="file",
permissions=permissions,
modification_time=mod_time,
byte_size=123,
)
assert (
FileMetadata(
path,
type="file",
permissions=permissions,
modification_time=mod_time,
byte_size=123,
)
== md
)
assert (
FileMetadata(
PurePosixPath("/some_dir/some_other_file"),
type="file",
permissions=permissions,
modification_time=mod_time,
byte_size=123,
)
!= md
)
assert (
FileMetadata(
path,
type="dir",
permissions=permissions,
modification_time=mod_time,
byte_size=123,
)
!= md
)
assert (
FileMetadata(
path,
type="file",
permissions=Permissions(0o0752),
modification_time=mod_time,
byte_size=123,
)
!= md
)
assert (
FileMetadata(
path,
type="file",
permissions=permissions,
modification_time=datetime(2025, 1, 2, 3, 4, 5),
byte_size=123,
)
!= md
)
assert (
FileMetadata(
path,
type="file",
permissions=permissions,
modification_time=mod_time,
byte_size=124,
)
!= md
)
########################################################################################
# mkdir
@@ -175,13 +327,9 @@ def test_metadata(fs: VirtualFileSystem):
assert md.path == PurePosixPath("/test_file")
assert md.permissions == file_permissions
assert md.type == "file"
assert md.is_file
assert not md.is_dir
assert not md.is_symlink
assert not md.is_other
assert md.modification_time == file_time
assert md.byte_size == len(file_content)
assert not md.is_hidden_files
assert not md.is_hidden
assert fs.metadata("/test_file") == md
assert fs.is_file("/test_file")
assert not fs.is_dir("/test_file")
@@ -194,11 +342,7 @@ def test_metadata(fs: VirtualFileSystem):
fs.mkdir("/.test_dir")
md = fs.metadata("/.test_dir")
assert md.type == "dir"
assert not md.is_file
assert md.is_dir
assert not md.is_symlink
assert not md.is_other
assert fs.metadata("/.test_dir").is_hidden_files
assert fs.metadata("/.test_dir").is_hidden
assert not fs.is_file("/.test_dir")
assert fs.is_dir("/.test_dir")
assert not fs.is_symlink("/.test_dir")
@@ -207,10 +351,6 @@ def test_metadata(fs: VirtualFileSystem):
fs.make_link("/test_link", "/link_target")
md = fs.metadata("/test_link")
assert md.type == "symlink"
assert not md.is_file
assert not md.is_dir
assert md.is_symlink
assert not md.is_other
assert not fs.is_file("/test_link")
assert not fs.is_dir("/test_link")
assert fs.is_symlink("/test_link")