-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_to_file_like_obj.py
96 lines (63 loc) · 2.2 KB
/
test_to_file_like_obj.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
import io
import pytest
from to_file_like_obj import to_file_like_obj
def test_basic():
bytes_iter = (b'ab', b'cd', b'ef')
f = to_file_like_obj(bytes_iter)
assert [f.read(1) for _ in range(0, 7)] == [b'a', b'b', b'c', b'd', b'e', b'f', b'']
def test_basic_bytes_base():
bytes_iter = (b'ab', b'cd', b'ef')
f = to_file_like_obj(bytes_iter, base=bytes)
assert [f.read(1) for _ in range(0, 7)] == [b'a', b'b', b'c', b'd', b'e', b'f', b'']
def test_basic_str_base():
bytes_iter = ('ab', 'cd', 'ef')
f = to_file_like_obj(bytes_iter, base=str)
assert [f.read(1) for _ in range(0, 7)] == ['a', 'b', 'c', 'd', 'e', 'f', '']
def test_read_crossing_chunk_boundaries():
bytes_iter = (b'ab', b'cd', b'ef')
f = to_file_like_obj(bytes_iter)
assert [f.read(3), f.read(2), f.read(2), f.read(2)] == [b'abc', b'de', b'f', b'']
def test_lazy_iteration():
bytes_iter = (b'ab', b'cd', b'ef')
log = []
def logged(it):
for v in it:
log.append(v)
yield v
f = to_file_like_obj(logged(bytes_iter))
while True:
c = f.read(1)
if not c:
break
log.append(c)
assert log == [b'ab', b'a', b'b', b'cd', b'c', b'd', b'ef', b'e', b'f']
def test_exception_propagates():
def bytes_iter():
yield from ()
raise Exception("My exception")
f = to_file_like_obj(bytes_iter())
with pytest.raises(Exception, match="My exception"):
f.read()
def test_textiowrapper_groups_into_lines():
bytes_iter = (b'a\nb', b'c\nd', b'e\nf')
f = to_file_like_obj(bytes_iter)
lines = io.TextIOWrapper(f, newline='', encoding='utf=8')
assert list(lines) == ['a\n', 'bc\n', 'de\n', 'f']
def test_default_after_number():
bytes_iter = (b'ab', b'cd', b'ef')
f = to_file_like_obj(bytes_iter)
assert [f.read(1), f.read(), f.read()] == [b'a', b'bcdef', b'']
@pytest.mark.parametrize(
"args,kwargs",
[
((), {}),
((-1,), {}),
((), {"size": -1}),
((None,), {}),
((), {"size": None}),
]
)
def test_default(args, kwargs):
bytes_iter = (b'ab', b'cd', b'ef')
f = to_file_like_obj(bytes_iter)
assert f.read(*args, **kwargs) == b'abcdef'