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():