2 from __future__ import unicode_literals
4 from librarian.parser import WLDocument
5 from librarian.html import extract_annotations
6 from nose.tools import eq_
9 def _test_annotation(expected, got, name):
10 assert got[0].startswith('anchor-'), "%s: Unexpected anchor: '%s', should begin with 'anchor-'" % (name, got[0])
11 eq_(expected[0], got[1], "%s: Unexpected type, expected '%s', got '%s'" % (name, expected[0], got[1]))
12 eq_(expected[1], got[2], "%s: Unexpected qualifier, expected '%s', got '%s'" % (name, expected[1], got[2]))
13 eq_(expected[2], got[3], "%s: Unexpected text representation, expected '%s', got '%s'" %
14 (name, expected[2], got[3]))
15 exp_html = '<div class="fn-%s">%s</div>' % (expected[0], expected[3])
16 eq_(exp_html, got[4], "%s: Unexpected html representation, expected '%s', got '%s'" % (name, exp_html, got[4]))
19 def test_annotations():
30 ('<pr>Definiendum --- definiens.</pr>', (
33 'Definiendum \u2014 definiens.',
34 '<p>Definiendum \u2014 definiens.</p>'
38 ('<pt><slowo_obce>Definiendum</slowo_obce> --- definiens.</pt>', (
41 'Definiendum \u2014 definiens.',
42 '<p><em class="foreign-word">Definiendum</em> \u2014 definiens.</p>'
44 'Standard footnote.'),
46 ('<pr>Definiendum (łac.) --- definiens.</pr>', (
49 'Definiendum (łac.) \u2014 definiens.',
50 '<p>Definiendum (łac.) \u2014 definiens.</p>'
52 'Plain footnote with qualifier'),
54 ('<pe><slowo_obce>Definiendum</slowo_obce> (łac.) --- definiens.</pe>', (
57 'Definiendum (łac.) \u2014 definiens.',
58 '<p><em class="foreign-word">Definiendum</em> (łac.) \u2014 definiens.</p>'
60 'Standard footnote with qualifier.'),
62 ('<pt> <slowo_obce>Definiendum</slowo_obce> (daw.) --- definiens.</pt>', (
65 'Definiendum (daw.) \u2014 definiens.',
66 '<p> <em class="foreign-word">Definiendum</em> (daw.) \u2014 definiens.</p>'
68 'Standard footnote with leading whitespace and qualifier.'),
70 ('<pr>Definiendum (łac.) --- <slowo_obce>definiens</slowo_obce>.</pr>', (
73 'Definiendum (łac.) \u2014 definiens.',
74 '<p>Definiendum (łac.) \u2014 <em class="foreign-word">definiens</em>.</p>'
76 'Plain footnote with qualifier and some emphasis.'),
78 ('<pe><slowo_obce>Definiendum</slowo_obce> (łac.) --- <slowo_obce>definiens</slowo_obce>.</pe>', (
81 'Definiendum (łac.) \u2014 definiens.',
82 '<p><em class="foreign-word">Definiendum</em> (łac.) \u2014 <em class="foreign-word">definiens</em>.</p>'
84 'Standard footnote with qualifier and some emphasis.'),
86 ('<pe>Definiendum (łac.) --- definiens (some) --- more text.</pe>', (
89 'Definiendum (łac.) \u2014 definiens (some) \u2014 more text.',
90 '<p>Definiendum (łac.) \u2014 definiens (some) \u2014 more text.</p>',
92 'Footnote with a second parentheses and mdash.'),
94 ('<pe><slowo_obce>gemajna</slowo_obce> (daw., z niem. <slowo_obce>gemein</slowo_obce>: zwykły) --- '
95 'częściej: gemajn, szeregowiec w wojsku polskim cudzoziemskiego autoramentu.</pe>', (
98 'gemajna (daw., z niem. gemein: zwykły) \u2014 częściej: gemajn, '
99 'szeregowiec w wojsku polskim cudzoziemskiego autoramentu.',
100 '<p><em class="foreign-word">gemajna</em> (daw., z niem. <em class="foreign-word">gemein</em>: zwykły) '
101 '\u2014 częściej: gemajn, szeregowiec w wojsku polskim cudzoziemskiego autoramentu.</p>'
103 'Footnote with multiple and qualifiers and emphasis.'),
107 xml_src = '''<utwor><akap> %s </akap></utwor>''' % "".join(
108 t[0] for t in annotations)
109 html = WLDocument.from_string(xml_src, parse_dublincore=False).as_html().get_file()
110 res_annotations = list(extract_annotations(html))
112 for i, (src, expected, name) in enumerate(annotations):
113 yield _test_annotation, expected, res_annotations[i], name