baseimage-tutorial-framework/lib/tfw/components/ide_event_handler/test_filemanager.py
2019-06-11 11:11:29 +02:00

98 lines
2.9 KiB
Python

# pylint: disable=redefined-outer-name
from secrets import token_urlsafe
from pathlib import Path
from shutil import rmtree
from os.path import join, realpath
from os import mkdir, rmdir, remove, symlink
import pytest
from filemanager import FileManager
WORKDIR = realpath('test_filemanager')
def workdir_pref(path):
return join(WORKDIR, path)
@pytest.fixture(scope='module')
def manager():
dirs = []
mkdir(WORKDIR)
for i in range(3):
node = workdir_pref('dir_'+str(i).zfill(2))
mkdir(node)
Path(join(node, 'empty.txt')).touch()
Path(join(node, 'empty.bin')).touch()
dirs.append(node)
yield FileManager(dirs[0], dirs[:-1], exclude=['*/dir_01/*', '*.bin'])
rmtree(WORKDIR)
@pytest.mark.parametrize('subdir', ['dir_00', 'dir_01'])
def test_select_allowed_dirs(manager, subdir):
manager.workdir = workdir_pref(subdir)
assert manager.workdir == workdir_pref(subdir)
newdir = workdir_pref(join(subdir, 'deep'))
mkdir(newdir)
manager.workdir = newdir
assert manager.workdir == newdir
rmdir(newdir)
@pytest.mark.parametrize('excdir', ['/', workdir_pref('dir_02')])
def test_select_excluded_dirs(manager, excdir):
allowed = manager.allowed_directories
with pytest.raises(OSError):
manager.workdir = excdir
assert manager.workdir != excdir
manager.allowed_directories = allowed+[excdir]
manager.workdir = excdir
assert manager.workdir == excdir
manager.allowed_directories = allowed
@pytest.mark.parametrize('filename', ['another.txt', '*.txt'])
def test_select_allowed_files(manager, filename):
manager.workdir = workdir_pref('dir_00')
newfile = workdir_pref(join('dir_00', filename))
Path(newfile).touch()
assert filename in manager.files
manager.filename = filename
assert manager.filename == filename
remove(newfile)
@pytest.mark.parametrize('path', [
['dir_00', 'illegal.bin'],
['dir_01', 'legal.txt']
])
def test_select_excluded_files(manager, path):
manager.workdir = workdir_pref(path[0])
newfile = workdir_pref(join(path[0], path[1]))
Path(newfile).touch()
assert path[1] not in manager.files
with pytest.raises(OSError):
manager.filename = path[1]
remove(newfile)
@pytest.mark.parametrize('path', [
['dir_02/empty.txt', 'dir_00/link.txt'],
['dir_01/empty.txt', 'dir_00/link.bin']
])
def test_select_excluded_symlinks(manager, path):
manager.workdir = workdir_pref('dir_00')
link = workdir_pref(path[1])
symlink(workdir_pref(path[0]), link)
assert path[1] not in manager.files
remove(link)
def test_read_write_file(manager):
for _ in range(128):
manager.workdir = workdir_pref('dir_00')
manager.filename = 'empty.txt'
content = token_urlsafe(32)
manager.file_contents = content
assert manager.file_contents == content
with open(workdir_pref('dir_00/empty.txt'), "r") as ifile:
assert ifile.read() == content