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