|
14 | 14 | # See the License for the specific language governing permissions and
|
15 | 15 | # limitations under the License.
|
16 | 16 |
|
17 |
| -"""Tests for the fake_tempfile module.""" |
18 |
| - |
19 |
| -# pylint: disable-all |
| 17 | +"""Tests that ensure that the `tempfile` module works with `fake_filesystem` |
| 18 | +if using `Patcher` (via `fake_filesystem_unittest`). |
| 19 | +""" |
20 | 20 |
|
| 21 | +import os |
21 | 22 | import stat
|
22 | 23 | import sys
|
23 | 24 |
|
| 25 | +import tempfile |
| 26 | + |
24 | 27 | if sys.version_info < (2, 7):
|
25 | 28 | import unittest2 as unittest
|
26 | 29 | else:
|
27 | 30 | import unittest
|
28 | 31 |
|
29 |
| -try: |
30 |
| - import StringIO as io # pylint: disable-msg=C6204 |
31 |
| -except ImportError: |
32 |
| - import io # pylint: disable-msg=C6204 |
33 |
| - |
34 |
| -from pyfakefs import fake_filesystem |
35 |
| -from pyfakefs import fake_tempfile |
36 |
| - |
37 |
| - |
38 |
| -class FakeLogging(object): |
39 |
| - """Fake logging object for testGettempprefix.""" |
40 |
| - |
41 |
| - def __init__(self, test_case): |
42 |
| - self._message = None |
43 |
| - self._test_case = test_case |
44 |
| - |
45 |
| - # pylint: disable-msg=C6409 |
46 |
| - def error(self, message): |
47 |
| - if self._message is not None: |
48 |
| - self.FailOnMessage(message) |
49 |
| - self._message = message |
| 32 | +from pyfakefs import fake_filesystem_unittest |
50 | 33 |
|
51 |
| - def FailOnMessage(self, message): |
52 |
| - self._test_case.fail('Unexpected message received: %s' % message) |
53 | 34 |
|
54 |
| - warn = FailOnMessage |
55 |
| - info = FailOnMessage |
56 |
| - debug = FailOnMessage |
57 |
| - fatal = FailOnMessage |
58 |
| - |
59 |
| - def message(self): |
60 |
| - return self._message |
61 |
| - |
62 |
| - |
63 |
| -class FakeTempfileModuleTest(unittest.TestCase): |
64 |
| - """Test the 'tempfile' module mock.""" |
| 35 | +class FakeTempfileModuleTest(fake_filesystem_unittest.TestCase): |
| 36 | + """Test the 'tempfile' module with the fake file system.""" |
65 | 37 |
|
66 | 38 | def setUp(self):
|
67 |
| - self.filesystem = fake_filesystem.FakeFilesystem(path_separator='/') |
68 |
| - self.os = fake_filesystem.FakeOsModule(self.filesystem) |
69 |
| - self.tempfile = fake_tempfile.FakeTempfileModule(self.filesystem) |
70 |
| - self.orig_logging = fake_tempfile.logging |
71 |
| - self.fake_logging = FakeLogging(self) |
72 |
| - fake_tempfile.logging = self.fake_logging |
73 |
| - |
74 |
| - def tearDown(self): |
75 |
| - fake_tempfile.logging = self.orig_logging |
76 |
| - |
77 |
| - def testTempFilename(self): |
78 |
| - # pylint: disable-msg=C6002 |
79 |
| - # TODO: test that tempdir is init'ed |
80 |
| - filename_a = self.tempfile._TempFilename() |
81 |
| - # expect /tmp/tmp###### |
82 |
| - self.assertTrue(filename_a.startswith('/tmp/tmp')) |
83 |
| - self.assertLess(len('/tmp/tmpA'), len(filename_a)) |
84 |
| - |
85 |
| - # see that random part changes |
86 |
| - filename_b = self.tempfile._TempFilename() |
87 |
| - self.assertTrue(filename_b.startswith('/tmp/tmp')) |
88 |
| - self.assertLess(len('/tmp/tmpB'), len(filename_a)) |
89 |
| - self.assertNotEqual(filename_a, filename_b) |
90 |
| - |
91 |
| - def testTempFilenameSuffix(self): |
92 |
| - """test tempfile._TempFilename(suffix=).""" |
93 |
| - filename = self.tempfile._TempFilename(suffix='.suffix') |
94 |
| - self.assertTrue(filename.startswith('/tmp/tmp')) |
95 |
| - self.assertTrue(filename.endswith('.suffix')) |
96 |
| - self.assertLess(len('/tmp/tmpX.suffix'), len(filename)) |
97 |
| - |
98 |
| - def testTempFilenamePrefix(self): |
99 |
| - """test tempfile._TempFilename(prefix=).""" |
100 |
| - filename = self.tempfile._TempFilename(prefix='prefix.') |
101 |
| - self.assertTrue(filename.startswith('/tmp/prefix.')) |
102 |
| - self.assertLess(len('/tmp/prefix.X'), len(filename)) |
103 |
| - |
104 |
| - def testTempFilenameDir(self): |
105 |
| - """test tempfile._TempFilename(dir=).""" |
106 |
| - filename = self.tempfile._TempFilename(directory='/dir') |
107 |
| - self.assertTrue(filename.startswith('/dir/tmp')) |
108 |
| - self.assertLess(len('/dir/tmpX'), len(filename)) |
109 |
| - |
110 |
| - def testTemporaryFile(self): |
111 |
| - obj = self.tempfile.TemporaryFile() |
112 |
| - self.assertEqual('<fdopen>', obj.name) |
113 |
| - self.assertTrue(isinstance(obj, io.StringIO)) |
| 39 | + self.setUpPyfakefs() |
114 | 40 |
|
115 | 41 | def testNamedTemporaryFile(self):
|
116 |
| - obj = self.tempfile.NamedTemporaryFile() |
117 |
| - created_filenames = self.tempfile.FakeReturnedMktempValues() |
118 |
| - self.assertEqual(created_filenames[0], obj.name) |
119 |
| - self.assertTrue(self.filesystem.GetObject(obj.name)) |
| 42 | + obj = tempfile.NamedTemporaryFile() |
| 43 | + self.assertTrue(self.fs.GetObject(obj.name)) |
120 | 44 | obj.close()
|
121 |
| - self.assertRaises(IOError, self.filesystem.GetObject, created_filenames[0]) |
| 45 | + self.assertRaises(IOError, self.fs.GetObject, obj.name) |
122 | 46 |
|
123 | 47 | def testNamedTemporaryFileNoDelete(self):
|
124 |
| - obj = self.tempfile.NamedTemporaryFile(delete=False) |
| 48 | + obj = tempfile.NamedTemporaryFile(delete=False) |
125 | 49 | obj.write(b'foo')
|
126 | 50 | obj.close()
|
127 |
| - file_obj = self.filesystem.GetObject(obj.name) |
| 51 | + file_obj = self.fs.GetObject(obj.name) |
128 | 52 | contents = file_obj.contents
|
129 | 53 | self.assertEqual('foo', contents)
|
130 |
| - obj = self.tempfile.NamedTemporaryFile(mode='w', delete=False) |
| 54 | + obj = tempfile.NamedTemporaryFile(mode='w', delete=False) |
131 | 55 | obj.write('foo')
|
132 | 56 | obj.close()
|
133 |
| - file_obj = self.filesystem.GetObject(obj.name) |
| 57 | + file_obj = self.fs.GetObject(obj.name) |
134 | 58 | self.assertEqual('foo', file_obj.contents)
|
135 | 59 |
|
136 | 60 | def testMkstemp(self):
|
137 |
| - next_fd = len(self.filesystem.open_files) |
138 |
| - temporary = self.tempfile.mkstemp() |
| 61 | + next_fd = len(self.fs.open_files) |
| 62 | + temporary = tempfile.mkstemp() |
139 | 63 | self.assertEqual(2, len(temporary))
|
140 |
| - self.assertTrue(temporary[1].startswith('/tmp/tmp')) |
141 |
| - created_filenames = self.tempfile.FakeReturnedMktempValues() |
| 64 | + self.assertTrue(temporary[1].startswith(os.path.join(tempfile.gettempdir(), 'tmp'))) |
142 | 65 | self.assertEqual(next_fd, temporary[0])
|
143 |
| - self.assertEqual(temporary[1], created_filenames[0]) |
144 |
| - self.assertTrue(self.filesystem.Exists(temporary[1])) |
145 |
| - self.assertEqual(self.filesystem.GetObject(temporary[1]).st_mode, |
| 66 | + self.assertTrue(self.fs.Exists(temporary[1])) |
| 67 | + self.assertEqual(self.fs.GetObject(temporary[1]).st_mode, |
146 | 68 | stat.S_IFREG | 0o600)
|
147 |
| - fh = self.os.fdopen(temporary[0], 'w+b') |
| 69 | + fh = os.fdopen(temporary[0], 'w+b') |
148 | 70 | self.assertEqual(temporary[0], fh.fileno())
|
149 | 71 |
|
150 | 72 | def testMkstempDir(self):
|
151 | 73 | """test tempfile.mkstemp(dir=)."""
|
152 | 74 | # expect fail: /dir does not exist
|
153 |
| - self.assertRaises(OSError, self.tempfile.mkstemp, dir='/dir') |
| 75 | + self.assertRaises(OSError, tempfile.mkstemp, dir='/dir') |
154 | 76 | # expect pass: /dir exists
|
155 |
| - self.filesystem.CreateDirectory('/dir') |
156 |
| - next_fd = len(self.filesystem.open_files) |
157 |
| - temporary = self.tempfile.mkstemp(dir='/dir') |
| 77 | + self.fs.CreateDirectory('/dir') |
| 78 | + next_fd = len(self.fs.open_files) |
| 79 | + temporary = tempfile.mkstemp(dir='/dir') |
158 | 80 | self.assertEqual(2, len(temporary))
|
159 | 81 | self.assertEqual(next_fd, temporary[0])
|
160 |
| - self.assertTrue(temporary[1].startswith('/dir/tmp')) |
161 |
| - created_filenames = self.tempfile.FakeReturnedMktempValues() |
162 |
| - self.assertEqual(temporary[1], created_filenames[0]) |
163 |
| - self.assertTrue(self.filesystem.Exists(temporary[1])) |
164 |
| - self.assertEqual(self.filesystem.GetObject(temporary[1]).st_mode, |
| 82 | + self.assertTrue(temporary[1].startswith(os.path.join(os.sep, 'dir', 'tmp'))) |
| 83 | + self.assertTrue(self.fs.Exists(temporary[1])) |
| 84 | + self.assertEqual(self.fs.GetObject(temporary[1]).st_mode, |
165 | 85 | stat.S_IFREG | 0o600)
|
166 |
| - # pylint: disable-msg=C6002 |
167 |
| - # TODO: add a test that /dir is actually writable. |
168 | 86 |
|
169 | 87 | def testMkdtemp(self):
|
170 |
| - dirname = self.tempfile.mkdtemp() |
| 88 | + dirname = tempfile.mkdtemp() |
171 | 89 | self.assertTrue(dirname)
|
172 |
| - created_filenames = self.tempfile.FakeReturnedMktempValues() |
173 |
| - self.assertEqual(dirname, created_filenames[0]) |
174 |
| - self.assertTrue(self.filesystem.Exists(dirname)) |
175 |
| - self.assertEqual(self.filesystem.GetObject(dirname).st_mode, |
| 90 | + self.assertTrue(self.fs.Exists(dirname)) |
| 91 | + self.assertEqual(self.fs.GetObject(dirname).st_mode, |
176 | 92 | stat.S_IFDIR | 0o700)
|
177 | 93 |
|
178 |
| - def testGettempdir(self): |
179 |
| - self.assertEqual(None, self.tempfile.tempdir) |
180 |
| - self.assertEqual('/tmp', self.tempfile.gettempdir()) |
181 |
| - self.assertEqual('/tmp', self.tempfile.tempdir) |
182 |
| - |
183 |
| - def testGettempprefix(self): |
184 |
| - """test tempfile.gettempprefix() and the tempfile.template setter.""" |
185 |
| - self.assertEqual('tmp', self.tempfile.gettempprefix()) |
186 |
| - # set and verify |
187 |
| - self.tempfile.template = 'strung' |
188 |
| - self.assertEqual('strung', self.tempfile.gettempprefix()) |
189 |
| - self.assertEqual('tempfile.template= is a NOP in python2.4', |
190 |
| - self.fake_logging.message()) |
191 |
| - |
192 |
| - def testMktemp(self): |
193 |
| - self.assertRaises(NotImplementedError, self.tempfile.mktemp) |
194 |
| - |
195 |
| - def testTemplateGet(self): |
196 |
| - """verify tempfile.template still unimplemented.""" |
197 |
| - self.assertRaises(NotImplementedError, getattr, |
198 |
| - self.tempfile, 'template') |
199 |
| - |
200 | 94 | @unittest.skipIf(sys.version_info < (3, 0), "TemporaryDirectory showed up in 3")
|
201 | 95 | def testTemporaryDirectory(self):
|
202 |
| - with self.tempfile.TemporaryDirectory() as tmpdir: |
| 96 | + with tempfile.TemporaryDirectory() as tmpdir: |
203 | 97 | self.assertTrue(tmpdir)
|
204 |
| - created_filenames = self.tempfile.FakeReturnedMktempValues() |
205 |
| - self.assertEqual(tmpdir, created_filenames[0]) |
206 |
| - self.assertTrue(self.filesystem.Exists(tmpdir)) |
207 |
| - self.assertEqual(self.filesystem.GetObject(tmpdir).st_mode, |
| 98 | + self.assertTrue(self.fs.Exists(tmpdir)) |
| 99 | + self.assertEqual(self.fs.GetObject(tmpdir).st_mode, |
208 | 100 | stat.S_IFDIR | 0o700)
|
209 | 101 |
|
210 | 102 |
|
|
0 commit comments