Added copyright notice about AGPL. Removed setuputils in favour of plain distutils.
[librarian.git] / tests / test_dcparser.py
index 62e664c..d3acef1 100755 (executable)
@@ -1,56 +1,65 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
+#
+#    This file is part of Librarian.
+#
+#    Copyright © 2008,2009,2010 Fundacja Nowoczesna Polska <fundacja@nowoczesnapolska.org.pl>
+#    
+#    For full list of contributors see AUTHORS file. 
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as published by
+#    the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
 
-import unittest
-
+from librarian import dcparser
 from lxml import etree
-from utils import get_file_path
-from librarian import dcparser, html, ParseError
-from utils import AutoTestMetaclass
-
-class TestDCParser(unittest.TestCase):
-    __metaclass__ = AutoTestMetaclass
+from nose.tools import *
+from os.path import splitext
+from tests.utils import get_all_fixtures
+import codecs
 
-    TEST_DIR = 'dcparser'
 
-    def run_auto_test(self, in_data, out_data):
-        info = dcparser.BookInfo.from_string(in_data).to_dict()
-        should_be = eval(out_data)
-        for key in should_be:
-            self.assertEqual( info[key], should_be[key] )
+def check_dcparser(xml_file, result_file):
+    xml = file(xml_file).read()
+    result = codecs.open(result_file, encoding='utf-8').read()
+    info = dcparser.BookInfo.from_string(xml).to_dict()
+    should_be = eval(result)
+    for key in should_be:
+        assert_equals(info[key], should_be[key])
 
-class TestDCSerialize(unittest.TestCase):
-    __metaclass__ = AutoTestMetaclass
 
-    TEST_DIR = 'dcserialize'
+def test_dcparser():
+    for fixture in get_all_fixtures('dcparser', '*.xml'):
+        base_name = splitext(fixture)[0]
+        yield check_dcparser, fixture, base_name + '.out'
 
-    def run_auto_test(self, in_data, out_data):
-        import lxml.etree
-        # first parse the input
-        info = dcparser.BookInfo.from_string(in_data)
 
-        # serialize
-        serialized = lxml.etree.tostring(info.to_etree(), encoding=unicode).encode('utf-8')
+def check_serialize(xml_file):
+    xml = file(xml_file).read()
+    info = dcparser.BookInfo.from_string(xml)
 
-        # then parse again
-        info_bis = dcparser.BookInfo.from_string(serialized)
+    # serialize
+    serialized = etree.tostring(info.to_etree(), encoding=unicode).encode('utf-8')
+    # then parse again
+    info_bis = dcparser.BookInfo.from_string(serialized)
 
-        # check if they are the same
-        for key in vars(info):
-            self.assertEqual( getattr(info, key), getattr(info_bis, key))
+    # check if they are the same
+    for key in vars(info):
+        assert_equals(getattr(info, key), getattr(info_bis, key))
+    for key in vars(info_bis):
+        assert_equals(getattr(info, key), getattr(info_bis, key))
 
-        for key in vars(info_bis):
-            self.assertEqual( getattr(info, key), getattr(info_bis, key))
 
-class TestParserErrors(unittest.TestCase):
-    def test_error(self):
-        try:
-            html.transform(get_file_path('erroneous', 'asnyk_miedzy_nami.xml'),
-                           get_file_path('erroneous', 'asnyk_miedzy_nami.html'))
-            self.fail()
-        except ParseError:
-            pass
-            #self.assertEqual(e.position, (25, 13))    
+def test_serialize():
+    for fixture in get_all_fixtures('dcparser', '*.xml'):
+        yield check_serialize, fixture
 
-if __name__ == '__main__':
-    unittest.main()