コード例 #1
0
def test_metadata():

    model_metadata = {
        'English': 'eggs',
        u('Русский'): u('яйца'),
    }
    meta = '\n'.join(
        u('|{k}| {v}').format(k=k, v=v) for k, v in model_metadata.items())
    test_script = u('set-meta\n{meta}\n.\n').format(meta=meta)
    try:
        test_file = create_djvu(test_script)
    except UnicodeEncodeError:
        raise SkipTest(
            'you need to run this test with LC_CTYPE=C or LC_CTYPE=<lang>.UTF-8'
        )
    try:
        context = Context()
        document = context.new_document(FileUri(test_file.name))
        message = document.get_message()
        assert_equal(type(message), DocInfoMessage)
        annotations = document.annotations
        assert_equal(type(annotations), DocumentAnnotations)
        annotations.wait()
        metadata = annotations.metadata
        assert_equal(type(metadata), Metadata)
        assert_equal(len(metadata), len(model_metadata))
        assert_equal(sorted(metadata), sorted(model_metadata))
        if not py3k:
            assert_equal(sorted(metadata.iterkeys()),
                         sorted(model_metadata.iterkeys()))
        assert_equal(sorted(metadata.keys()), sorted(model_metadata.keys()))
        if not py3k:
            assert_equal(sorted(metadata.itervalues()),
                         sorted(model_metadata.itervalues()))
        assert_equal(sorted(metadata.values()),
                     sorted(model_metadata.values()))
        if not py3k:
            assert_equal(sorted(metadata.iteritems()),
                         sorted(model_metadata.iteritems()))
        assert_equal(sorted(metadata.items()), sorted(model_metadata.items()))
        for k in metadata:
            assert_equal(type(k), unicode)
            assert_equal(type(metadata[k]), unicode)
        for k in None, 42, '+'.join(model_metadata):
            with assert_raises(KeyError) as ecm:
                metadata[k]
            assert_equal(ecm.exception.args, (k, ))
    finally:
        test_file.close()
コード例 #2
0
 def test_nonexistent_ja(self):
     skip_unless_c_messages()
     skip_unless_translation_exists('ja_JP.UTF-8')
     path = '__nonexistent__'
     context = Context()
     try:
         with interim_locale(LC_ALL='ja_JP.UTF-8'):
             os.stat(path)
     except OSError as ex:
         c_message = ex.args[1]
     else:
         raise OSError(errno.EEXIST, os.strerror(errno.EEXIST), path)
     try:
         c_message.encode('ASCII')
     except UnicodeError:
         pass
     else:
         raise AssertionError(
             'ja_JP error message is ASCII-only: {msg!r}'.format(
                 msg=c_message))
     with interim_locale(LC_ALL='ja_JP.UTF-8'):
         with assert_raises(JobFailed):
             context.new_document(FileUri(path))
         message = context.get_message()
         assert_equal(type(message), ErrorMessage)
         assert_equal(type(message.message), unicode)
         assert_equal(
             message.message,
             u("[1-11711] Failed to open '{path}': {msg}.".format(
                 path=path, msg=c_message)))
         assert_equal(
             str(message),
             "[1-11711] Failed to open '{path}': {msg}.".format(
                 path=path, msg=c_message))
         assert_equal(unicode(message), message.message)
コード例 #3
0
ファイル: test_decode.py プロジェクト: jwilk/python-djvulibre
 def test_nonexistent_ja(self):
     skip_unless_c_messages()
     skip_unless_translation_exists('ja_JP.UTF-8')
     path = '__nonexistent__'
     context = Context()
     try:
         with interim_locale(LC_ALL='ja_JP.UTF-8'):
             os.stat(path)
     except OSError as ex:
         c_message = ex.args[1]
     else:
         raise OSError(errno.EEXIST, os.strerror(errno.EEXIST), path)
     try:
         c_message.encode('ASCII')
     except UnicodeError:
         pass
     else:
         raise AssertionError(
             'ja_JP error message is ASCII-only: {msg!r}'.format(msg=c_message)
         )
     with interim_locale(LC_ALL='ja_JP.UTF-8'):
         with assert_raises(JobFailed):
             context.new_document(FileUri(path))
         message = context.get_message()
         assert_equal(type(message), ErrorMessage)
         assert_equal(type(message.message), unicode)
         assert_equal(
             message.message,
             u("[1-11711] Failed to open '{path}': {msg}.".format(path=path, msg=c_message))
         )
         assert_equal(
             str(message),
             "[1-11711] Failed to open '{path}': {msg}.".format(path=path, msg=c_message)
         )
         assert_equal(unicode(message), message.message)
コード例 #4
0
ファイル: test_sexpr.py プロジェクト: jwilk/python-djvulibre
 def test_codecs_io_text_8(self):
     tmpdir = tempfile.mkdtemp()
     try:
         path = os.path.join(tmpdir, 'tmp')
         with codecs.open(path, mode='w+', encoding='UTF-16-LE') as fp:
             self.expr.print_into(fp, escape_unicode=False)
             fp.seek(0)
             assert_equal(fp.read(), u(self.urepr))
     finally:
         shutil.rmtree(tmpdir)
コード例 #5
0
ファイル: test_sexpr.py プロジェクト: jayvdb/python-djvulibre
 def test_codecs_io_text_8(self):
     tmpdir = tempfile.mkdtemp()
     try:
         path = os.path.join(tmpdir, 'tmp')
         with codecs.open(path, mode='w+', encoding='UTF-16-LE') as fp:
             self.expr.print_into(fp, escape_unicode=False)
             fp.seek(0)
             assert_equal(fp.read(), u(self.urepr))
     finally:
         shutil.rmtree(tmpdir)
コード例 #6
0
ファイル: test_sexpr.py プロジェクト: jwilk/python-djvulibre
 def test_codecs_io(self):
     tmpdir = tempfile.mkdtemp()
     try:
         path = os.path.join(tmpdir, 'tmp')
         with codecs.open(path, mode='w+', encoding='UTF-16-LE') as fp:
             fp.write(u(self.expr))
             fp.seek(0)
             self.t(fp)
     finally:
         shutil.rmtree(tmpdir)
コード例 #7
0
ファイル: test_sexpr.py プロジェクト: jayvdb/python-djvulibre
 def test_codecs_io(self):
     tmpdir = tempfile.mkdtemp()
     try:
         path = os.path.join(tmpdir, 'tmp')
         with codecs.open(path, mode='w+', encoding='UTF-16-LE') as fp:
             fp.write(u(self.expr))
             fp.seek(0)
             self.t(fp)
     finally:
         shutil.rmtree(tmpdir)
コード例 #8
0
ファイル: test_decode.py プロジェクト: jwilk/python-djvulibre
def test_metadata():

    model_metadata = {
        'English': 'eggs',
        u('Русский'): u('яйца'),
    }
    meta = '\n'.join(u('|{k}| {v}').format(k=k, v=v) for k, v in model_metadata.items())
    test_script = u('set-meta\n{meta}\n.\n').format(meta=meta)
    try:
        test_file = create_djvu(test_script)
    except UnicodeEncodeError:
        raise SkipTest('you need to run this test with LC_CTYPE=C or LC_CTYPE=<lang>.UTF-8')
    try:
        context = Context()
        document = context.new_document(FileUri(test_file.name))
        message = document.get_message()
        assert_equal(type(message), DocInfoMessage)
        annotations = document.annotations
        assert_equal(type(annotations), DocumentAnnotations)
        annotations.wait()
        metadata = annotations.metadata
        assert_equal(type(metadata), Metadata)
        assert_equal(len(metadata), len(model_metadata))
        assert_equal(sorted(metadata), sorted(model_metadata))
        if not py3k:
            assert_equal(sorted(metadata.iterkeys()), sorted(model_metadata.iterkeys()))
        assert_equal(sorted(metadata.keys()), sorted(model_metadata.keys()))
        if not py3k:
            assert_equal(sorted(metadata.itervalues()), sorted(model_metadata.itervalues()))
        assert_equal(sorted(metadata.values()), sorted(model_metadata.values()))
        if not py3k:
            assert_equal(sorted(metadata.iteritems()), sorted(model_metadata.iteritems()))
        assert_equal(sorted(metadata.items()), sorted(model_metadata.items()))
        for k in metadata:
            assert_equal(type(k), unicode)
            assert_equal(type(metadata[k]), unicode)
        for k in None, 42, '+'.join(model_metadata):
            with assert_raises(KeyError) as ecm:
                metadata[k]
            assert_equal(ecm.exception.args, (k,))
    finally:
        test_file.close()
コード例 #9
0
ファイル: test_sexpr.py プロジェクト: jwilk/python-djvulibre
 def test2(self):
     x = Expression(u('żółw'))
     if py3k:
         assert_repr(x, "Expression('żółw')")
     else:
         assert_repr(x, r"Expression('\xc5\xbc\xc3\xb3\xc5\x82w')")
コード例 #10
0
ファイル: test_sexpr.py プロジェクト: jwilk/python-djvulibre
 def test1(self):
     x = Expression(u('eggs'))
     assert_repr(x, "Expression('eggs')")
     assert_is(x, Expression(x))
コード例 #11
0
ファイル: test_sexpr.py プロジェクト: jwilk/python-djvulibre
 def test_nonascii(self):
     x = self.t(b('ветчина'), '|ветчина|')
     y = self.t(u('ветчина'), '|ветчина|')
     assert_equal(x, y)
     assert_equal(hash(x), hash(y))
コード例 #12
0
ファイル: test_sexpr.py プロジェクト: jwilk/python-djvulibre
 def test_nonascii(self):
     x = self.t(b('ветчина'), 'ветчина')
     y = self.t(u('ветчина'), 'ветчина')
     assert x is y
コード例 #13
0
ファイル: test_sexpr.py プロジェクト: jayvdb/python-djvulibre
class test_expression_writer_nonascii(test_expression_writer_ascii):

    expr = Expression(u('żółw'))
    repr = r'"\305\274\303\263\305\202w"'
    urepr = r'"żółw"'
コード例 #14
0
 def test_new_document(self):
     context = Context()
     document = context.new_document(FileUri(images + 'test1.djvu'))
     assert_equal(type(document), Document)
     message = document.get_message()
     assert_equal(type(message), DocInfoMessage)
     assert_true(document.decoding_done)
     assert_false(document.decoding_error)
     assert_equal(document.decoding_status, JobOK)
     assert_equal(document.type, DOCUMENT_TYPE_SINGLE_PAGE)
     assert_equal(len(document.pages), 1)
     assert_equal(len(document.files), 1)
     decoding_job = document.decoding_job
     assert_true(decoding_job.is_done)
     assert_false(decoding_job.is_error)
     assert_equal(decoding_job.status, JobOK)
     file = document.files[0]
     assert_is(type(file), File)
     assert_is(file.document, document)
     assert_is(file.get_info(), None)
     assert_equal(file.type, 'P')
     assert_equal(file.n_page, 0)
     page = file.page
     assert_equal(type(page), Page)
     assert_is(page.document, document)
     assert_equal(page.n, 0)
     assert_is(file.size, None)
     assert_equal(file.id, u('test1.djvu'))
     assert_equal(type(file.id), unicode)
     assert_equal(file.name, u('test1.djvu'))
     assert_equal(type(file.name), unicode)
     assert_equal(file.title, u('test1.djvu'))
     assert_equal(type(file.title), unicode)
     dump = document.files[0].dump
     assert_equal(type(dump), unicode)
     assert_equal([line for line in dump.splitlines()], [
         u('  FORM:DJVU [83] '),
         u('    INFO [10]         DjVu 64x48, v24, 300 dpi, gamma=2.2'),
         u('    Sjbz [53]         JB2 bilevel data'),
     ])
     page = document.pages[0]
     assert_equal(type(page), Page)
     assert_is(page.document, document)
     assert_is(page.get_info(), None)
     assert_equal(page.width, 64)
     assert_equal(page.height, 48)
     assert_equal(page.size, (64, 48))
     assert_equal(page.dpi, 300)
     assert_equal(page.rotation, 0)
     assert_equal(page.version, 24)
     file = page.file
     assert_equal(type(file), File)
     assert_equal(file.id, u('test1.djvu'))
     assert_equal(type(file.id), unicode)
     dump = document.files[0].dump
     assert_equal(type(dump), unicode)
     assert_equal([line for line in dump.splitlines()], [
         u('  FORM:DJVU [83] '),
         u('    INFO [10]         DjVu 64x48, v24, 300 dpi, gamma=2.2'),
         u('    Sjbz [53]         JB2 bilevel data'),
     ])
     assert_is(document.get_message(wait=False), None)
     assert_is(context.get_message(wait=False), None)
     with assert_raises_str(IndexError, 'file number out of range'):
         document.files[-1].get_info()
     assert_is(document.get_message(wait=False), None)
     assert_is(context.get_message(wait=False), None)
     with assert_raises_str(IndexError, 'page number out of range'):
         document.pages[-1]
     with assert_raises_str(IndexError, 'page number out of range'):
         document.pages[1]
     assert_is(document.get_message(wait=False), None)
     assert_is(context.get_message(wait=False), None)
コード例 #15
0
ファイル: test_sexpr.py プロジェクト: jayvdb/python-djvulibre
 def test2(self):
     x = Expression(u('żółw'))
     if py3k:
         assert_repr(x, "Expression('żółw')")
     else:
         assert_repr(x, r"Expression('\xc5\xbc\xc3\xb3\xc5\x82w')")
コード例 #16
0
ファイル: test_decode.py プロジェクト: jwilk/python-djvulibre
 def test_new_document(self):
     context = Context()
     document = context.new_document(FileUri(images + 'test1.djvu'))
     assert_equal(type(document), Document)
     message = document.get_message()
     assert_equal(type(message), DocInfoMessage)
     assert_true(document.decoding_done)
     assert_false(document.decoding_error)
     assert_equal(document.decoding_status, JobOK)
     assert_equal(document.type, DOCUMENT_TYPE_SINGLE_PAGE)
     assert_equal(len(document.pages), 1)
     assert_equal(len(document.files), 1)
     decoding_job = document.decoding_job
     assert_true(decoding_job.is_done)
     assert_false(decoding_job.is_error)
     assert_equal(decoding_job.status, JobOK)
     file = document.files[0]
     assert_is(type(file), File)
     assert_is(file.document, document)
     assert_is(file.get_info(), None)
     assert_equal(file.type, 'P')
     assert_equal(file.n_page, 0)
     page = file.page
     assert_equal(type(page), Page)
     assert_is(page.document, document)
     assert_equal(page.n, 0)
     assert_is(file.size, None)
     assert_equal(file.id, u('test1.djvu'))
     assert_equal(type(file.id), unicode)
     assert_equal(file.name, u('test1.djvu'))
     assert_equal(type(file.name), unicode)
     assert_equal(file.title, u('test1.djvu'))
     assert_equal(type(file.title), unicode)
     dump = document.files[0].dump
     assert_equal(type(dump), unicode)
     assert_equal(
         [line for line in dump.splitlines()], [
             u('  FORM:DJVU [83] '),
             u('    INFO [10]         DjVu 64x48, v24, 300 dpi, gamma=2.2'),
             u('    Sjbz [53]         JB2 bilevel data'),
         ]
     )
     page = document.pages[0]
     assert_equal(type(page), Page)
     assert_is(page.document, document)
     assert_is(page.get_info(), None)
     assert_equal(page.width, 64)
     assert_equal(page.height, 48)
     assert_equal(page.size, (64, 48))
     assert_equal(page.dpi, 300)
     assert_equal(page.rotation, 0)
     assert_equal(page.version, 24)
     file = page.file
     assert_equal(type(file), File)
     assert_equal(file.id, u('test1.djvu'))
     assert_equal(type(file.id), unicode)
     dump = document.files[0].dump
     assert_equal(type(dump), unicode)
     assert_equal(
         [line for line in dump.splitlines()], [
             u('  FORM:DJVU [83] '),
             u('    INFO [10]         DjVu 64x48, v24, 300 dpi, gamma=2.2'),
             u('    Sjbz [53]         JB2 bilevel data'),
         ]
     )
     assert_is(document.get_message(wait=False), None)
     assert_is(context.get_message(wait=False), None)
     with assert_raises_str(IndexError, 'file number out of range'):
         document.files[-1].get_info()
     assert_is(document.get_message(wait=False), None)
     assert_is(context.get_message(wait=False), None)
     with assert_raises_str(IndexError, 'page number out of range'):
         document.pages[-1]
     with assert_raises_str(IndexError, 'page number out of range'):
         document.pages[1]
     assert_is(document.get_message(wait=False), None)
     assert_is(context.get_message(wait=False), None)
コード例 #17
0
ファイル: test_sexpr.py プロジェクト: jayvdb/python-djvulibre
 def test_nonascii(self):
     x = self.t(b('ветчина'), '|ветчина|')
     y = self.t(u('ветчина'), '|ветчина|')
     assert_equal(x, y)
     assert_equal(hash(x), hash(y))
コード例 #18
0
ファイル: test_sexpr.py プロジェクト: jayvdb/python-djvulibre
 def test_nonascii(self):
     x = self.t(b('ветчина'), 'ветчина')
     y = self.t(u('ветчина'), 'ветчина')
     assert x is y
コード例 #19
0
 def test(self):
     context = Context()
     document = context.new_document(FileUri(images + 'test0.djvu'))
     assert_equal(type(document), Document)
     message = document.get_message()
     assert_equal(type(message), DocInfoMessage)
     anno = DocumentAnnotations(document, shared=False)
     assert_equal(type(anno), DocumentAnnotations)
     anno.wait()
     x = anno.sexpr
     assert_equal(x, Expression([]))
     anno = document.annotations
     assert_equal(type(anno), DocumentAnnotations)
     anno.wait()
     assert_is(anno.background_color, None)
     assert_is(anno.horizontal_align, None)
     assert_is(anno.vertical_align, None)
     assert_is(anno.mode, None)
     assert_is(anno.zoom, None)
     expected_metadata = [
         Symbol('metadata'),
         [Symbol('ModDate'), '2015-08-17 19:54:57+02:00'],
         [Symbol('CreationDate'), '2015-08-17 19:54:57+02:00'],
         [Symbol('Producer'), 'pdfTeX-1.40.16'],
         [Symbol('Creator'), 'LaTeX with hyperref package'],
         [Symbol('Author'), 'Jakub Wilk']
     ]
     expected_xmp = [
         Symbol('xmp'),
         '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">'
         '<rdf:Description rdf:about="">'
         '<xmpMM:History xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"><rdf:Seq><rdf:li xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" stEvt:action="converted" stEvt:parameters="from application/pdf to image/vnd.djvu" stEvt:softwareAgent="pdf2djvu 0.8.1 (DjVuLibre 3.5.27, Poppler 0.26.5, GraphicsMagick++ 1.3.21, GNOME XSLT 1.1.28, GNOME XML 2.9.2, PStreams 0.8.0)" stEvt:when="2015-08-17T17:54:58+00:00"/></rdf:Seq></xmpMM:History>'
         '<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jakub Wilk</dc:creator>'
         '<dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/vnd.djvu</dc:format>'
         '<pdf:Producer xmlns:pdf="http://ns.adobe.com/pdf/1.3/">pdfTeX-1.40.16</pdf:Producer>'
         '<xmp:CreatorTool xmlns:xmp="http://ns.adobe.com/xap/1.0/">LaTeX with hyperref package</xmp:CreatorTool>'
         '<xmp:CreateDate xmlns:xmp="http://ns.adobe.com/xap/1.0/">2015-08-17T19:54:57+02:00</xmp:CreateDate>'
         '<xmp:ModifyDate xmlns:xmp="http://ns.adobe.com/xap/1.0/">2015-08-17T19:54:57+02:00</xmp:ModifyDate>'
         '<xmp:MetadataDate xmlns:xmp="http://ns.adobe.com/xap/1.0/">2015-08-17T17:54:58+00:00</xmp:MetadataDate>'
         '</rdf:Description>'
         '</rdf:RDF>\n'
     ]
     assert_equal(anno.sexpr, Expression([expected_metadata, expected_xmp]))
     metadata = anno.metadata
     assert_equal(type(metadata), Metadata)
     hyperlinks = anno.hyperlinks
     assert_equal(type(hyperlinks), Hyperlinks)
     assert_equal(len(hyperlinks), 0)
     assert_equal(list(hyperlinks), [])
     outline = document.outline
     assert_equal(type(outline), DocumentOutline)
     outline.wait()
     assert_equal(
         outline.sexpr,
         Expression([
             Symbol('bookmarks'), ['Lorem ipsum', '#p0001.djvu'],
             [
                 'Hyperlinks', '#p0002.djvu', ['local', '#p0002.djvu'],
                 ['remote', '#p0002.djvu']
             ]
         ]))
     page = document.pages[1]
     anno = page.annotations
     assert_equal(type(anno), PageAnnotations)
     anno.wait()
     assert_is(anno.background_color, None)
     assert_is(anno.horizontal_align, None)
     assert_is(anno.vertical_align, None)
     assert_is(anno.mode, None)
     assert_is(anno.zoom, None)
     expected_hyperlinks = [[
         Symbol('maparea'), '#p0001.djvu', '',
         [Symbol('rect'), 520, 2502, 33, 42],
         [Symbol('border'), Symbol('#ff0000')]
     ],
                            [
                                Symbol('maparea'), 'http://jwilk.net/', '',
                                [Symbol('rect'), 458, 2253, 516, 49],
                                [Symbol('border'),
                                 Symbol('#00ffff')]
                            ]]
     assert_equal(
         anno.sexpr,
         Expression([expected_metadata, expected_xmp] +
                    expected_hyperlinks))
     page_metadata = anno.metadata
     assert_equal(type(page_metadata), Metadata)
     assert_equal(page_metadata.keys(), metadata.keys())
     assert_equal([page_metadata[k] == metadata[k] for k in metadata],
                  [True, True, True, True, True])
     hyperlinks = anno.hyperlinks
     assert_equal(type(hyperlinks), Hyperlinks)
     assert_equal(len(hyperlinks), 2)
     assert_equal(list(hyperlinks),
                  [Expression(h) for h in expected_hyperlinks])
     text = page.text
     assert_equal(type(text), PageText)
     text.wait()
     text_s = text.sexpr
     text_s_detail = [
         PageText(page, details).sexpr
         for details in (TEXT_DETAILS_PAGE, TEXT_DETAILS_COLUMN,
                         TEXT_DETAILS_REGION, TEXT_DETAILS_PARAGRAPH,
                         TEXT_DETAILS_LINE, TEXT_DETAILS_WORD,
                         TEXT_DETAILS_CHARACTER, TEXT_DETAILS_ALL)
     ]
     assert_equal(text_s_detail[0], text_s_detail[1])
     assert_equal(text_s_detail[1], text_s_detail[2])
     assert_equal(text_s_detail[2], text_s_detail[3])
     assert_equal(
         text_s_detail[0],
         Expression([
             Symbol('page'), 0, 0, 2550, 3300, '2 Hyperlinks \n'
             '2.1 local \n' + u('→1 \n') +
             '2.2 remote \nhttp://jwilk.net/ \n'
             '2 \n'
         ]))
     assert_equal(
         text_s_detail[4],
         Expression([
             Symbol('page'), 0, 0, 2550, 3300,
             [Symbol('line'), 462, 2712, 910, 2777, '2 Hyperlinks '],
             [Symbol('line'), 462, 2599, 714, 2641, '2.1 local '],
             [Symbol('line'), 464, 2505, 544, 2540,
              u('→1 ')],
             [Symbol('line'), 462, 2358, 772, 2400, '2.2 remote '],
             [Symbol('line'), 463, 2256, 964, 2298, 'http://jwilk.net/ '],
             [Symbol('line'), 1260, 375, 1282, 409, '2 ']
         ]))
     assert_equal(text_s_detail[5], text_s)
     assert_equal(text_s_detail[6], text_s)
     assert_equal(text_s_detail[7], text_s)
     assert_equal(
         text_s,
         Expression([
             Symbol('page'), 0, 0, 2550, 3300,
             [
                 Symbol('line'), 462, 2712, 910, 2777,
                 [Symbol('word'), 462, 2727, 495, 2776, '2'],
                 [Symbol('word'), 571, 2712, 910, 2777, 'Hyperlinks']
             ],
             [
                 Symbol('line'), 462, 2599, 714, 2641,
                 [Symbol('word'), 462, 2599, 532, 2641, '2.1'],
                 [Symbol('word'), 597, 2599, 714, 2640, 'local']
             ],
             [
                 Symbol('line'), 464, 2505, 544, 2540,
                 [Symbol('word'), 464, 2505, 544, 2540,
                  u('→1')]
             ],
             [
                 Symbol('line'), 462, 2358, 772, 2400,
                 [Symbol('word'), 462, 2358, 535, 2400, '2.2'],
                 [Symbol('word'), 598, 2358, 772, 2397, 'remote']
             ],
             [
                 Symbol('line'), 463, 2256, 964, 2298,
                 [
                     Symbol('word'), 463, 2256, 964, 2298,
                     'http://jwilk.net/'
                 ]
             ],
             [
                 Symbol('line'), 1260, 375, 1282, 409,
                 [Symbol('word'), 1260, 375, 1282, 409, '2']
             ]
         ]))
     with assert_raises_str(TypeError, 'details must be a symbol or none'):
         PageText(page, 'eggs')
     with assert_raises_str(
             ValueError,
             'details must be equal to TEXT_DETAILS_PAGE, or TEXT_DETAILS_COLUMN, or TEXT_DETAILS_REGION, or TEXT_DETAILS_PARAGRAPH, or TEXT_DETAILS_LINE, or TEXT_DETAILS_WORD, or TEXT_DETAILS_CHARACTER or TEXT_DETAILS_ALL'
     ):
         PageText(page, Symbol('eggs'))
コード例 #20
0
ファイル: test_sexpr.py プロジェクト: jayvdb/python-djvulibre
 def test1(self):
     x = Expression(u('eggs'))
     assert_repr(x, "Expression('eggs')")
     assert_is(x, Expression(x))
コード例 #21
0
ファイル: test_decode.py プロジェクト: jwilk/python-djvulibre
 def test(self):
     context = Context()
     document = context.new_document(FileUri(images + 'test0.djvu'))
     assert_equal(type(document), Document)
     message = document.get_message()
     assert_equal(type(message), DocInfoMessage)
     anno = DocumentAnnotations(document, shared=False)
     assert_equal(type(anno), DocumentAnnotations)
     anno.wait()
     x = anno.sexpr
     assert_equal(x, Expression([]))
     anno = document.annotations
     assert_equal(type(anno), DocumentAnnotations)
     anno.wait()
     assert_is(anno.background_color, None)
     assert_is(anno.horizontal_align, None)
     assert_is(anno.vertical_align, None)
     assert_is(anno.mode, None)
     assert_is(anno.zoom, None)
     expected_metadata = [
         Symbol('metadata'),
         [Symbol('ModDate'), '2015-08-17 19:54:57+02:00'],
         [Symbol('CreationDate'), '2015-08-17 19:54:57+02:00'],
         [Symbol('Producer'), 'pdfTeX-1.40.16'],
         [Symbol('Creator'), 'LaTeX with hyperref package'],
         [Symbol('Author'), 'Jakub Wilk']
     ]
     expected_xmp = [
         Symbol('xmp'),
         '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">'
         '<rdf:Description rdf:about="">'
             '<xmpMM:History xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"><rdf:Seq><rdf:li xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" stEvt:action="converted" stEvt:parameters="from application/pdf to image/vnd.djvu" stEvt:softwareAgent="pdf2djvu 0.8.1 (DjVuLibre 3.5.27, Poppler 0.26.5, GraphicsMagick++ 1.3.21, GNOME XSLT 1.1.28, GNOME XML 2.9.2, PStreams 0.8.0)" stEvt:when="2015-08-17T17:54:58+00:00"/></rdf:Seq></xmpMM:History>'
             '<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Jakub Wilk</dc:creator>'
             '<dc:format xmlns:dc="http://purl.org/dc/elements/1.1/">image/vnd.djvu</dc:format>'
             '<pdf:Producer xmlns:pdf="http://ns.adobe.com/pdf/1.3/">pdfTeX-1.40.16</pdf:Producer>'
             '<xmp:CreatorTool xmlns:xmp="http://ns.adobe.com/xap/1.0/">LaTeX with hyperref package</xmp:CreatorTool>'
             '<xmp:CreateDate xmlns:xmp="http://ns.adobe.com/xap/1.0/">2015-08-17T19:54:57+02:00</xmp:CreateDate>'
             '<xmp:ModifyDate xmlns:xmp="http://ns.adobe.com/xap/1.0/">2015-08-17T19:54:57+02:00</xmp:ModifyDate>'
             '<xmp:MetadataDate xmlns:xmp="http://ns.adobe.com/xap/1.0/">2015-08-17T17:54:58+00:00</xmp:MetadataDate>'
         '</rdf:Description>'
         '</rdf:RDF>\n'
     ]
     assert_equal(
         anno.sexpr,
         Expression([expected_metadata, expected_xmp])
     )
     metadata = anno.metadata
     assert_equal(type(metadata), Metadata)
     hyperlinks = anno.hyperlinks
     assert_equal(type(hyperlinks), Hyperlinks)
     assert_equal(len(hyperlinks), 0)
     assert_equal(list(hyperlinks), [])
     outline = document.outline
     assert_equal(type(outline), DocumentOutline)
     outline.wait()
     assert_equal(outline.sexpr, Expression(
         [Symbol('bookmarks'),
             ['Lorem ipsum', '#p0001.djvu'],
             ['Hyperlinks', '#p0002.djvu',
                 ['local', '#p0002.djvu'],
                 ['remote', '#p0002.djvu']
             ]
         ]
     ))
     page = document.pages[1]
     anno = page.annotations
     assert_equal(type(anno), PageAnnotations)
     anno.wait()
     assert_is(anno.background_color, None)
     assert_is(anno.horizontal_align, None)
     assert_is(anno.vertical_align, None)
     assert_is(anno.mode, None)
     assert_is(anno.zoom, None)
     expected_hyperlinks = [
         [Symbol('maparea'), '#p0001.djvu', '', [Symbol('rect'), 520, 2502, 33, 42], [Symbol('border'), Symbol('#ff0000')]],
         [Symbol('maparea'), 'http://jwilk.net/', '', [Symbol('rect'), 458, 2253, 516, 49], [Symbol('border'), Symbol('#00ffff')]]
     ]
     assert_equal(
         anno.sexpr,
         Expression([expected_metadata, expected_xmp] + expected_hyperlinks)
     )
     page_metadata = anno.metadata
     assert_equal(type(page_metadata), Metadata)
     assert_equal(page_metadata.keys(), metadata.keys())
     assert_equal([page_metadata[k] == metadata[k] for k in metadata], [True, True, True, True, True])
     hyperlinks = anno.hyperlinks
     assert_equal(type(hyperlinks), Hyperlinks)
     assert_equal(len(hyperlinks), 2)
     assert_equal(
         list(hyperlinks),
         [Expression(h) for h in expected_hyperlinks]
     )
     text = page.text
     assert_equal(type(text), PageText)
     text.wait()
     text_s = text.sexpr
     text_s_detail = [PageText(page, details).sexpr for details in (TEXT_DETAILS_PAGE, TEXT_DETAILS_COLUMN, TEXT_DETAILS_REGION, TEXT_DETAILS_PARAGRAPH, TEXT_DETAILS_LINE, TEXT_DETAILS_WORD, TEXT_DETAILS_CHARACTER, TEXT_DETAILS_ALL)]
     assert_equal(text_s_detail[0], text_s_detail[1])
     assert_equal(text_s_detail[1], text_s_detail[2])
     assert_equal(text_s_detail[2], text_s_detail[3])
     assert_equal(
         text_s_detail[0],
         Expression(
             [Symbol('page'), 0, 0, 2550, 3300,
                 '2 Hyperlinks \n'
                 '2.1 local \n' +
                 u('→1 \n') +
                 '2.2 remote \nhttp://jwilk.net/ \n'
                 '2 \n'
             ]
         )
     )
     assert_equal(
         text_s_detail[4],
         Expression(
             [Symbol('page'), 0, 0, 2550, 3300,
                 [Symbol('line'), 462, 2712, 910, 2777, '2 Hyperlinks '],
                 [Symbol('line'), 462, 2599, 714, 2641, '2.1 local '],
                 [Symbol('line'), 464, 2505, 544, 2540, u('→1 ')],
                 [Symbol('line'), 462, 2358, 772, 2400, '2.2 remote '],
                 [Symbol('line'), 463, 2256, 964, 2298, 'http://jwilk.net/ '],
                 [Symbol('line'), 1260, 375, 1282, 409, '2 ']
             ]
         )
     )
     assert_equal(text_s_detail[5], text_s)
     assert_equal(text_s_detail[6], text_s)
     assert_equal(text_s_detail[7], text_s)
     assert_equal(
         text_s,
         Expression(
             [Symbol('page'), 0, 0, 2550, 3300,
                 [Symbol('line'), 462, 2712, 910, 2777, [Symbol('word'), 462, 2727, 495, 2776, '2'], [Symbol('word'), 571, 2712, 910, 2777, 'Hyperlinks']],
                 [Symbol('line'), 462, 2599, 714, 2641, [Symbol('word'), 462, 2599, 532, 2641, '2.1'], [Symbol('word'), 597, 2599, 714, 2640, 'local']],
                 [Symbol('line'), 464, 2505, 544, 2540, [Symbol('word'), 464, 2505, 544, 2540, u('→1')]],
                 [Symbol('line'), 462, 2358, 772, 2400, [Symbol('word'), 462, 2358, 535, 2400, '2.2'], [Symbol('word'), 598, 2358, 772, 2397, 'remote']],
                 [Symbol('line'), 463, 2256, 964, 2298, [Symbol('word'), 463, 2256, 964, 2298, 'http://jwilk.net/']],
                 [Symbol('line'), 1260, 375, 1282, 409, [Symbol('word'), 1260, 375, 1282, 409, '2']]
             ]
         )
     )
     with assert_raises_str(TypeError, 'details must be a symbol or none'):
         PageText(page, 'eggs')
     with assert_raises_str(ValueError, 'details must be equal to TEXT_DETAILS_PAGE, or TEXT_DETAILS_COLUMN, or TEXT_DETAILS_REGION, or TEXT_DETAILS_PARAGRAPH, or TEXT_DETAILS_LINE, or TEXT_DETAILS_WORD, or TEXT_DETAILS_CHARACTER or TEXT_DETAILS_ALL'):
         PageText(page, Symbol('eggs'))