Extracted from project "Wolnelektury.pl". Version 1.1
[librarian.git] / librarian / tests / __init__.py
1 # -*- coding: utf-8 -*-
2 import unittest
3 from os.path import dirname, join, realpath
4
5 from lxml import etree
6 from librarian import dcparser, html
7
8
9 def test_file_path(dir_name, file_name):
10     return realpath(join(dirname(__file__), 'files', dir_name, file_name))
11
12
13 class TestDCParser(unittest.TestCase):
14     KNOWN_RESULTS = (
15         ('dcparser', 'andersen_brzydkie_kaczatko.xml', {
16             'publisher': u'Fundacja Nowoczesna Polska',
17             'about': u'http://wiki.wolnepodreczniki.pl/Lektury:Andersen/Brzydkie_kaczątko',
18             'source_name': u'Andersen, Hans Christian (1805-1875), Baśnie, Gebethner i Wolff, wyd. 7, Kraków, 1925',
19             'author': u'Andersen, Hans Christian',
20             'url': u'http://wolnelektury.pl/katalog/lektura/brzydkie-kaczatko',
21             'created_at': u'2007-08-14',
22             'title': u'Brzydkie kaczątko',
23             'kind': u'Epika',
24             'source_url': u'http://www.polona.pl/dlibra/doccontent2?id=3563&dirids=4',
25             'translator': u'Niewiadomska, Cecylia',
26             'released_to_public_domain_at': u'1925-01-01',
27             'epoch': u'Romantyzm',
28             'genre': u'Baśń',
29             'technical_editor': u'Gałecki, Dariusz',
30             'license_description': u'Domena publiczna - tłumacz Cecylia Niewiadomska zm. 1925',
31         }),
32         ('dcparser', 'kochanowski_piesn7.xml', {
33             'publisher': u'Fundacja Nowoczesna Polska',
34             'about': u'http://wiki.wolnepodreczniki.pl/Lektury:Kochanowski/Pieśni/Pieśń_VII_(1)',
35             'source_name': u'Kochanowski, Jan (1530-1584), Dzieła polskie, tom 1, oprac. Julian Krzyżanowski, wyd. 8, Państwowy Instytut Wydawniczy, Warszawa, 1976',
36             'author': u'Kochanowski, Jan',
37             'url': u'http://wolnelektury.pl/katalog/lektura/piesni-ksiegi-pierwsze-piesn-vii-trudna-rada-w-tej-mierze-pr',
38             'created_at': u'2007-08-31',
39             'title': u'Pieśń VII (Trudna rada w tej mierze: przyjdzie się rozjechać...)',
40             'kind': u'Liryka',
41             'source_url': u'http://www.polona.pl/Content/1499',
42             'released_to_public_domain_at': u'1584-01-01',
43             'epoch': u'Renesans',
44             'genre': u'Pieśń',
45             'technical_editor': u'Gałecki, Dariusz',
46             'license_description': u'Domena publiczna - Jan Kochanowski zm. 1584 ',
47         }),
48         ('dcparser', 'mickiewicz_rybka.xml', {
49             'publisher': u'Fundacja Nowoczesna Polska',
50             'about': 'http://wiki.wolnepodreczniki.pl/Lektury:Mickiewicz/Ballady/Rybka',
51             'source_name': u'Mickiewicz, Adam (1798-1855), Poezje, tom 1 (Wiersze młodzieńcze - Ballady i romanse - Wiersze do r. 1824), Krakowska Spółdzielnia Wydawnicza, wyd. 2 zwiększone, Kraków, 1922',
52             'author': u'Mickiewicz, Adam',
53             'url': u'http://wolnelektury.pl/katalog/lektura/ballady-i-romanse-rybka',
54             'created_at': u'2007-09-06',
55             'title': u'Rybka',
56             'kind': u'Liryka',
57             'source_url': u'http://www.polona.pl/Content/2222',
58             'released_to_public_domain_at': u'1855-01-01',
59             'epoch': u'Romantyzm',
60             'genre': u'Ballada',
61             'technical_editor': u'Sutkowska, Olga',
62             'license_description': u'Domena publiczna - Adam Mickiewicz zm. 1855',
63         }),
64         ('dcparser', 'sofokles_antygona.xml', {
65             'publisher': u'Fundacja Nowoczesna Polska',
66             'about': 'http://wiki.wolnepodreczniki.pl/Lektury:Sofokles/Antygona',
67             'source_name': u'Sofokles (496-406 a.C.), Antygona, Zakład Narodowy im. Ossolińskich, wyd. 7, Lwów, 1939',
68             'author': u'Sofokles',
69             'url': u'http://wolnelektury.pl/katalog/lektura/antygona',
70             'created_at': u'2007-08-30',
71             'title': u'Antygona',
72             'kind': u'Dramat',
73             'source_url': u'http://www.polona.pl/Content/3768',
74             'translator': u'Morawski, Kazimierz',
75             'released_to_public_domain_at': u'1925-01-01',
76             'epoch': u'Starożytność',
77             'genre': u'Tragedia',
78             'technical_editor': u'Gałecki, Dariusz',
79             'license_description': u'Domena publiczna - tłumacz Kazimierz Morawski zm. 1925',
80         }),
81         ('dcparser', 'biedrzycki_akslop.xml', {
82             'publisher': u'Fundacja Nowoczesna Polska',
83             'about': 'http://wiki.wolnepodreczniki.pl/Lektury:Biedrzycki/Akslop',
84             'source_name': u'Miłosz Biedrzycki, * ("Gwiazdka"), Fundacja "brulion", Kraków-Warszawa, 1993',
85             'author': u'Biedrzycki, Miłosz',
86             'url': u'http://wolnelektury.pl/katalog/lektura/akslop',
87             'created_at': u'2009-06-04',
88             'title': u'Akslop',
89             'kind': u'Liryka',
90             'source_url': u'http://free.art.pl/mlb/gwiazdka.html#t1',
91             'epoch': u'Współczesność',
92             'genre': u'Wiersz',
93             'technical_editor': u'Sutkowska, Olga',
94             'license': u'http://creativecommons.org/licenses/by-sa/3.0/',
95             'license_description': u'Creative Commons Uznanie Autorstwa - Na Tych Samych Warunkach 3.0.PL'
96         }),
97     )
98     
99     def test_parse(self):
100         for dir_name, file_name, result in self.KNOWN_RESULTS:
101             self.assertEqual(dcparser.parse(test_file_path(dir_name, file_name)).to_dict(), result)
102
103
104 class TestParserErrors(unittest.TestCase):
105     def test_error(self):
106         try:
107             html.transform(test_file_path('erroneous', 'asnyk_miedzy_nami.xml'),
108                            test_file_path('erroneous', 'asnyk_miedzy_nami.html'))
109             self.fail()
110         except etree.XMLSyntaxError, e:
111             self.assertEqual(e.position, (25, 13))
112
113
114 if __name__ == '__main__':
115     unittest.main()