sphinx/tests/test_util_fileutil.py

104 lines
3.6 KiB
Python
Raw Normal View History

2022-02-19 21:05:56 -06:00
"""Tests sphinx.util.fileutil functions."""
from unittest import mock
2018-02-19 07:39:14 -06:00
from sphinx.jinja2glue import BuiltinTemplateLoader
from sphinx.util.fileutil import copy_asset, copy_asset_file
class DummyTemplateLoader(BuiltinTemplateLoader):
def __init__(self):
super().__init__()
builder = mock.Mock()
builder.config.templates_path = []
2021-07-07 11:29:38 -05:00
builder.app.translator = None
self.init(builder)
2017-01-03 07:24:00 -06:00
def test_copy_asset_file(tempdir):
renderer = DummyTemplateLoader()
# copy normal file
2017-01-03 07:24:00 -06:00
src = (tempdir / 'asset.txt')
src.write_text('# test data')
2017-01-03 07:24:00 -06:00
dest = (tempdir / 'output.txt')
copy_asset_file(src, dest)
assert dest.exists()
assert src.read_text(encoding='utf8') == dest.read_text(encoding='utf8')
# copy template file
2017-01-03 07:24:00 -06:00
src = (tempdir / 'asset.txt_t')
src.write_text('# {{var1}} data')
2017-01-03 07:24:00 -06:00
dest = (tempdir / 'output.txt_t')
copy_asset_file(src, dest, {'var1': 'template'}, renderer)
assert not dest.exists()
2017-01-03 07:24:00 -06:00
assert (tempdir / 'output.txt').exists()
assert (tempdir / 'output.txt').read_text(encoding='utf8') == '# template data'
# copy template file to subdir
2017-01-03 07:24:00 -06:00
src = (tempdir / 'asset.txt_t')
src.write_text('# {{var1}} data')
2017-01-03 07:24:00 -06:00
subdir1 = (tempdir / 'subdir')
subdir1.makedirs()
copy_asset_file(src, subdir1, {'var1': 'template'}, renderer)
assert (subdir1 / 'asset.txt').exists()
assert (subdir1 / 'asset.txt').read_text(encoding='utf8') == '# template data'
# copy template file without context
2017-01-03 07:24:00 -06:00
src = (tempdir / 'asset.txt_t')
subdir2 = (tempdir / 'subdir2')
subdir2.makedirs()
copy_asset_file(src, subdir2)
assert not (subdir2 / 'asset.txt').exists()
assert (subdir2 / 'asset.txt_t').exists()
assert (subdir2 / 'asset.txt_t').read_text(encoding='utf8') == '# {{var1}} data'
2016-06-26 21:54:42 -05:00
2017-01-03 07:24:00 -06:00
def test_copy_asset(tempdir):
2016-06-26 21:54:42 -05:00
renderer = DummyTemplateLoader()
# prepare source files
2017-01-03 07:24:00 -06:00
source = (tempdir / 'source')
2016-06-26 21:54:42 -05:00
source.makedirs()
(source / 'index.rst').write_text('index.rst')
(source / 'foo.rst_t').write_text('{{var1}}.rst')
(source / '_static').makedirs()
(source / '_static' / 'basic.css').write_text('basic.css')
(source / '_templates').makedirs()
(source / '_templates' / 'layout.html').write_text('layout.html')
(source / '_templates' / 'sidebar.html_t').write_text('sidebar: {{var2}}')
# copy a single file
2017-01-03 07:24:00 -06:00
assert not (tempdir / 'test1').exists()
copy_asset(source / 'index.rst', tempdir / 'test1')
assert (tempdir / 'test1').exists()
assert (tempdir / 'test1/index.rst').exists()
2016-06-26 21:54:42 -05:00
# copy directories
2017-01-03 07:24:00 -06:00
destdir = tempdir / 'test2'
2016-06-26 21:54:42 -05:00
copy_asset(source, destdir, context=dict(var1='bar', var2='baz'), renderer=renderer)
assert (destdir / 'index.rst').exists()
assert (destdir / 'foo.rst').exists()
assert (destdir / 'foo.rst').read_text(encoding='utf8') == 'bar.rst'
2016-06-26 21:54:42 -05:00
assert (destdir / '_static' / 'basic.css').exists()
assert (destdir / '_templates' / 'layout.html').exists()
assert (destdir / '_templates' / 'sidebar.html').exists()
assert (destdir / '_templates' / 'sidebar.html').read_text(encoding='utf8') == 'sidebar: baz'
2016-06-26 21:54:42 -05:00
# copy with exclusion
def excluded(path):
return ('sidebar.html' in path or 'basic.css' in path)
2017-01-03 07:24:00 -06:00
destdir = tempdir / 'test3'
copy_asset(source, destdir, excluded,
context=dict(var1='bar', var2='baz'), renderer=renderer)
2016-06-26 21:54:42 -05:00
assert (destdir / 'index.rst').exists()
assert (destdir / 'foo.rst').exists()
assert not (destdir / '_static' / 'basic.css').exists()
assert (destdir / '_templates' / 'layout.html').exists()
assert not (destdir / '_templates' / 'sidebar.html').exists()