Spaces:
Sleeping
Sleeping
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
|