From cf7da1843c45a4c2df7a749f7886a2d2ba0ee92a Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 15 Apr 2024 19:25:40 +0200 Subject: Adding upstream version 7.2.6. Signed-off-by: Daniel Baumann --- tests/test_versioning.py | 120 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 tests/test_versioning.py (limited to 'tests/test_versioning.py') diff --git a/tests/test_versioning.py b/tests/test_versioning.py new file mode 100644 index 0000000..ae159df --- /dev/null +++ b/tests/test_versioning.py @@ -0,0 +1,120 @@ +"""Test the versioning implementation.""" + +import pickle +import shutil + +import pytest + +from sphinx.testing.util import SphinxTestApp +from sphinx.versioning import add_uids, get_ratio, merge_doctrees + +app = original = original_uids = None + + +@pytest.fixture(scope='module', autouse=True) +def _setup_module(rootdir, sphinx_test_tempdir): + global app, original, original_uids + srcdir = sphinx_test_tempdir / 'test-versioning' + if not srcdir.exists(): + shutil.copytree(rootdir / 'test-versioning', srcdir) + app = SphinxTestApp(srcdir=srcdir) + app.builder.env.app = app + app.connect('doctree-resolved', on_doctree_resolved) + app.build() + original = doctrees['original'] + original_uids = [n.uid for n in add_uids(original, is_paragraph)] + yield + app.cleanup() + + +doctrees = {} + + +def on_doctree_resolved(app, doctree, docname): + doctrees[docname] = doctree + + +def is_paragraph(node): + return node.__class__.__name__ == 'paragraph' + + +def test_get_ratio(): + assert get_ratio('', 'a') + assert get_ratio('a', '') + + +def test_add_uids(): + assert len(original_uids) == 3 + + +def test_picklablility(): + # we have to modify the doctree so we can pickle it + copy = original.copy() + copy.reporter = None + copy.transformer = None + copy.settings.warning_stream = None + copy.settings.env = None + copy.settings.record_dependencies = None + loaded = pickle.loads(pickle.dumps(copy, pickle.HIGHEST_PROTOCOL)) + assert all(getattr(n, 'uid', False) for n in loaded.findall(is_paragraph)) + + +def test_modified(): + modified = doctrees['modified'] + new_nodes = list(merge_doctrees(original, modified, is_paragraph)) + uids = [n.uid for n in modified.findall(is_paragraph)] + assert not new_nodes + assert original_uids == uids + + +def test_added(): + added = doctrees['added'] + new_nodes = list(merge_doctrees(original, added, is_paragraph)) + uids = [n.uid for n in added.findall(is_paragraph)] + assert len(new_nodes) == 1 + assert original_uids == uids[:-1] + + +def test_deleted(): + deleted = doctrees['deleted'] + new_nodes = list(merge_doctrees(original, deleted, is_paragraph)) + uids = [n.uid for n in deleted.findall(is_paragraph)] + assert not new_nodes + assert original_uids[::2] == uids + + +def test_deleted_end(): + deleted_end = doctrees['deleted_end'] + new_nodes = list(merge_doctrees(original, deleted_end, is_paragraph)) + uids = [n.uid for n in deleted_end.findall(is_paragraph)] + assert not new_nodes + assert original_uids[:-1] == uids + + +def test_insert(): + insert = doctrees['insert'] + new_nodes = list(merge_doctrees(original, insert, is_paragraph)) + uids = [n.uid for n in insert.findall(is_paragraph)] + assert len(new_nodes) == 1 + assert original_uids[0] == uids[0] + assert original_uids[1:] == uids[2:] + + +def test_insert_beginning(): + insert_beginning = doctrees['insert_beginning'] + new_nodes = list(merge_doctrees(original, insert_beginning, is_paragraph)) + uids = [n.uid for n in insert_beginning.findall(is_paragraph)] + assert len(new_nodes) == 1 + assert len(uids) == 4 + assert original_uids == uids[1:] + assert original_uids[0] != uids[0] + + +def test_insert_similar(): + insert_similar = doctrees['insert_similar'] + new_nodes = list(merge_doctrees(original, insert_similar, is_paragraph)) + uids = [n.uid for n in insert_similar.findall(is_paragraph)] + assert len(new_nodes) == 1 + assert new_nodes[0].rawsource == 'Anyway I need more' + assert original_uids[0] == uids[0] + assert original_uids[1:] == uids[2:] -- cgit v1.2.3