Mercurial > hg
view tests/test-cappedreader.py @ 51885:adbb183c2f27
vfs: simplify the `abstractvfs.rename()` implementation
PyCharm was yapping about `util.rename()` not returning anything, because it is
typed to return `None`, but the value was captured and returned after calling
`_avoidambig()`. Instead, drop all of that, unconditionally rename, and then
call `_avoidambig()` if appropriate.
While we're here, convert the ersatz ternary operator into a modern one to help
pytype. When a variable is initialized the old way, pytype tends to assign the
type of the LHS of the `and`. In this case, that's a bool, and it will get
confused that bool doesn't have a `stat` attribute once this method gets more
type annotations. (Currently it thinks the `checkambig` arg is `Any`, so it
doesn't care.)
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 20 Sep 2024 01:16:16 -0400 |
parents | 6000f5b25c9b |
children |
line wrap: on
line source
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__)