(self, close_original_fd)
| 267 | |
| 268 | @support.subTests('close_original_fd', (True, False)) |
| 269 | def test_trackfd_parameter(self, close_original_fd): |
| 270 | size = 64 |
| 271 | with open(TESTFN, "wb") as f: |
| 272 | f.write(b"a"*size) |
| 273 | with open(TESTFN, "r+b") as f: |
| 274 | with mmap.mmap(f.fileno(), size, trackfd=False) as m: |
| 275 | if close_original_fd: |
| 276 | f.close() |
| 277 | self.assertEqual(len(m), size) |
| 278 | with self.assertRaises(ValueError): |
| 279 | m.size() |
| 280 | if hasattr(m, 'resize'): |
| 281 | with self.assertRaises(ValueError): |
| 282 | m.resize(size * 2) |
| 283 | with self.assertRaises(ValueError): |
| 284 | m.resize(size // 2) |
| 285 | self.assertIs(m.closed, False) |
| 286 | |
| 287 | # Smoke-test other API |
| 288 | m.write_byte(ord('X')) |
| 289 | m[2] = ord('Y') |
| 290 | m.flush() |
| 291 | with open(TESTFN, "rb") as f: |
| 292 | self.assertEqual(f.read(4), b'XaYa') |
| 293 | self.assertEqual(m.tell(), 1) |
| 294 | m.seek(0) |
| 295 | self.assertEqual(m.tell(), 0) |
| 296 | self.assertEqual(m.read_byte(), ord('X')) |
| 297 | |
| 298 | if os.name == 'nt' and not close_original_fd: |
| 299 | self.assertRaises(PermissionError, os.rename, TESTFN, TESTFN+'1') |
| 300 | else: |
| 301 | os.rename(TESTFN, TESTFN+'1') |
| 302 | os.rename(TESTFN+'1', TESTFN) |
| 303 | |
| 304 | self.assertIs(m.closed, True) |
| 305 | self.assertEqual(os.stat(TESTFN).st_size, size) |
| 306 | |
| 307 | def test_trackfd_neg1(self): |
| 308 | size = 64 |
nothing calls this directly
no test coverage detected