| 1 | from pathlib import Path |
| 2 | import runpy |
| 3 | import shutil |
| 4 | from tempfile import TemporaryDirectory |
| 5 | import unittest |
| 6 | import xml.etree.ElementTree as ET |
| 7 | |
| 8 | from native_xml import ns |
| 9 | |
| 10 | ROOT = Path(__file__).resolve().parent.parent |
| 11 | FIXTURE = ROOT / 'corpus/page-background' |
| 12 | compare = runpy.run_path(str(ROOT / 'tools/verify-document.py'))['compare'] |
| 13 | |
| 14 | |
| 15 | class 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 | |
| 51 | if __name__ == '__main__': |
| 52 | unittest.main() |