Package logilab :: Package common :: Package test :: Module unittest_modutils
[frames] | no frames]

Source Code for Module logilab.common.test.unittest_modutils

  1  # This program is free software; you can redistribute it and/or modify it under 
  2  # the terms of the GNU General Public License as published by the Free Software 
  3  # Foundation; either version 2 of the License, or (at your option) any later 
  4  # version. 
  5   
  6  # This program is distributed in the hope that it will be useful, but WITHOUT 
  7  # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
  8  # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 
  9   
 10  # You should have received a copy of the GNU General Public License along with 
 11  # this program; if not, write to the Free Software Foundation, Inc., 
 12  # 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. 
 13  """ 
 14  unit tests for module modutils (module manipulation utilities) 
 15  """ 
 16   
 17  import sys 
 18  try: 
 19      __file__ 
 20  except NameError: 
 21      __file__ = sys.argv[0] 
 22   
 23  from logilab.common.testlib import TestCase as TLTestCase, unittest_main 
 24  from logilab.common import modutils 
 25  from logilab.common.compat import set 
 26   
 27  from os import path, getcwd 
 28  from logilab import common 
 29  from logilab.common import tree 
 30   
 31  sys.path.insert(0, path.dirname(__file__)) 
 32  DATADIR = path.join(path.dirname(__file__), 'data') 
 33   
 34   
35 -class TestCase(TLTestCase):
36 - def setUp(self):
37 super(TestCase,self).setUp() 38 self.__common_in_path = common.__path__[0] in sys.path 39 if self.__common_in_path: 40 sys.path.remove(common.__path__[0])
41
42 - def tearDown(self):
43 if self.__common_in_path: 44 sys.path.insert(0, common.__path__[0]) 45 super(TestCase,self).tearDown()
46
47 -class _module_file_tc(TestCase):
48 - def test_find_zipped_module(self):
49 mtype, mfile = _module_file('mypypa', [path.join(DATADIR, 'MyPyPa-0.1.0-py2.5.zip')]) 50 self.assertEquals(mtype, modutils.ZIPFILE) 51 self.assertEquals(mfile, '')
52
53 - def test_find_egg_module(self):
54 mtype, mfile = _module_file('mypypa', [path.join(DATADIR, 'MyPyPa-0.1.0-py2.5.egg')]) 55 self.assertEquals(mtype, modutils.ZIPFILE) 56 self.assertEquals(mfile, '')
57 58 59
60 -class load_module_from_name_tc(TestCase):
61 """ load a python module from it's name """ 62
64 self.assertEqual(modutils.load_module_from_name('sys'), sys)
65
67 self.assertEqual(modutils.load_module_from_name('os.path'), path)
68
70 self.assertRaises(ImportError, 71 modutils.load_module_from_name, 'os.path', use_sys=0)
72 73
74 -class get_module_part_tc(TestCase):
75 """given a dotted name return the module part of the name""" 76
78 self.assertEqual(modutils.get_module_part('logilab.common.modutils'), 79 'logilab.common.modutils')
80
82 self.assertEqual(modutils.get_module_part('logilab.common.modutils.get_module_part'), 83 'logilab.common.modutils')
84
86 self.assertEqual(modutils.get_module_part('db.get_connexion', modutils.__file__), 87 'db')
88
90 self.assertEqual(modutils.get_module_part('math.log10'), 'math') 91 self.assertEqual(modutils.get_module_part('math.log10', __file__), 'math')
92
94 self.assertEqual(modutils.get_module_part('sys.path'), 'sys') 95 self.assertEqual(modutils.get_module_part('sys.path', '__file__'), 'sys')
96 97
98 -class modpath_from_file_tc(TestCase):
99 """ given an absolute file path return the python module's path as a list """ 100
102 self.assertEqual(modutils.modpath_from_file(modutils.__file__), 103 ['logilab', 'common', 'modutils'])
104
106 self.assertEqual(modutils.modpath_from_file('unittest_modutils.py', 107 {getcwd(): 'arbitrary.pkg'}), 108 ['arbitrary', 'pkg', 'unittest_modutils'])
109
111 self.assertRaises(Exception, modutils.modpath_from_file, '/turlututu')
112 113
114 -class file_from_modpath_tc(TestCase):
115 """given a mod path (i.e. splited module / package name), return the 116 corresponding file, giving priority to source file over precompiled file 117 if it exists""" 118
120 self.assertEqual(path.realpath(modutils.file_from_modpath(['logilab', 'common', 'modutils'])), 121 path.realpath(modutils.__file__.replace('.pyc', '.py')))
122
124 from os import path 125 self.assertEqual(path.realpath(modutils.file_from_modpath(['os', 'path']).replace('.pyc', '.py')), 126 path.realpath(path.__file__.replace('.pyc', '.py')))
127
129 try: 130 # don't fail if pyxml isn't installed 131 from xml.dom import ext 132 except ImportError: 133 pass 134 else: 135 self.assertEqual(path.realpath(modutils.file_from_modpath(['xml', 'dom', 'ext']).replace('.pyc', '.py')), 136 path.realpath(ext.__file__.replace('.pyc', '.py')))
137
139 self.assertEqual(modutils.file_from_modpath(['sys']), 140 None)
141
143 self.assertRaises(ImportError, modutils.file_from_modpath, ['turlututu'])
144
145 -class get_source_file_tc(TestCase):
146
147 - def test(self):
148 from os import path 149 self.assertEqual(modutils.get_source_file(path.__file__), 150 path.__file__.replace('.pyc', '.py'))
151
152 - def test_raise(self):
153 self.assertRaises(modutils.NoSourceFile, modutils.get_source_file,'whatever')
154
155 -class is_standard_module_tc(TestCase):
156 """ 157 return true if the module may be considered as a module from the standard 158 library 159 """ 160
162 self.assertEqual(modutils.is_standard_module('__builtin__'), True)
163
165 self.assertEqual(modutils.is_standard_module('sys'), True)
166
168 self.assertEqual(modutils.is_standard_module('logilab'), False)
169
171 self.assertEqual(modutils.is_standard_module('unknown'), False)
172
174 self.assertEqual(modutils.is_standard_module('StringIO'), True)
175
177 self.assertEqual(modutils.is_standard_module('data.module', (DATADIR,)), True) 178 self.assertEqual(modutils.is_standard_module('data.module', (path.abspath(DATADIR),)), True)
179 180
181 -class is_relative_tc(TestCase):
182 183
185 self.assertEqual(modutils.is_relative('modutils', common.__path__[0]), True)
186
188 self.assertEqual(modutils.is_relative('modutils', tree.__file__), True)
189
191 self.assertEqual(modutils.is_relative('logilab.common.modutils', 192 common.__path__[0]), False)
193
194 -class get_modules_tc(TestCase):
195
196 - def test_knownValues_get_modules_1(self): # XXXFIXME: TOWRITE
197 """given a directory return a list of all available python modules, even 198 in subdirectories 199 """ 200 import data.find_test as data 201 mod_path = ("data", 'find_test') 202 modules = modutils.get_modules(path.join(*mod_path), data.__path__[0]) 203 modules.sort() 204 self.assertSetEquals(set(modules), 205 set([ '.'.join(mod_path + (mod, )) for mod in 'module', 'module2', 206 'noendingnewline', 'nonregr']))
207 208
209 -class get_modules_files_tc(TestCase):
210
211 - def test_knownValues_get_module_files_1(self): # XXXFIXME: TOWRITE
212 """given a directory return a list of all available python module's files, even 213 in subdirectories 214 """ 215 import data 216 modules = modutils.get_module_files(path.join(DATADIR,'find_test'), data.__path__[0]) 217 modules.sort() 218 self.assertEqual(modules, 219 [path.join(DATADIR, 'find_test', x) for x in ['__init__.py', 'module.py', 'module2.py', 'noendingnewline.py', 'nonregr.py']])
220
221 - def test_load_module_set_attribute(self):
222 import logilab.common.fileutils 223 import logilab 224 del logilab.common.fileutils 225 del sys.modules['logilab.common.fileutils'] 226 m = modutils.load_module_from_modpath(['logilab','common', 'fileutils']) 227 self.assert_( hasattr(logilab, 'common') ) 228 self.assert_( hasattr(logilab.common, 'fileutils') ) 229 self.assert_( m is logilab.common.fileutils )
230 231 from logilab.common.testlib import DocTest
232 -class ModuleDocTest(DocTest):
233 """test doc test in this module""" 234 from logilab.common import modutils as module
235 del DocTest # necessary if we don't want it to be executed (we don't...) 236 237 238 if __name__ == '__main__': 239 unittest_main() 240