From b9e0fac7c1f578db834796a2ba29010311937b5b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 23 Jun 2016 22:59:19 +0530 Subject: [PATCH] Test against the OPF 2 reading code --- src/calibre/ebooks/metadata/opf3_test.py | 223 ++++++++++++++++++++++- 1 file changed, 220 insertions(+), 3 deletions(-) diff --git a/src/calibre/ebooks/metadata/opf3_test.py b/src/calibre/ebooks/metadata/opf3_test.py index c21ac8a228..69b8bf302d 100644 --- a/src/calibre/ebooks/metadata/opf3_test.py +++ b/src/calibre/ebooks/metadata/opf3_test.py @@ -5,10 +5,13 @@ from __future__ import (unicode_literals, division, absolute_import, print_function) from collections import defaultdict +from io import BytesIO import unittest from lxml import etree +from calibre.ebooks.metadata.book import ALL_METADATA_FIELDS +from calibre.ebooks.metadata.opf2 import OPF from calibre.ebooks.metadata.opf3 import ( parse_prefixes, reserved_prefixes, expand_prefix, read_identifiers, read_metadata, set_identifiers, XPath, set_application_id, read_title, @@ -257,14 +260,228 @@ class TestOPF3(unittest.TestCase): set_user_metadata(root, read_prefixes(root), read_refines(root), val) return ru(root) root = self.get_opf('''''') - self.ae({'#a': {'1': 1, 'is_multiple': {}}}, ru(root)) + self.ae({'#a': {'1': 1, 'is_multiple': dict()}}, ru(root)) root = self.get_opf('''''' '''{"#b":{"2":2}}''') - self.ae({'#b': {'2': 2, 'is_multiple': {}}}, ru(root)) - self.ae({'#c': {'3': 3, 'is_multiple': {}, 'is_multiple2': {}}}, su(root, {'#c':{'3':3}})) + self.ae({'#b': {'2': 2, 'is_multiple': dict()}}, ru(root)) + self.ae({'#c': {'3': 3, 'is_multiple': {}, 'is_multiple2': dict()}}, su(root, {'#c':{'3':3}})) # }}} + def test_against_opf2(self): # {{{ + # opf2 {{{ + raw = ''' + + 1698 + 27106d11-0721-44bc-bcdd-2840f31aaec0 + DOCX Demo + Kovid Goyal + calibre (2.57.1) [http://calibre-ebook.com] + 2016-02-17T10:53:08+00:00 + Demonstration of DOCX support in calibre + Kovid Goyal + xxx + eng + calibre + conversion + docs + ebook + + + + + + + + + + + + + + + + + + + + +''' # }}} + + mi2 = OPF(BytesIO(raw.encode('utf-8'))).to_book_metadata() + root = etree.fromstring(raw) + mi3 = read_metadata(root) + self.ae(mi2.get_all_user_metadata(False), mi3.get_all_user_metadata(False)) + for field in ALL_METADATA_FIELDS: + if field in 'manifest uuid'.split(): + continue + v2, v3 = getattr(mi2, field, None), getattr(mi3, field, None) + self.ae(v2, v3, '%s: %r != %r' % (field, v2, v3)) + # }}} + # Run tests {{{ def suite():