diff options
Diffstat (limited to 'Lib/test/test_mmap.py')
| -rw-r--r-- | Lib/test/test_mmap.py | 61 | 
1 files changed, 58 insertions, 3 deletions
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py index 62569b9879..d6addff0a3 100644 --- a/Lib/test/test_mmap.py +++ b/Lib/test/test_mmap.py @@ -1,6 +1,6 @@ -from test.support import TESTFN, run_unittest, import_module +from test.support import TESTFN, run_unittest, import_module, unlink, requires  import unittest -import os, re, itertools, socket +import os, re, itertools, socket, sys  # Skip test if we can't import mmap.  mmap = import_module('mmap') @@ -636,8 +636,63 @@ class MmapTests(unittest.TestCase):              finally:                  s.close() + +class LargeMmapTests(unittest.TestCase): + +    def setUp(self): +        unlink(TESTFN) + +    def tearDown(self): +        unlink(TESTFN) + +    def _working_largefile(self): +        # Only run if the current filesystem supports large files. +        f = open(TESTFN, 'wb', buffering=0) +        try: +            f.seek(0x80000001) +            f.write(b'x') +            f.flush() +        except (IOError, OverflowError): +            raise unittest.SkipTest("filesystem does not have largefile support") +        finally: +            f.close() +            unlink(TESTFN) + +    def test_large_offset(self): +        if sys.platform[:3] == 'win' or sys.platform == 'darwin': +            requires('largefile', +                'test requires %s bytes and a long time to run' % str(0x180000000)) +        self._working_largefile() +        with open(TESTFN, 'wb') as f: +            f.seek(0x14FFFFFFF) +            f.write(b" ") + +        with open(TESTFN, 'rb') as f: +            m = mmap.mmap(f.fileno(), 0, offset=0x140000000, access=mmap.ACCESS_READ) +            try: +                self.assertEqual(m[0xFFFFFFF], 32) +            finally: +                m.close() + +    def test_large_filesize(self): +        if sys.platform[:3] == 'win' or sys.platform == 'darwin': +            requires('largefile', +                'test requires %s bytes and a long time to run' % str(0x180000000)) +        self._working_largefile() +        with open(TESTFN, 'wb') as f: +            f.seek(0x17FFFFFFF) +            f.write(b" ") + +        with open(TESTFN, 'rb') as f: +            m = mmap.mmap(f.fileno(), 0x10000, access=mmap.ACCESS_READ) +            try: +                self.assertEqual(m.size(), 0x180000000) +            finally: +                m.close() + +  def test_main(): -    run_unittest(MmapTests) +    run_unittest(MmapTests, LargeMmapTests)  if __name__ == '__main__':      test_main()  | 
