1from pathlib import Path
2import runpy
3import shutil
4from tempfile import TemporaryDirectory
5import unittest
6import xml.etree.ElementTree as ET
7
8from native_xml import ns
9
10ROOT = Path(__file__).resolve().parent.parent
11FIXTURE = ROOT / 'corpus/to-do-list'
12compare = runpy.run_path(str(ROOT / 'tools/verify-document.py'))['compare']
13
14
15def items(read):
16 """Each paragraph's text, list kind and tags' names, in page order."""
17 page, = (ET.parse(path).getroot() for path in sorted(read.glob('page-*.xml')))
18 names = {d.get('index'): d.get('name') for d in page.findall('one:TagDef', ns)}
19 result = []
20 for oe in page.iter('{%s}OE' % ns['one']):
21 marker = oe.find('one:List', ns)
22 kind = None if marker is None else list(marker)[0].tag.split('}')[1]
23 tags = [names[tag.get('index')] for tag in oe.findall('one:Tag', ns)]
24 result.append((oe.find('one:T', ns).text, kind, tags))
25 return result
26
27
28class ToDoListTest(unittest.TestCase):
29 def test_onenote_tags_lists_without_removing_them(self):
30 self.assertEqual(items(FIXTURE / 'native/read'), [
31 ('Bullet item', 'Bullet', ['To Do']),
32 ('First numbered', 'Number', ['To Do']),
33 ('Second numbered', 'Number', ['To Do']),
34 ('Nested numbered', 'Number', []),
35 ('Restarted at three', 'Number', ['To Do']),
36 ('Nested plain', None, []),
37 ('Plain again', None, ['To Do']),
38 ])
39
40 def test_snowbound_to_do_and_bulleted_lists_reopen_natively(self):
41 with TemporaryDirectory() as temporary:
42 read = Path(temporary) / 'read'
43 shutil.copytree(FIXTURE / 'cold/read', read)
44 compare(FIXTURE / 'candidate', read)
45 self.assertEqual(items(FIXTURE / 'cold/read'), [
46 ('Bullet item', None, ['To Do']),
47 ('First numbered', None, ['To Do']),
48 ('Second numbered', 'Bullet', []),
49 ('Nested numbered', 'Bullet', []),
50 ('Restarted at three', 'Number', []),
51 ('Nested plain', None, []),
52 ('Plain again', None, []),
53 ])
54
55
56if __name__ == '__main__':
57 unittest.main()