beefing up some testing for new functions

This commit is contained in:
Martin A. Brown 2016-02-23 13:10:10 -08:00
parent 2fef28a299
commit 8c69e05f94
2 changed files with 58 additions and 7 deletions

View File

@ -2,6 +2,7 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import os import os
import stat
import uuid import uuid
import unittest import unittest
from tempfile import NamedTemporaryFile as ntf from tempfile import NamedTemporaryFile as ntf
@ -11,6 +12,51 @@ from tldptesttools import TestToolsFilesystem
# -- SUT # -- SUT
from tldp.utils import makefh, which, execute from tldp.utils import makefh, which, execute
from tldp.utils import statfiles, stem_and_ext from tldp.utils import statfiles, stem_and_ext
from tldp.utils import arg_isexecutable, isexecutable
from tldp.utils import arg_isreadablefile, isreadablefile
from tldp.utils import arg_isdirectory
from tldp.utils import arg_isloglevel
class Test_isexecutable_and_friends(unittest.TestCase):
def test_isexecutable(self):
f = ntf(prefix='executable-file')
self.assertFalse(isexecutable(f.name))
mode = stat.S_IXUSR | stat.S_IRUSR | stat.S_IWUSR
os.chmod(f.name, mode)
self.assertTrue(isexecutable(f.name))
def test_arg_isexecutable(self):
f = ntf(prefix='executable-file')
self.assertIsNone(arg_isexecutable(f.name))
mode = stat.S_IXUSR | stat.S_IRUSR | stat.S_IWUSR
os.chmod(f.name, mode)
self.assertEqual(f.name, arg_isexecutable(f.name))
class Test_isreadablefile_and_friends(unittest.TestCase):
def test_isreadablefile(self):
f = ntf(prefix='readable-file')
self.assertTrue(isreadablefile(f.name))
os.chmod(f.name, 0)
self.assertFalse(isreadablefile(f.name))
def test_arg_isreadablefile(self):
f = ntf(prefix='readable-file')
self.assertEquals(f.name, arg_isreadablefile(f.name))
os.chmod(f.name, 0)
self.assertIsNone(arg_isreadablefile(f.name))
class Test_arg_isloglevel(unittest.TestCase):
def test_arg_isloglevel_integer(self):
self.assertEquals(7, arg_isloglevel(7))
self.assertEquals(40, arg_isloglevel('frobnitz'))
self.assertEquals(20, arg_isloglevel('INFO'))
self.assertEquals(10, arg_isloglevel('DEBUG'))
class Test_execute(TestToolsFilesystem): class Test_execute(TestToolsFilesystem):

View File

@ -28,7 +28,7 @@ logger = getLogger()
def firstfoundfile(locations): def firstfoundfile(locations):
'''return the first existing file from a list of filenames (or None)''' '''return the first existing file from a list of filenames (or None)'''
for option in locations: for option in locations:
if os.path.isfile(option): if isreadablefile(option):
return option return option
return None return None
@ -40,19 +40,19 @@ def arg_isloglevel(l):
level = getattr(logging, l.upper(), None) level = getattr(logging, l.upper(), None)
try: try:
logging.getLogger().setLevel(level) logging.getLogger().setLevel(level)
except ValueError: except (TypeError, ValueError):
level = logging.ERROR level = logging.ERROR
return level return level
def arg_isfile(f): def arg_isreadablefile(f):
if os.path.exists(f): if isreadablefile(f):
return f return f
return None return None
def arg_isdirectory(d): def arg_isdirectory(d):
if os.path.exists(d): if os.path.isdir(d):
return d return d
return None return None
@ -152,9 +152,14 @@ def execute(cmd, stdin=None, stdout=None, stderr=None,
return result return result
def isexecutable(fpath): def isexecutable(f):
'''True if argument is executable''' '''True if argument is executable'''
return os.path.isfile(fpath) and os.access(fpath, os.X_OK) return os.path.isfile(f) and os.access(f, os.X_OK)
def isreadablefile(f):
'''True if argument is readable file'''
return os.path.isfile(f) and os.access(f, os.R_OK)
def which(program): def which(program):