|
1 | 1 | import datetime
|
2 | 2 | from io import BytesIO
|
3 | 3 | import re
|
4 |
| -import sys |
5 | 4 | import tempfile
|
| 5 | +import xml.etree.ElementTree |
6 | 6 | import xml.parsers.expat
|
7 | 7 |
|
8 | 8 | import numpy as np
|
@@ -294,16 +294,41 @@ def test_svg_metadata():
|
294 | 294 | fig.savefig(fd, format='svg', metadata=metadata)
|
295 | 295 | buf = fd.getvalue().decode()
|
296 | 296 |
|
297 |
| - # Check things that are easy, single or multi-value entries. |
| 297 | + SVGNS = '{http://www.w3.org/2000/svg}' |
| 298 | + RDFNS = '{http://www.w3.org/1999/02/22-rdf-syntax-ns#}' |
| 299 | + CCNS = '{http://creativecommons.org/ns#}' |
| 300 | + DCNS = '{http://purl.org/dc/elements/1.1/}' |
| 301 | + |
| 302 | + root = xml.etree.ElementTree.fromstring(buf) |
| 303 | + rdf, = root.findall(f'./{SVGNS}metadata/{RDFNS}RDF') |
| 304 | + |
| 305 | + # Check things that are single entries. |
| 306 | + titles = [node.text for node in root.findall(f'./{SVGNS}title')] |
| 307 | + assert titles == [metadata['Title']] |
| 308 | + types = [node.attrib[f'{RDFNS}resource'] |
| 309 | + for node in rdf.findall(f'./{CCNS}Work/{DCNS}type')] |
| 310 | + assert types == [metadata['Type']] |
298 | 311 | for k in ['Description', *single_value]:
|
299 |
| - if sys.platform == 'win32': |
300 |
| - assert metadata[k].replace('\n', '\r\n') in buf |
301 |
| - else: |
302 |
| - assert metadata[k] in buf |
| 312 | + if k == 'Type': |
| 313 | + continue |
| 314 | + values = [node.text |
| 315 | + for node in rdf.findall(f'./{CCNS}Work/{DCNS}{k.lower()}')] |
| 316 | + assert values == [metadata[k]] |
| 317 | + |
| 318 | + # Check things that are multi-value entries. |
303 | 319 | for k in multi_value:
|
304 |
| - for v in metadata[k]: |
305 |
| - assert v in buf |
| 320 | + if k == 'Keywords': |
| 321 | + continue |
| 322 | + values = [ |
| 323 | + node.text |
| 324 | + for node in rdf.findall( |
| 325 | + f'./{CCNS}Work/{DCNS}{k.lower()}/{CCNS}Agent/{DCNS}title')] |
| 326 | + assert values == metadata[k] |
306 | 327 |
|
307 | 328 | # Check special things.
|
308 |
| - assert '1968-08-01' in buf # Start date |
309 |
| - assert '1968-08-02T01:02:03' in buf # End date |
| 329 | + dates = [node.text for node in rdf.findall(f'./{CCNS}Work/{DCNS}date')] |
| 330 | + assert dates == ['1968-08-01/1968-08-02T01:02:03'] |
| 331 | + |
| 332 | + values = [node.text for node in |
| 333 | + rdf.findall(f'./{CCNS}Work/{DCNS}subject/{RDFNS}Bag/{RDFNS}li')] |
| 334 | + assert values == metadata['Keywords'] |
0 commit comments