|
| 1 | +from io import BytesIO |
| 2 | + |
1 | 3 | import pytest |
2 | 4 |
|
| 5 | +from pypdf import PdfReader |
3 | 6 | from pypdf._page_labels import ( |
| 7 | + index2label, |
4 | 8 | number2lowercase_letter, |
5 | 9 | number2lowercase_roman_numeral, |
| 10 | + number2uppercase_letter, |
6 | 11 | number2uppercase_roman_numeral, |
| 12 | + nums_clear_range, |
| 13 | + nums_insert, |
| 14 | + nums_next, |
| 15 | +) |
| 16 | +from pypdf.generic import ( |
| 17 | + DictionaryObject, |
| 18 | + NameObject, |
| 19 | + NullObject, |
| 20 | + NumberObject, |
7 | 21 | ) |
8 | 22 |
|
| 23 | +from . import get_pdf_from_url |
| 24 | + |
9 | 25 |
|
10 | 26 | @pytest.mark.parametrize( |
11 | 27 | ("number", "expected"), |
@@ -44,3 +60,46 @@ def test_number2lowercase_roman_numeral(): |
44 | 60 | ) |
45 | 61 | def test_number2lowercase_letter(number, expected): |
46 | 62 | assert number2lowercase_letter(number) == expected |
| 63 | + |
| 64 | + |
| 65 | +def test_number2uppercase_letter(): |
| 66 | + with pytest.raises(ValueError): |
| 67 | + number2uppercase_letter(-1) |
| 68 | + |
| 69 | + |
| 70 | +@pytest.mark.external |
| 71 | +def test_index2label(caplog): |
| 72 | + url = "https://github.com/py-pdf/pypdf/files/10773829/waarom-meisjes-het-beter-doen-op-HAVO-en-VWO-ROA.pdf" |
| 73 | + name = "waarom-meisjes-het-beter-doen-op-HAVO-en-VWO-ROA.pdf" |
| 74 | + r = PdfReader(BytesIO(get_pdf_from_url(url, name=name))) |
| 75 | + assert index2label(r, 1) == "ii" |
| 76 | + assert index2label(r, 9) == "6" |
| 77 | + # very silly data to get test cover |
| 78 | + r.trailer["/Root"]["/PageLabels"]["/Nums"].append(8) |
| 79 | + r.trailer["/Root"]["/PageLabels"]["/Nums"].append(NullObject()) |
| 80 | + assert index2label(r, 9) == "10" |
| 81 | + |
| 82 | + with pytest.raises(ValueError): |
| 83 | + nums_clear_range( |
| 84 | + NumberObject(10), 8, r.trailer["/Root"]["/PageLabels"]["/Nums"] |
| 85 | + ) |
| 86 | + r.trailer["/Root"]["/PageLabels"]["/Nums"].append(8) |
| 87 | + with pytest.raises(ValueError): |
| 88 | + nums_next(NumberObject(10), r.trailer["/Root"]["/PageLabels"]["/Nums"]) |
| 89 | + with pytest.raises(ValueError): |
| 90 | + nums_clear_range( |
| 91 | + NumberObject(10), 8, r.trailer["/Root"]["/PageLabels"]["/Nums"] |
| 92 | + ) |
| 93 | + with pytest.raises(ValueError): |
| 94 | + nums_insert( |
| 95 | + NumberObject(10), |
| 96 | + DictionaryObject(), |
| 97 | + r.trailer["/Root"]["/PageLabels"]["/Nums"], |
| 98 | + ) |
| 99 | + |
| 100 | + del r.trailer["/Root"]["/PageLabels"]["/Nums"] |
| 101 | + assert index2label(r, 1) == "2" |
| 102 | + caplog.clear() |
| 103 | + r.trailer["/Root"]["/PageLabels"][NameObject("/Kids")] = NullObject() |
| 104 | + assert index2label(r, 1) == "2" |
| 105 | + assert caplog.text != "" |
0 commit comments