Mercurial > hgrepos > Python2 > PyMuPDF
annotate tests/test_balance_count.py @ 1:1d09e1dec1d9 upstream
ADD: PyMuPDF v1.26.4: the original sdist.
It does not yet contain MuPDF. This normally will be downloaded when
building PyMuPDF.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:37:51 +0200 |
| parents | |
| children |
| rev | line source |
|---|---|
|
1
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1 import pymupdf |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
2 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
3 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
4 def test_q_count(): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
5 """Testing graphics state balances and wrap_contents(). |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
6 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
7 Take page's contents and generate various imbalanced graphics state |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
8 situations. Each time compare q-count with expected results. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
9 Finally confirm we are out of balance using "is_wrapped", wrap the |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
10 contents object(s) via "wrap_contents()" and confirm success. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
11 PDF commands "q" / "Q" stand for "push", respectively "pop". |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
12 """ |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
13 doc = pymupdf.open() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
14 page = doc.new_page() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
15 # the page has no /Contents objects at all yet. Create one causing |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
16 # an initial imbalance (so prepended "q" is needed) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
17 pymupdf.TOOLS._insert_contents(page, b"Q", True) # append |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
18 assert page._count_q_balance() == (1, 0) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
19 assert page.is_wrapped is False |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
20 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
21 # Prepend more data that yield a different type of imbalanced contents: |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
22 # Although counts of q and Q are equal now, the unshielded 'cm' before |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
23 # the first 'q' makes the contents unusable for insertions. |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
24 pymupdf.TOOLS._insert_contents(page, b"1 0 0 -1 0 0 cm q ", False) # prepend |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
25 assert page.is_wrapped is False |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
26 if page._count_q_balance() == (0, 0): |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
27 print("imbalance undetected by q balance count") |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
28 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
29 text = "Hello, World!" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
30 page.insert_text((100, 100), text) # establishes balance! |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
31 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
32 # this should have produced a balanced graphics state |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
33 assert page._count_q_balance() == (0, 0) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
34 assert page.is_wrapped |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
35 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
36 # an appended "pop" must be balanced by a prepended "push" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
37 pymupdf.TOOLS._insert_contents(page, b"Q", True) # append |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
38 assert page._count_q_balance() == (1, 0) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
39 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
40 # a prepended "pop" yet needs another push |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
41 pymupdf.TOOLS._insert_contents(page, b"Q", False) # prepend |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
42 assert page._count_q_balance() == (2, 0) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
43 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
44 # an appended "push" needs an additional "pop" |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
45 pymupdf.TOOLS._insert_contents(page, b"q", True) # append |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
46 assert page._count_q_balance() == (2, 1) |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
47 |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
48 # wrapping the contents should yield a balanced state again |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
49 assert page.is_wrapped is False |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
50 page.wrap_contents() |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
51 assert page.is_wrapped is True |
|
1d09e1dec1d9
ADD: PyMuPDF v1.26.4: the original sdist.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
52 assert page._count_q_balance() == (0, 0) |
