blob: 4e3eb48569bcf23f71c0c9a6587cdd6c2b01bc51 [file] [log] [blame]
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()