import os
import sys
from pathlib import Path
assert (root / 'hello.txt').exists() == True
assert (root / 'subdir').exists() == True
assert (root / 'subdir' / 'deep').exists() == True
assert (root / 'nonexistent').exists() == False
assert (root / 'nonexistent' / 'file.txt').exists() == False
assert (root / 'hello.txt').is_file() == True
assert (root / 'subdir').is_file() == False
assert (root / 'nonexistent').is_file() == False
assert (root / 'subdir').is_dir() == True
assert (root / 'hello.txt').is_dir() == False
assert (root / 'subdir' / 'deep').is_dir() == True
assert (root / 'nonexistent').is_dir() == False
assert (root / 'hello.txt').read_text() == 'hello world\n'
assert (root / 'empty.txt').read_text() == ''
assert (root / 'subdir' / 'nested.txt').read_text() == 'nested content'
assert (root / 'subdir' / 'deep' / 'file.txt').read_text() == 'deep file'
assert (root / 'data.bin').read_bytes() == b'\x00\x01\x02\x03'
assert (root / 'empty.txt').read_bytes() == b''
assert (root / 'hello.txt').read_bytes() == b'hello world\n'
(root / 'new_file.txt').write_text('created by test')
assert (root / 'new_file.txt').read_text() == 'created by test'
(root / 'hello.txt').write_text('overwritten')
assert (root / 'hello.txt').read_text() == 'overwritten'
(root / 'binary.dat').write_bytes(b'\xff\xfe\xfd')
assert (root / 'binary.dat').read_bytes() == b'\xff\xfe\xfd'
st = (root / 'readonly.txt').stat()
assert st.st_size == 16
entries = sorted([e.name for e in root.iterdir()])
assert 'hello.txt' in entries
assert 'subdir' in entries
assert 'data.bin' in entries
assert 'empty.txt' in entries
nested_entries = sorted([e.name for e in (root / 'subdir').iterdir()])
assert 'nested.txt' in nested_entries
assert 'deep' in nested_entries
for entry in (root / 'subdir').iterdir():
if entry.name == 'nested.txt':
assert entry.read_text() == 'nested content'
(root / 'new_dir').mkdir()
assert (root / 'new_dir').is_dir() == True
(root / 'a' / 'b' / 'c').mkdir(parents=True)
assert (root / 'a' / 'b' / 'c').is_dir() == True
(root / 'positional_parent' / 'child').mkdir(0o777, True)
assert (root / 'positional_parent' / 'child').is_dir() == True
(root / 'new_dir').mkdir(exist_ok=True)
(root / 'd' / 'e' / 'f').mkdir(parents=True)
assert (root / 'd' / 'e' / 'f').is_dir() == True
(root / 'new_dir').mkdir(parents=True, exist_ok=True)
assert (root / 'new_dir').is_dir() == True
(root / 'a' / 'b' / 'c').mkdir(parents=True, exist_ok=True)
assert (root / 'a' / 'b' / 'c').is_dir() == True
(root / 'a' / 'b' / 'new_child').mkdir(parents=True)
assert (root / 'a' / 'b' / 'new_child').is_dir() == True
(root / 'to_delete.txt').write_text('delete me')
assert (root / 'to_delete.txt').exists() == True
(root / 'to_delete.txt').unlink()
assert (root / 'to_delete.txt').exists() == False
(root / 'empty_dir').mkdir()
assert (root / 'empty_dir').is_dir() == True
(root / 'empty_dir').rmdir()
assert (root / 'empty_dir').exists() == False
(root / 'old_name.txt').write_text('rename test')
(root / 'old_name.txt').rename(root / 'new_name.txt')
assert (root / 'old_name.txt').exists() == False
assert (root / 'new_name.txt').read_text() == 'rename test'
n = (root / 'unicode.txt').write_text('hello')
assert n == 5, f'write_text ASCII returns char count: {n}'
if sys.platform != 'win32':
n = (root / 'unicode.txt').write_text('\U0001f600') assert n == 1, f'write_text emoji returns char count not byte count: {n}'
n = (root / 'unicode.txt').write_text('\u00e9') assert n == 1, f'write_text accented char returns char count: {n}'
n = (root / 'unicode.txt').write_text('\u4e16\u754c') assert n == 2, f'write_text CJK returns char count: {n}'
(root / 'mkp_test').mkdir()
(root / 'mkp_test' / 'child.txt').write_text('data')
(root / 'mkp_test' / 'child.txt').unlink()
(root / 'mkp_test').rmdir()
assert not (root / 'mkp_test').exists(), 'deleted dir should not exist'
(root / 'mkp_test' / 'sub' / 'deep').mkdir(parents=True)
assert (root / 'mkp_test' / 'sub' / 'deep').is_dir()
try:
(root / 'hello.txt' / 'sub').mkdir(parents=True)
assert False, 'expected error when mkdir parents through a file'
except (OSError, NotADirectoryError):
pass
p = (root / 'hello.txt').resolve()
assert p.name == 'hello.txt'
p2 = (root / 'subdir').absolute()
assert p2.name == 'subdir'
full = root / 'subdir' / 'nested.txt'
assert full.name == 'nested.txt'
assert full.suffix == '.txt'
assert full.stem == 'nested'
os.mkdir(root / 'os_dir')
assert (root / 'os_dir').is_dir() == True
(root / 'os_dir' / 'one.txt').write_text('1')
(root / 'os_dir' / 'two.txt').write_text('2')
os.mkdir(root / 'os_dir' / 'sub')
assert sorted(os.listdir(root / 'os_dir')) == ['one.txt', 'sub', 'two.txt']
listing = os.listdir(str(root / 'os_dir'))
assert type(listing) is list
for entry in listing:
assert type(entry) is str
assert sorted(listing) == ['one.txt', 'sub', 'two.txt']
assert os.listdir(root / 'os_dir' / 'sub') == []
posix_messages = sys.platform != 'win32'
try:
os.listdir(root / 'os_dir' / 'missing')
assert False, 'expected FileNotFoundError'
except FileNotFoundError as e:
if posix_messages:
assert str(e) == f"[Errno 2] No such file or directory: '{root / 'os_dir' / 'missing'}'"
try:
os.listdir(root / 'os_dir' / 'one.txt')
assert False, 'expected NotADirectoryError'
except NotADirectoryError as e:
if posix_messages:
assert str(e) == f"[Errno 20] Not a directory: '{root / 'os_dir' / 'one.txt'}'"
st = os.stat(root / 'readonly.txt')
assert st.st_size == 16
st = os.stat(root / 'readonly.txt', dir_fd=None, follow_symlinks=True)
assert st.st_size == 16
try:
os.stat(root / 'os_dir' / 'missing')
assert False, 'expected FileNotFoundError'
except FileNotFoundError as e:
if posix_messages:
assert str(e) == f"[Errno 2] No such file or directory: '{root / 'os_dir' / 'missing'}'"
try:
os.mkdir(root / 'os_dir')
assert False, 'expected FileExistsError'
except FileExistsError as e:
if posix_messages:
assert str(e) == f"[Errno 17] File exists: '{root / 'os_dir'}'"
os.makedirs(root / 'os_deep' / 'x' / 'y')
assert (root / 'os_deep' / 'x' / 'y').is_dir() == True
os.makedirs(root / 'os_deep' / 'x' / 'y', exist_ok=True)
try:
os.makedirs(root / 'os_deep' / 'x' / 'y')
assert False, 'expected FileExistsError'
except FileExistsError as e:
if posix_messages:
assert str(e) == f"[Errno 17] File exists: '{root / 'os_deep' / 'x' / 'y'}'"
os.remove(root / 'os_dir' / 'one.txt')
assert (root / 'os_dir' / 'one.txt').exists() == False
os.unlink(root / 'os_dir' / 'two.txt')
assert (root / 'os_dir' / 'two.txt').exists() == False
try:
os.remove(root / 'os_dir' / 'one.txt')
assert False, 'expected FileNotFoundError'
except FileNotFoundError as e:
if posix_messages:
assert str(e) == f"[Errno 2] No such file or directory: '{root / 'os_dir' / 'one.txt'}'"
os.rmdir(root / 'os_dir' / 'sub')
assert (root / 'os_dir' / 'sub').exists() == False
(root / 'os_move_a.txt').write_text('move me')
os.rename(root / 'os_move_a.txt', root / 'os_move_b.txt')
assert (root / 'os_move_a.txt').exists() == False
assert (root / 'os_move_b.txt').read_text() == 'move me'
os.replace(root / 'os_move_b.txt', root / 'os_move_c.txt')
assert (root / 'os_move_b.txt').exists() == False
assert (root / 'os_move_c.txt').read_text() == 'move me'