about summary refs log tree commit diff
path: root/.venv/lib/python3.12/site-packages/orgparse/tests/test_data.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/orgparse/tests/test_data.py')
-rw-r--r--.venv/lib/python3.12/site-packages/orgparse/tests/test_data.py154
1 files changed, 154 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/orgparse/tests/test_data.py b/.venv/lib/python3.12/site-packages/orgparse/tests/test_data.py
new file mode 100644
index 00000000..f315878e
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/orgparse/tests/test_data.py
@@ -0,0 +1,154 @@
+from glob import glob
+import os
+from pathlib import Path
+import pickle
+
+from .. import load, loads
+
+import pytest
+
+DATADIR = os.path.join(os.path.dirname(__file__), 'data')
+
+
+def load_data(path):
+    """Load data from python file"""
+    ns = {}  # type: ignore
+    # read_bytes() and compile hackery to avoid encoding issues (e.g. see 05_tags)
+    exec(compile(Path(path).read_bytes(), path, 'exec'), ns)
+    return ns['data']
+
+
+def value_from_data_key(node, key):
+    """
+    Helper function for check_data. Get value from Orgnode by key.
+    """
+    if key == 'tags_inher':
+        return node.tags
+    elif key == 'children_heading':
+        return [c.heading for c in node.children]
+    elif key in ('parent_heading',
+                 'previous_same_level_heading',
+                 'next_same_level_heading',
+                 ):
+        othernode = getattr(node, key.rsplit('_', 1)[0])
+        if othernode and not othernode.is_root():
+            return othernode.heading
+        else:
+            return
+    else:
+        return getattr(node, key)
+
+
+def data_path(dataname, ext):
+    return os.path.join(DATADIR, '{0}.{1}'.format(dataname, ext))
+
+
+def get_datanames():
+    for oname in sorted(glob(os.path.join(DATADIR, '*.org'))):
+        yield os.path.splitext(os.path.basename(oname))[0]
+
+
+@pytest.mark.parametrize('dataname', get_datanames())
+def test_data(dataname):
+    """
+    Compare parsed data from 'data/*.org' and its correct answer 'data/*.py'
+    """
+    oname = data_path(dataname, "org")
+    data = load_data(data_path(dataname, "py"))
+    root = load(oname)
+
+    for (i, (node, kwds)) in enumerate(zip(root[1:], data)):
+        for key in kwds:
+            val = value_from_data_key(node, key)
+            assert kwds[key] == val, 'check value of {0}-th node of key "{1}" from "{2}".\n\nParsed:\n{3}\n\nReal:\n{4}'.format(i, key, dataname, val, kwds[key])
+            assert type(kwds[key]) == type(val), 'check type of {0}-th node of key "{1}" from "{2}".\n\nParsed:\n{3}\n\nReal:\n{4}'.format(i, key, dataname, type(val), type(kwds[key]))
+
+    assert root.env.filename == oname
+
+
+@pytest.mark.parametrize('dataname', get_datanames())
+def test_picklable(dataname):
+    oname = data_path(dataname, "org")
+    root = load(oname)
+    pickle.dumps(root)
+
+
+
+def test_iter_node():
+    root = loads("""
+* H1
+** H2
+*** H3
+* H4
+** H5
+""")
+    node = root[1]
+    assert node.heading == 'H1'
+
+    by_iter = [n.heading for n in node]
+    assert by_iter == ['H1', 'H2', 'H3']
+
+
+def test_commented_headings_do_not_appear_as_children():
+    root = loads("""\
+* H1
+#** H2
+** H3
+#* H4
+#** H5
+* H6
+""")
+    assert root.linenumber == 1
+    top_level = root.children
+    assert len(top_level) == 2
+
+    h1 = top_level[0]
+    assert h1.heading == "H1"
+    assert h1.get_body() == "#** H2"
+    assert h1.linenumber == 1
+
+    [h3] = h1.children
+    assert h3.heading == "H3"
+    assert h3.get_body() == "#* H4\n#** H5"
+    assert h3.linenumber == 3
+
+    h6 = top_level[1]
+    assert h6.heading == "H6"
+    assert len(h6.children) == 0
+    assert h6.linenumber == 6
+
+
+def test_commented_clock_entries_are_ignored_by_node_clock():
+    root = loads("""\
+* Heading
+# * Floss
+# SCHEDULED: <2019-06-22 Sat 08:30 .+1w>
+# :LOGBOOK:
+# CLOCK: [2019-06-04 Tue 16:00]--[2019-06-04 Tue 17:00] =>  1:00
+# :END:
+""")
+    [node] = root.children[0]
+    assert node.heading == "Heading"
+    assert node.clock == []
+
+
+def test_commented_scheduled_marker_is_ignored_by_node_scheduled():
+    root = loads("""\
+* Heading
+# SCHEDULED: <2019-06-22 Sat 08:30 .+1w>
+""")
+    [node] = root.children[0]
+    assert node.heading == "Heading"
+    assert node.scheduled.start is None
+
+
+def test_commented_property_is_ignored_by_node_get_property():
+    root = loads("""\
+* Heading
+# :PROPERTIES:
+# :PROPER-TEA: backup
+# :END:
+""")
+    [node] = root.children[0]
+    assert node.heading == "Heading"
+    assert node.get_property("PROPER-TEA") is None