File size: 3,305 Bytes
046e3b8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import os
import fitz

from mamba import description, it, before
from fitzutils import ToCEntry
from pdftocio.tocio import read_toc, write_toc

dirpath = os.path.dirname(os.path.abspath(__file__))

level2 = os.path.join(dirpath, "files/level2.pdf")
hastoc = os.path.join(dirpath, "files/hastoc.pdf")

with description("read_toc") as self:
    with before.all:
        self.doc = fitz.open(level2)
        self.reference = fitz.open(hastoc)
        self.expect = [
            ToCEntry(level=1, title='Section One', pagenum=1, vpos=234.65998),
            ToCEntry(level=1, title='Section Two', pagenum=1, vpos=562.148),
            ToCEntry(level=2, title='Subsection Two.One', pagenum=2, vpos=449.522),
            ToCEntry(level=1,
                     title='Section Three, with looong loooong looong title',
                     pagenum=3,
                     vpos=330.333),
            ToCEntry(level=2,
                     title='Subsection Three.One, '
                     'with even loooooooooooonger title, and probably even more',
                     pagenum=3,
                     vpos=616.444),
            ToCEntry(level=2, title='Subsection Three.Two',
                     pagenum=4, vpos=509.298),
            ToCEntry(level=2, title='Subsection Three.Three',
                     pagenum=5, vpos=124.802),
            ToCEntry(level=1, title='The End', pagenum=5, vpos=361.387)
        ]

    with it("reads pdf toc correctly"):
        assert self.expect == read_toc(self.reference)

    with it("makes (read_toc -> write_toc -> read_toc) an identity operation (except vpos)"):
        toc = read_toc(self.reference)
        write_toc(self.doc, toc)
        toc2 = read_toc(self.doc)

        assert len(toc2) == len(toc)
        for e1, e2 in zip(toc, toc2):
            assert e1.level == e2.level
            assert e1.title == e2.title
            assert e1.pagenum == e2.pagenum

with description("write_toc") as self:
    with before.all:
        self.doc = fitz.open(level2)
        self.reference = fitz.open(hastoc)
        self.toc = [
            ToCEntry(level=1, title='Section One', pagenum=1),
            ToCEntry(level=1, title='Section Two', pagenum=1),
            ToCEntry(level=2, title='Subsection Two.One', pagenum=2),
            ToCEntry(level=1,
                     title='Section Three, with looong loooong looong title',
                     pagenum=3),
            ToCEntry(level=2,
                     title='Subsection Three.One, '
                     'with even loooooooooooonger title, and probably even more',
                     pagenum=3),
            ToCEntry(level=2, title='Subsection Three.Two',
                     pagenum=4),
            ToCEntry(level=2, title='Subsection Three.Three',
                     pagenum=5),
            ToCEntry(level=1, title='The End', pagenum=5)
        ]

    with it("makes (write_toc -> read_toc) an identity operation (except vpos)"):
        write_toc(self.doc, self.toc)
        toc2 = read_toc(self.doc)

        assert len(toc2) == len(self.toc)
        for e1, e2 in zip(self.toc, toc2):
            assert e1.level == e2.level
            assert e1.title == e2.title
            assert e1.pagenum == e2.pagenum