| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| import sys |
| import os |
| from mozunit import main, MockedOpen |
| import unittest |
| from tempfile import mkstemp |
| |
| class TestMozUnit(unittest.TestCase): |
| def test_mocked_open(self): |
| # Create a temporary file on the file system. |
| (fd, path) = mkstemp() |
| with os.fdopen(fd, 'w') as file: |
| file.write('foobar'); |
| |
| self.assertFalse(os.path.exists('file1')) |
| self.assertFalse(os.path.exists('file2')) |
| |
| with MockedOpen({'file1': 'content1', |
| 'file2': 'content2'}): |
| self.assertTrue(os.path.exists('file1')) |
| self.assertTrue(os.path.exists('file2')) |
| self.assertFalse(os.path.exists('foo/file1')) |
| |
| # Check the contents of the files given at MockedOpen creation. |
| self.assertEqual(open('file1', 'r').read(), 'content1') |
| self.assertEqual(open('file2', 'r').read(), 'content2') |
| |
| # Check that overwriting these files alters their content. |
| with open('file1', 'w') as file: |
| file.write('foo') |
| self.assertTrue(os.path.exists('file1')) |
| self.assertEqual(open('file1', 'r').read(), 'foo') |
| |
| # ... but not until the file is closed. |
| file = open('file2', 'w') |
| file.write('bar') |
| self.assertEqual(open('file2', 'r').read(), 'content2') |
| file.close() |
| self.assertEqual(open('file2', 'r').read(), 'bar') |
| |
| # Check that appending to a file does append |
| with open('file1', 'a') as file: |
| file.write('bar') |
| self.assertEqual(open('file1', 'r').read(), 'foobar') |
| |
| self.assertFalse(os.path.exists('file3')) |
| |
| # Opening a non-existing file ought to fail. |
| self.assertRaises(IOError, open, 'file3', 'r') |
| self.assertFalse(os.path.exists('file3')) |
| |
| # Check that writing a new file does create the file. |
| with open('file3', 'w') as file: |
| file.write('baz') |
| self.assertEqual(open('file3', 'r').read(), 'baz') |
| self.assertTrue(os.path.exists('file3')) |
| |
| # Check the content of the file created outside MockedOpen. |
| self.assertEqual(open(path, 'r').read(), 'foobar') |
| |
| # Check that overwriting a file existing on the file system |
| # does modify its content. |
| with open(path, 'w') as file: |
| file.write('bazqux') |
| self.assertEqual(open(path, 'r').read(), 'bazqux') |
| |
| with MockedOpen(): |
| # Check that appending to a file existing on the file system |
| # does modify its content. |
| with open(path, 'a') as file: |
| file.write('bazqux') |
| self.assertEqual(open(path, 'r').read(), 'foobarbazqux') |
| |
| # Check that the file was not actually modified on the file system. |
| self.assertEqual(open(path, 'r').read(), 'foobar') |
| os.remove(path) |
| |
| # Check that the file created inside MockedOpen wasn't actually |
| # created. |
| self.assertRaises(IOError, open, 'file3', 'r') |
| |
| if __name__ == "__main__": |
| main() |