-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
Copy pathtest_pagerange.py
123 lines (96 loc) · 3.2 KB
/
test_pagerange.py
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
"""Test the pypdf.pagerange module."""
import pytest
from pypdf.pagerange import PageRange, ParseError, parse_filename_page_ranges
def test_equality():
pr1 = PageRange(slice(0, 5))
pr2 = PageRange(slice(0, 5))
assert pr1 == pr2
@pytest.mark.parametrize(
("page_range", "expected"),
[(slice(0, 5), "0:5"), (slice(0, 5, 2), "0:5:2"), ("-1", "-1:"), ("0", "0")],
)
def test_str(page_range, expected):
assert str(PageRange(page_range)) == expected
@pytest.mark.parametrize(
("page_range", "expected"),
[(slice(0, 5), "PageRange('0:5')"), (slice(0, 5, 2), "PageRange('0:5:2')")],
)
def test_repr(page_range, expected):
assert repr(PageRange(page_range)) == expected
def test_equality_other_objectc():
pr1 = PageRange(slice(0, 5))
pr2 = "PageRange(slice(0, 5))"
assert pr1 != pr2
def test_idempotency():
pr = PageRange(slice(0, 5))
pr2 = PageRange(pr)
assert pr == pr2
@pytest.mark.parametrize(
("range_str", "expected"),
[
("42", slice(42, 43)),
("1:2", slice(1, 2)),
],
)
def test_str_init(range_str, expected):
pr = PageRange(range_str)
assert pr._slice == expected
assert PageRange.valid
def test_str_init_error():
init_str = "1-2"
assert PageRange.valid(init_str) is False
with pytest.raises(ParseError) as exc:
PageRange(init_str)
assert exc.value.args[0] == "1-2"
@pytest.mark.parametrize(
("params", "expected"),
[
(["foo.pdf", "1:5"], [("foo.pdf", PageRange("1:5"))]),
(
["foo.pdf", "1:5", "bar.pdf"],
[("foo.pdf", PageRange("1:5")), ("bar.pdf", PageRange(":"))],
),
],
)
def test_parse_filename_page_ranges(params, expected):
assert parse_filename_page_ranges(params) == expected
def test_parse_filename_page_ranges_err():
with pytest.raises(ValueError) as exc:
parse_filename_page_ranges(["1:5", "foo.pdf"])
assert (
exc.value.args[0] == "The first argument must be a filename, not a page range."
)
@pytest.mark.parametrize(
("a", "b", "expected"),
[
(PageRange(slice(0, 5)), PageRange(slice(2, 10)), slice(0, 10)),
(PageRange(slice(0, 5)), PageRange(slice(2, 3)), slice(0, 5)),
(PageRange(slice(0, 5)), PageRange(slice(5, 10)), slice(0, 10)),
],
)
def test_addition(a, b, expected):
pr1 = PageRange(a)
pr2 = PageRange(b)
assert pr1 + pr2 == PageRange(expected)
assert pr2 + pr1 == PageRange(expected) # addition is commutative
@pytest.mark.parametrize(
("a", "b"),
[
(PageRange(slice(0, 5)), PageRange(slice(7, 10))),
(PageRange(slice(7, 10)), PageRange(slice(0, 5))),
],
)
def test_addition_gap(a: PageRange, b: PageRange):
with pytest.raises(ValueError) as exc:
a + b
assert exc.value.args[0] == "Can't add PageRanges with gap"
def test_addition_non_page_range():
with pytest.raises(TypeError) as exc:
PageRange(slice(0, 5)) + "2:7"
assert exc.value.args[0] == "Can't add PageRange and <class 'str'>"
def test_addition_stride():
a = PageRange(slice(0, 5, 2))
b = PageRange(slice(7, 9))
with pytest.raises(ValueError) as exc:
a + b
assert exc.value.args[0] == "Can't add PageRange with stride"