diff options
Diffstat (limited to 'Lib/unittest/test/testmock/testwith.py')
| -rw-r--r-- | Lib/unittest/test/testmock/testwith.py | 83 | 
1 files changed, 83 insertions, 0 deletions
diff --git a/Lib/unittest/test/testmock/testwith.py b/Lib/unittest/test/testmock/testwith.py index 0a0cfad..f54e051 100644 --- a/Lib/unittest/test/testmock/testwith.py +++ b/Lib/unittest/test/testmock/testwith.py @@ -172,5 +172,88 @@ class TestMockOpen(unittest.TestCase):          self.assertEqual(result, 'foo') +    def test_readline_data(self): +        # Check that readline will return all the lines from the fake file +        mock = mock_open(read_data='foo\nbar\nbaz\n') +        with patch('%s.open' % __name__, mock, create=True): +            h = open('bar') +            line1 = h.readline() +            line2 = h.readline() +            line3 = h.readline() +        self.assertEqual(line1, 'foo\n') +        self.assertEqual(line2, 'bar\n') +        self.assertEqual(line3, 'baz\n') + +        # Check that we properly emulate a file that doesn't end in a newline +        mock = mock_open(read_data='foo') +        with patch('%s.open' % __name__, mock, create=True): +            h = open('bar') +            result = h.readline() +        self.assertEqual(result, 'foo') + + +    def test_readlines_data(self): +        # Test that emulating a file that ends in a newline character works +        mock = mock_open(read_data='foo\nbar\nbaz\n') +        with patch('%s.open' % __name__, mock, create=True): +            h = open('bar') +            result = h.readlines() +        self.assertEqual(result, ['foo\n', 'bar\n', 'baz\n']) + +        # Test that files without a final newline will also be correctly +        # emulated +        mock = mock_open(read_data='foo\nbar\nbaz') +        with patch('%s.open' % __name__, mock, create=True): +            h = open('bar') +            result = h.readlines() + +        self.assertEqual(result, ['foo\n', 'bar\n', 'baz']) + + +    def test_mock_open_read_with_argument(self): +        # At one point calling read with an argument was broken +        # for mocks returned by mock_open +        some_data = 'foo\nbar\nbaz' +        mock = mock_open(read_data=some_data) +        self.assertEqual(mock().read(10), some_data) + + +    def test_interleaved_reads(self): +        # Test that calling read, readline, and readlines pulls data +        # sequentially from the data we preload with +        mock = mock_open(read_data='foo\nbar\nbaz\n') +        with patch('%s.open' % __name__, mock, create=True): +            h = open('bar') +            line1 = h.readline() +            rest = h.readlines() +        self.assertEqual(line1, 'foo\n') +        self.assertEqual(rest, ['bar\n', 'baz\n']) + +        mock = mock_open(read_data='foo\nbar\nbaz\n') +        with patch('%s.open' % __name__, mock, create=True): +            h = open('bar') +            line1 = h.readline() +            rest = h.read() +        self.assertEqual(line1, 'foo\n') +        self.assertEqual(rest, 'bar\nbaz\n') + + +    def test_overriding_return_values(self): +        mock = mock_open(read_data='foo') +        handle = mock() + +        handle.read.return_value = 'bar' +        handle.readline.return_value = 'bar' +        handle.readlines.return_value = ['bar'] + +        self.assertEqual(handle.read(), 'bar') +        self.assertEqual(handle.readline(), 'bar') +        self.assertEqual(handle.readlines(), ['bar']) + +        # call repeatedly to check that a StopIteration is not propagated +        self.assertEqual(handle.readline(), 'bar') +        self.assertEqual(handle.readline(), 'bar') + +  if __name__ == '__main__':      unittest.main()  | 
