|
@@ -15,7 +15,8 @@ from ..helpers import Location, format_file_size, format_timedelta, format_line,
|
|
|
yes, TRUISH, FALSISH, DEFAULTISH, \
|
|
|
StableDict, int_to_bigint, bigint_to_int, parse_timestamp, CompressionSpec, ChunkerParams, \
|
|
|
ProgressIndicatorPercent, ProgressIndicatorEndless, load_excludes, parse_pattern, \
|
|
|
- PatternMatcher, RegexPattern, PathPrefixPattern, FnmatchPattern, ShellPattern
|
|
|
+ PatternMatcher, RegexPattern, PathPrefixPattern, FnmatchPattern, ShellPattern, \
|
|
|
+ Buffer
|
|
|
from . import BaseTestCase, environment_variable, FakeInputs
|
|
|
|
|
|
|
|
@@ -714,6 +715,61 @@ def test_is_slow_msgpack():
|
|
|
assert not is_slow_msgpack()
|
|
|
|
|
|
|
|
|
+class TestBuffer:
|
|
|
+ def test_type(self):
|
|
|
+ buffer = Buffer(bytearray)
|
|
|
+ assert isinstance(buffer.get(), bytearray)
|
|
|
+ buffer = Buffer(bytes) # don't do that in practice
|
|
|
+ assert isinstance(buffer.get(), bytes)
|
|
|
+
|
|
|
+ def test_len(self):
|
|
|
+ buffer = Buffer(bytearray, size=0)
|
|
|
+ b = buffer.get()
|
|
|
+ assert len(buffer) == len(b) == 0
|
|
|
+ buffer = Buffer(bytearray, size=1234)
|
|
|
+ b = buffer.get()
|
|
|
+ assert len(buffer) == len(b) == 1234
|
|
|
+
|
|
|
+ def test_resize(self):
|
|
|
+ buffer = Buffer(bytearray, size=100)
|
|
|
+ assert len(buffer) == 100
|
|
|
+ b1 = buffer.get()
|
|
|
+ buffer.resize(200)
|
|
|
+ assert len(buffer) == 200
|
|
|
+ b2 = buffer.get()
|
|
|
+ assert b2 is not b1 # new, bigger buffer
|
|
|
+ buffer.resize(100)
|
|
|
+ assert len(buffer) >= 100
|
|
|
+ b3 = buffer.get()
|
|
|
+ assert b3 is b2 # still same buffer (200)
|
|
|
+ buffer.resize(100, init=True)
|
|
|
+ assert len(buffer) == 100 # except on init
|
|
|
+ b4 = buffer.get()
|
|
|
+ assert b4 is not b3 # new, smaller buffer
|
|
|
+
|
|
|
+ def test_limit(self):
|
|
|
+ buffer = Buffer(bytearray, size=100, limit=200)
|
|
|
+ buffer.resize(200)
|
|
|
+ assert len(buffer) == 200
|
|
|
+ with pytest.raises(ValueError):
|
|
|
+ buffer.resize(201)
|
|
|
+ assert len(buffer) == 200
|
|
|
+
|
|
|
+ def test_get(self):
|
|
|
+ buffer = Buffer(bytearray, size=100, limit=200)
|
|
|
+ b1 = buffer.get(50)
|
|
|
+ assert len(b1) >= 50 # == 100
|
|
|
+ b2 = buffer.get(100)
|
|
|
+ assert len(b2) >= 100 # == 100
|
|
|
+ assert b2 is b1 # did not need resizing yet
|
|
|
+ b3 = buffer.get(200)
|
|
|
+ assert len(b3) == 200
|
|
|
+ assert b3 is not b2 # new, resized buffer
|
|
|
+ with pytest.raises(ValueError):
|
|
|
+ buffer.get(201) # beyond limit
|
|
|
+ assert len(buffer) == 200
|
|
|
+
|
|
|
+
|
|
|
def test_yes_input():
|
|
|
inputs = list(TRUISH)
|
|
|
input = FakeInputs(inputs)
|