X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/6642c1c71c5c6ce6ef3401c8c9da84cf076b018b..ddeba8a8483dc73d0103030afe46fc5bce51d8a0:/tests/test_dcparser.py?ds=inline diff --git a/tests/test_dcparser.py b/tests/test_dcparser.py old mode 100755 new mode 100644 index 62e664c..9e2b3ef --- a/tests/test_dcparser.py +++ b/tests/test_dcparser.py @@ -1,56 +1,48 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - +# This file is part of Librarian, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Wolne Lektury. See NOTICE for more information. +# 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 - - 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) +from os.path import splitext +from tests.utils import get_all_fixtures + + +class MetaTests(unittest.TestCase): + def check_dcparser(self, xml_file, result_file): + with open(xml_file, 'rb') as f: + xml = f.read() + with open(result_file) as f: + result = f.read() + info = dcparser.BookInfo.from_bytes(xml).to_dict() + should_be = eval(result) for key in should_be: - self.assertEqual( info[key], should_be[key] ) + self.assertEqual(info[key], should_be[key]) -class TestDCSerialize(unittest.TestCase): - __metaclass__ = AutoTestMetaclass - TEST_DIR = 'dcserialize' + def test_dcparser(self): + for fixture in get_all_fixtures('dcparser', '*.xml'): + base_name = splitext(fixture)[0] + with self.subTest(name=base_name): + self.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) + def check_serialize(self, xml_file): + with open(xml_file, 'rb') as f: + xml = f.read() + info = dcparser.BookInfo.from_bytes(xml) # serialize - serialized = lxml.etree.tostring(info.to_etree(), encoding=unicode).encode('utf-8') - + serialized = etree.tostring(info.to_etree(), encoding='unicode').encode('utf-8') # then parse again - info_bis = dcparser.BookInfo.from_string(serialized) + info_bis = dcparser.BookInfo.from_bytes(serialized) # check if they are the same for key in vars(info): - self.assertEqual( getattr(info, key), getattr(info_bis, key)) - + self.assertEqual(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)) - -if __name__ == '__main__': - unittest.main() + self.assertEqual(getattr(info, key), getattr(info_bis, key)) + + def test_serialize(self): + for fixture in get_all_fixtures('dcparser', '*.xml'): + with self.subTest(name=fixture): + self.check_serialize(fixture)