Mercurial > hg-stable
view tests/test-cappedreader.py @ 43874:bc7d8f45c3b6
rust-dirs: handle forgotten `Result`s
In 1fe2e574616e I introduced a temporary bugfix to align Rust code with a new
behavior from C/Python and forgot about a few `Result`s (cargo's compiler cache
does not re-emit warnings on cached modules). This fixes it.
For the record, I am still unsure that this behavior change is a good idea.
Note: I was already quite unhappy with the setters and getters for the
`DirstateMap` and, indirectly, `Dirs`, and this only further reinforces my
feelings. I hope we can one day fix that situation at the type level; Georges
Racinet and I were just talking about devising a POC for using the builder
pattern in the context of FFI with Python, we'll see what comes out of it.
Differential Revision: https://phab.mercurial-scm.org/D7609
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Thu, 12 Dec 2019 15:55:25 +0100 |
parents | 2372284d9457 |
children | 6000f5b25c9b |
line wrap: on
line source
from __future__ import absolute_import, print_function import io import unittest from mercurial import util class CappedReaderTests(unittest.TestCase): def testreadfull(self): source = io.BytesIO(b'x' * 100) reader = util.cappedreader(source, 10) res = reader.read(10) self.assertEqual(res, b'x' * 10) self.assertEqual(source.tell(), 10) source.seek(0) reader = util.cappedreader(source, 15) res = reader.read(16) self.assertEqual(res, b'x' * 15) self.assertEqual(source.tell(), 15) source.seek(0) reader = util.cappedreader(source, 100) res = reader.read(100) self.assertEqual(res, b'x' * 100) self.assertEqual(source.tell(), 100) source.seek(0) reader = util.cappedreader(source, 50) res = reader.read() self.assertEqual(res, b'x' * 50) self.assertEqual(source.tell(), 50) source.seek(0) def testreadnegative(self): source = io.BytesIO(b'x' * 100) reader = util.cappedreader(source, 20) res = reader.read(-1) self.assertEqual(res, b'x' * 20) self.assertEqual(source.tell(), 20) source.seek(0) reader = util.cappedreader(source, 100) res = reader.read(-1) self.assertEqual(res, b'x' * 100) self.assertEqual(source.tell(), 100) source.seek(0) def testreadmultiple(self): source = io.BytesIO(b'x' * 100) reader = util.cappedreader(source, 10) for i in range(10): res = reader.read(1) self.assertEqual(res, b'x') self.assertEqual(source.tell(), i + 1) self.assertEqual(source.tell(), 10) res = reader.read(1) self.assertEqual(res, b'') self.assertEqual(source.tell(), 10) source.seek(0) reader = util.cappedreader(source, 45) for i in range(4): res = reader.read(10) self.assertEqual(res, b'x' * 10) self.assertEqual(source.tell(), (i + 1) * 10) res = reader.read(10) self.assertEqual(res, b'x' * 5) self.assertEqual(source.tell(), 45) def readlimitpasteof(self): source = io.BytesIO(b'x' * 100) reader = util.cappedreader(source, 1024) res = reader.read(1000) self.assertEqual(res, b'x' * 100) self.assertEqual(source.tell(), 100) res = reader.read(1000) self.assertEqual(res, b'') self.assertEqual(source.tell(), 100) if __name__ == '__main__': import silenttestrunner silenttestrunner.main(__name__)