1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
"""unit tests for logilab.common.fileutils"""
import sys, os, tempfile, shutil
from os.path import join
from logilab.common.testlib import TestCase, unittest_main
from logilab.common.fileutils import *
DATA_DIR = 'data'
NEWLINES_TXT = join(DATA_DIR,'newlines.txt')
class FirstleveldirectoryTC(TestCase):
def test_known_values_first_level_directory(self):
"""return the first level directory of a path"""
self.assertEqual(first_level_directory('truc/bidule/chouette'), 'truc', None)
self.assertEqual(first_level_directory('/truc/bidule/chouette'), '/', None)
class IsBinaryTC(TestCase):
def test(self):
self.assertEqual(is_binary('toto.txt'), 0)
#self.assertEqual(is_binary('toto.xml'), 0)
self.assertEqual(is_binary('toto.bin'), 1)
self.assertEqual(is_binary('toto.sxi'), 1)
self.assertEqual(is_binary('toto.whatever'), 1)
class GetModeTC(TestCase):
def test(self):
self.assertEqual(write_open_mode('toto.txt'), 'w')
#self.assertEqual(write_open_mode('toto.xml'), 'w')
self.assertEqual(write_open_mode('toto.bin'), 'wb')
self.assertEqual(write_open_mode('toto.sxi'), 'wb')
class NormReadTC(TestCase):
def test_known_values_norm_read(self):
data = norm_read(NEWLINES_TXT)
self.assertEqual(data.strip(), '\n'.join(['# mixed new lines', '1', '2', '3']))
class LinesTC(TestCase):
def test_known_values_lines(self):
self.assertEqual(lines(NEWLINES_TXT),
['# mixed new lines', '1', '2', '3'])
def test_known_values_lines_comment(self):
self.assertEqual(lines(NEWLINES_TXT, comments='#'),
['1', '2', '3'])
class ExportTC(TestCase):
def setUp(self):
self.tempdir = tempfile.mktemp()
os.mkdir(self.tempdir)
def test(self):
export('data', self.tempdir, verbose=0)
self.assert_(exists(join(self.tempdir, '__init__.py')))
self.assert_(exists(join(self.tempdir, 'sub')))
self.assert_(not exists(join(self.tempdir, '__init__.pyc')))
self.assert_(not exists(join(self.tempdir, 'CVS')))
def tearDown(self):
shutil.rmtree(self.tempdir)
class ProtectedFileTC(TestCase):
def setUp(self):
self.rpath = 'data/write_protected_file.txt'
self.rwpath = 'data/normal_file.txt'
# Make sure rpath is not writable !
os.chmod(self.rpath, 33060)
# Make sure rwpath is writable !
os.chmod(self.rwpath, 33188)
def test_mode_change(self):
"""tests that mode is changed when needed"""
# test on non-writable file
self.assert_(not os.access(self.rpath, os.W_OK))
wp_file = ProtectedFile(self.rpath, 'w')
self.assert_(os.access(self.rpath, os.W_OK))
# test on writable-file
self.assert_(os.access(self.rwpath, os.W_OK))
wp_file = ProtectedFile(self.rwpath, 'w')
self.assert_(os.access(self.rwpath, os.W_OK))
def test_restore_on_close(self):
"""tests original mode is restored on close"""
# test on non-writable file
self.assert_(not os.access(self.rpath, os.W_OK))
ProtectedFile(self.rpath, 'w').close()
self.assert_(not os.access(self.rpath, os.W_OK))
# test on writable-file
self.assert_(os.access(self.rwpath, os.W_OK))
ProtectedFile(self.rwpath, 'w').close()
self.assert_(os.access(self.rwpath, os.W_OK))
def test_mode_change_on_append(self):
"""tests that mode is changed when file is opened in 'a' mode"""
self.assert_(not os.access(self.rpath, os.W_OK))
wp_file = ProtectedFile(self.rpath, 'a')
self.assert_(os.access(self.rpath, os.W_OK))
wp_file.close()
self.assert_(not os.access(self.rpath, os.W_OK))
from logilab.common.testlib import DocTest
class ModuleDocTest(DocTest):
"""relative_path embed tests in docstring"""
from logilab.common import fileutils as module
skipped = ('abspath_listdir',)
del DocTest # necessary if we don't want it to be executed (we don't...)
if __name__ == '__main__':
unittest_main()
|