| from __future__ import absolute_import |
| from modulegraph import zipio |
| import os |
| import time |
| import sys |
| |
| if sys.version_info[:2] <= (2, 6): |
| import unittest2 as unittest |
| |
| else: |
| import unittest |
| |
| TESTDATA=os.path.join( |
| os.path.dirname(os.path.abspath(__file__)), |
| 'testdata') |
| |
| class TestModuleGraph (unittest.TestCase): |
| def test_locating(self): |
| # Private function |
| self.assertEqual(zipio._locate('/usr/bin/ditto'), ('/usr/bin/ditto', None)) |
| self.assertEqual(zipio._locate('/usr/bin/ditto/bar'), ('/usr/bin/ditto', 'bar')) |
| self.assertEqual(zipio._locate('/usr/bin/ditto/foo/bar///bar/'), ('/usr/bin/ditto', 'foo/bar/bar')) |
| self.assertEqual(zipio._locate('/usr/bin/ditto///foo/bar///bar/'), ('/usr/bin/ditto', 'foo/bar/bar')) |
| self.assertRaises(IOError, zipio._locate, '/usr/bin/ditto.bar') |
| self.assertRaises(IOError, zipio._locate, '/foo/bar/baz.txt') |
| |
| def test_open(self): |
| # 1. Regular file |
| fp = zipio.open(os.path.join(TESTDATA, 'test.txt'), 'r') |
| data = fp.read() |
| fp.close() |
| self.assertEqual(data, 'This is test.txt\n') |
| |
| if sys.version_info[0] == 3: |
| fp = zipio.open(os.path.join(TESTDATA, 'test.txt'), 'rb') |
| data = fp.read() |
| fp.close() |
| self.assertEqual(data, b'This is test.txt\n') |
| |
| # 2. File inside zipfile |
| fp = zipio.open(os.path.join(TESTDATA, 'zipped.egg', 'test.txt'), 'r') |
| data = fp.read() |
| fp.close() |
| self.assertEqual(data, 'Zipped up test.txt\n') |
| |
| if sys.version_info[0] == 3: |
| fp = zipio.open(os.path.join(TESTDATA, 'zipped.egg', 'test.txt'), 'rb') |
| data = fp.read() |
| fp.close() |
| self.assertEqual(data, b'Zipped up test.txt\n') |
| |
| # 3. EXC: Directory inside zipfile |
| self.assertRaises(IOError, zipio.open, os.path.join(TESTDATA, 'zipped.egg', 'subdir')) |
| self.assertRaises(IOError, zipio.open, os.path.join(TESTDATA, 'zipped.egg', 'subdir2')) |
| self.assertRaises(IOError, zipio.open, os.path.join(TESTDATA, 'zipped.egg', 'subdir2/subdir')) |
| self.assertRaises(IOError, zipio.open, os.path.join(TESTDATA, 'zipped.egg', 'subdir3')) |
| # TODO: Add subdir4/file.txt, without directory entry |
| self.assertRaises(IOError, zipio.open, os.path.join(TESTDATA, 'zipped.egg', 'subdir4')) |
| |
| # 4. EXC: No such file in zipfile |
| self.assertRaises(IOError, zipio.open, os.path.join(TESTDATA, 'zipped.egg', 'no-such-file')) |
| self.assertRaises(IOError, zipio.open, os.path.join(TESTDATA, 'zipped.egg', 'subdir/no-such-file')) |
| |
| # 5. EXC: No such regular file |
| self.assertRaises(IOError, zipio.open, os.path.join(TESTDATA, 'no-such-file.txt')) |
| |
| # 6. EXC: Open r/w |
| self.assertRaises(IOError, zipio.open, os.path.join(TESTDATA, 'test.txt'), 'w') |
| self.assertRaises(IOError, zipio.open, os.path.join(TESTDATA, 'test.txt'), 'a') |
| self.assertRaises(IOError, zipio.open, os.path.join(TESTDATA, 'test.txt'), 'r+') |
| self.assertRaises(IOError, zipio.open, os.path.join(TESTDATA, 'test.txt'), 'w+') |
| self.assertRaises(IOError, zipio.open, os.path.join(TESTDATA, 'test.txt'), 'a+') |
| |
| def test_listdir(self): |
| # 1. Regular directory |
| self.assertEqual(set(os.listdir(os.path.join(TESTDATA, 'subdir'))), {'file1.txt', 'file2.txt'}) |
| |
| # 2. Zipfile with files in directory |
| self.assertEqual(set(zipio.listdir(os.path.join(TESTDATA, 'zipped.egg'))), { |
| 'test.txt', 'subdir', 'subdir2', 'subdir3', 'subdir4'}) |
| |
| # 3. Zipfile with files in subdirectory |
| self.assertEqual(set(zipio.listdir(os.path.join(TESTDATA, 'zipped.egg', 'subdir'))), {'file1.txt', 'file2.txt'}) |
| self.assertEqual(set(zipio.listdir(os.path.join(TESTDATA, 'zipped.egg', 'subdir2'))), {'subdir'}) |
| self.assertEqual(set(zipio.listdir(os.path.join(TESTDATA, 'zipped.egg', 'subdir4', 'subdir6'))), {'mydir'}) |
| |
| # 4. Zipfile with entry for directory, no files |
| self.assertEqual(set(zipio.listdir(os.path.join(TESTDATA, 'zipped.egg', 'subdir3'))), set([])) |
| |
| # 5. EXC: Zipfile without directory |
| self.assertRaises(IOError, zipio.listdir, os.path.join(TESTDATA, 'zipped.egg', 'subdir10')) |
| |
| # 6. EXC: Regular directory doesn't exist |
| self.assertRaises(IOError, zipio.listdir, os.path.join(TESTDATA, 'subdir10')) |
| |
| def test_isfile(self): |
| self.assertTrue(zipio.isfile(os.path.join(TESTDATA, 'test.txt'))) |
| self.assertFalse(zipio.isfile(os.path.join(TESTDATA, 'subdir'))) |
| self.assertRaises(IOError, zipio.isfile, os.path.join(TESTDATA, 'no-such-file')) |
| self.assertFalse(zipio.isfile(os.path.join(TESTDATA, 'zipped.egg'))) |
| self.assertFalse(zipio.isfile(os.path.join(TESTDATA, 'zipped.egg', 'subdir4'))) |
| self.assertTrue(zipio.isfile(os.path.join(TESTDATA, 'zipped.egg', 'test.txt'))) |
| self.assertFalse(zipio.isfile(os.path.join(TESTDATA, 'zipped.egg', 'subdir'))) |
| self.assertRaises(IOError, zipio.isfile, os.path.join(TESTDATA, 'zipped.egg', 'no-such-file')) |
| self.assertTrue(zipio.isfile(os.path.join(TESTDATA, 'zipped.egg', 'subdir2', 'subdir', 'file1.txt'))) |
| |
| def test_isdir(self): |
| self.assertTrue(zipio.isdir(TESTDATA)) |
| self.assertFalse(zipio.isdir(os.path.join(TESTDATA, 'test.txt'))) |
| self.assertTrue(zipio.isdir(os.path.join(TESTDATA, 'zipped.egg'))) |
| self.assertTrue(zipio.isdir(os.path.join(TESTDATA, 'zipped.egg', 'subdir'))) |
| self.assertTrue(zipio.isdir(os.path.join(TESTDATA, 'zipped.egg', 'subdir2/subdir'))) |
| self.assertTrue(zipio.isdir(os.path.join(TESTDATA, 'zipped.egg', 'subdir4'))) |
| self.assertFalse(zipio.isdir(os.path.join(TESTDATA, 'zipped.egg', 'subdir4', 'file.txt'))) |
| self.assertRaises(IOError, zipio.isdir, os.path.join(TESTDATA, 'no-such-file')) |
| self.assertRaises(IOError, zipio.isdir, os.path.join(TESTDATA, 'zipped.egg', 'no-such-file')) |
| self.assertRaises(IOError, zipio.isdir, os.path.join(TESTDATA, 'zipped.egg', 'subdir', 'no-such-file')) |
| |
| def test_islink(self): |
| fn = os.path.join(TESTDATA, 'symlink') |
| os.symlink('test.txt', fn) |
| try: |
| self.assertTrue(zipio.islink(fn)) |
| |
| finally: |
| os.unlink(fn) |
| |
| self.assertFalse(zipio.islink(os.path.join(TESTDATA, 'test.txt'))) |
| self.assertFalse(zipio.islink(os.path.join(TESTDATA, 'subdir'))) |
| self.assertFalse(zipio.islink(os.path.join(TESTDATA, 'zipped.egg'))) |
| self.assertFalse(zipio.islink(os.path.join(TESTDATA, 'zipped.egg/subdir'))) |
| self.assertFalse(zipio.islink(os.path.join(TESTDATA, 'zipped.egg/subdir4'))) |
| self.assertFalse(zipio.islink(os.path.join(TESTDATA, 'zipped.egg/test.txt'))) |
| self.assertFalse(zipio.islink(os.path.join(TESTDATA, 'zipped.egg/subdir/file1.txt'))) |
| |
| self.assertRaises(IOError, zipio.islink, os.path.join(TESTDATA, 'no-such-file')) |
| self.assertRaises(IOError, zipio.islink, os.path.join(TESTDATA, 'zipped.egg', 'no-such-file')) |
| |
| |
| def test_readlink(self): |
| fn = os.path.join(TESTDATA, 'symlink') |
| os.symlink('test.txt', fn) |
| try: |
| self.assertEqual(zipio.readlink(fn), 'test.txt') |
| |
| finally: |
| os.unlink(fn) |
| |
| self.assertRaises(OSError, zipio.readlink, os.path.join(TESTDATA, 'test.txt')) |
| self.assertRaises(OSError, zipio.readlink, os.path.join(TESTDATA, 'subdir')) |
| self.assertRaises(OSError, zipio.readlink, os.path.join(TESTDATA, 'zipped.egg')) |
| self.assertRaises(OSError, zipio.readlink, os.path.join(TESTDATA, 'zipped.egg', 'subdir4')) |
| self.assertRaises(OSError, zipio.readlink, os.path.join(TESTDATA, 'zipped.egg', 'no-such-file')) |
| self.assertRaises(OSError, zipio.readlink, os.path.join(TESTDATA, 'zipped.egg', 'subdir/no-such-file')) |
| |
| def test_getmtime(self): |
| fn = os.path.join(TESTDATA, 'test.txt') |
| self.assertEqual(os.path.getmtime(fn), zipio.getmtime(fn)) |
| |
| fn = os.path.join(TESTDATA, 'zipped.egg') |
| self.assertEqual(os.path.getmtime(fn), zipio.getmtime(fn)) |
| |
| fn = os.path.join(TESTDATA, 'zipped.egg/test.txt') |
| self.assertIn(zipio.getmtime(fn), (1300193680.0, 1300222480.0)) |
| |
| fn = os.path.join(TESTDATA, 'zipped.egg/subdir') |
| self.assertIn(zipio.getmtime(fn), (1300193890.0, 1300222690.0)) |
| |
| fn = os.path.join(TESTDATA, 'zipped.egg/subdir4') |
| self.assertEqual(zipio.getmtime(fn), os.path.getmtime(os.path.join(TESTDATA, 'zipped.egg'))) |
| |
| self.assertRaises(IOError, zipio.getmtime, os.path.join(TESTDATA, 'no-file')) |
| self.assertRaises(IOError, zipio.getmtime, os.path.join(TESTDATA, 'zipped.egg/no-file')) |
| |
| def test_contextlib(self): |
| # 1. Regular file |
| with zipio.open(os.path.join(TESTDATA, 'test.txt'), 'r') as fp: |
| data = fp.read() |
| try: |
| fp.read() |
| self.fail("file not closed") |
| except (ValueError, IOError): |
| pass |
| |
| self.assertEqual(data, 'This is test.txt\n') |
| |
| if sys.version_info[0] == 3: |
| with zipio.open(os.path.join(TESTDATA, 'test.txt'), 'rb') as fp: |
| data = fp.read() |
| try: |
| fp.read() |
| self.fail("file not closed") |
| except (ValueError, IOError): |
| pass |
| |
| self.assertEqual(data, b'This is test.txt\n') |
| |
| # 2. File inside zipfile |
| with zipio.open(os.path.join(TESTDATA, 'zipped.egg', 'test.txt'), 'r') as fp: |
| data = fp.read() |
| try: |
| fp.read() |
| self.fail("file not closed") |
| except (ValueError, IOError): |
| pass |
| self.assertEqual(data, 'Zipped up test.txt\n') |
| |
| if sys.version_info[0] == 3: |
| with zipio.open(os.path.join(TESTDATA, 'zipped.egg', 'test.txt'), 'rb') as fp: |
| data = fp.read() |
| try: |
| fp.read() |
| self.fail("file not closed") |
| except (IOError, ValueError): |
| pass |
| self.assertEqual(data, b'Zipped up test.txt\n') |
| |
| if __name__ == "__main__": |
| unittest.main() |