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/page-background'
12compare = runpy.run_path(str(ROOT / 'tools/verify-document.py'))['compare']
13
14
15class PageBackgroundTest(unittest.TestCase):
16 def test_backgrounds_read_back_as_the_menu_gave_them(self):
17 with TemporaryDirectory() as temporary:
18 read = Path(temporary) / 'read'
19 shutil.copytree(FIXTURE / 'cold/read', read)
20 compare(FIXTURE / 'candidate', read)
21 pages = {}
22 for path in sorted((FIXTURE / 'cold/read').glob('page-*.xml')):
23 page = ET.parse(path).getroot()
24 pages[page.get('name')] = page
25
26 def art(title):
27 return [(image.get('backgroundImage'), image.find('one:Size', ns).get('width'))
28 for image in pages[title].findall('one:Image', ns)]
29
30 def rules(title):
31 return pages[title].find('one:PageSettings/one:RuleLines', ns).get('visible')
32
33 def color(title):
34 return pages[title].find('one:PageSettings', ns).get('color')
35
36 ivy, sparks = [('true', '174.5')], [('true', '611.4000244140625')]
37 # Art joins a ruled page, which keeps its lines; art taken away or undone leaves none;
38 # redone, or undone after other art replaced it, the art is back.
39 self.assertEqual(art('Standard'), ivy)
40 self.assertEqual(art('Wide'), [])
41 self.assertEqual(art('College'), [])
42 self.assertEqual(art('MediumGrid'), ivy)
43 self.assertEqual(art('LargeGrid'), ivy)
44 for title in ('Standard', 'Wide', 'College', 'MediumGrid', 'LargeGrid', 'VeryLargeGrid'):
45 self.assertEqual(rules(title), 'true', title)
46 # A colour no menu offers reads back as written; art over a colour keeps it.
47 self.assertEqual(color('SmallGrid'), '#E8D8C8')
48 self.assertEqual(art('VeryLargeGrid'), sparks)
49 self.assertEqual(color('VeryLargeGrid'), '#FDFDDD')
50
51if __name__ == '__main__':
52 unittest.main()