177 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Python
		
	
	
	
| from __future__ import generators 
 | |
| 
 | |
| import py
 | |
| import types
 | |
| import sys
 | |
| 
 | |
| def checksubpackage(name):
 | |
|     obj = getattr(py, name)
 | |
|     if hasattr(obj, '__map__'): # isinstance(obj, Module):
 | |
|         keys = dir(obj)
 | |
|         assert len(keys) > 0
 | |
|         assert getattr(obj, '__map__')  == {}
 | |
| 
 | |
| def test_dir():
 | |
|     from py.__.initpkg import ApiModule
 | |
|     for name in dir(py):
 | |
|         if name == 'magic': # greenlets don't work everywhere, we don't care here
 | |
|             continue
 | |
|         if not name.startswith('_'):
 | |
|             yield checksubpackage, name
 | |
| 
 | |
| from py.initpkg import ApiModule 
 | |
| glob = []
 | |
| class MyModule(ApiModule):
 | |
|     def __init__(self, *args):
 | |
|         glob.append(self.__dict__) 
 | |
|         assert isinstance(glob[-1], (dict, type(None)))
 | |
|         ApiModule.__init__(self, *args)
 | |
| 
 | |
| def test_early__dict__access():
 | |
|     mymod = MyModule("whatever", "myname")
 | |
|     assert isinstance(mymod.__dict__, dict) 
 | |
|     
 | |
| def test_resolve_attrerror(): 
 | |
|     extpyish = "./initpkg.py", "hello"
 | |
|     excinfo = py.test.raises(AttributeError, "py.__pkg__._resolve(extpyish)")
 | |
|     s = str(excinfo.value)
 | |
|     assert s.find(extpyish[0]) != -1
 | |
|     assert s.find(extpyish[1]) != -1
 | |
| 
 | |
| def test_virtual_module_identity():
 | |
|     from py import path as path1
 | |
|     from py import path as path2
 | |
|     assert path1 is path2
 | |
|     from py.path import local as local1
 | |
|     from py.path import local as local2
 | |
|     assert local1 is local2
 | |
| 
 | |
| def test_importall():
 | |
|     base = py.path.local(py.__file__).dirpath()
 | |
|     nodirs = (
 | |
|         base.join('test', 'testing', 'data'),
 | |
|         base.join('apigen', 'tracer', 'testing', 'package'),
 | |
|         base.join('test', 'testing', 'test'),
 | |
|         base.join('test', 'rsession', 'webjs.py'),
 | |
|         base.join('apigen', 'source', 'server.py'),
 | |
|         base.join('magic', 'greenlet.py'), 
 | |
|         base.join('path', 'gateway',),
 | |
|         base.join('doc',),
 | |
|         base.join('rest', 'directive.py'),
 | |
|         base.join('test', 'testing', 'import_test'),
 | |
|         base.join('c-extension',), 
 | |
|         base.join('test', 'report', 'web.py'),
 | |
|         base.join('test', 'report', 'webjs.py'),
 | |
|         base.join('test', 'report', 'rest.py'),
 | |
|         base.join('magic', 'greenlet.py'), 
 | |
|         base.join('bin'),
 | |
|         base.join('execnet', 'script'),
 | |
|         base.join('compat', 'testing'),
 | |
|     )
 | |
|     def recurse(p):
 | |
|         return p.check(dotfile=0) and p.basename != "attic"
 | |
| 
 | |
|     for p in base.visit('*.py', recurse):
 | |
|         if p.basename == '__init__.py':
 | |
|             continue
 | |
|         relpath = p.new(ext='').relto(base)
 | |
|         if base.sep in relpath: # not py/*.py itself
 | |
|             for x in nodirs:
 | |
|                 if p == x or p.relto(x):
 | |
|                     break
 | |
|             else:
 | |
|                 relpath = relpath.replace(base.sep, '.')
 | |
|                 modpath = 'py.__.%s' % relpath
 | |
|                 yield check_import, modpath 
 | |
| 
 | |
| def check_import(modpath): 
 | |
|     print "checking import", modpath
 | |
|     assert __import__(modpath) 
 | |
| 
 | |
| #
 | |
| # test support for importing modules
 | |
| #
 | |
| 
 | |
| class TestRealModule:
 | |
| 
 | |
|     def setup_class(cls):
 | |
|         cls.tmpdir = py.test.ensuretemp('test_initpkg')
 | |
|         sys.path = [str(cls.tmpdir)] + sys.path
 | |
|         pkgdir = cls.tmpdir.ensure('realtest', dir=1)
 | |
| 
 | |
|         tfile = pkgdir.join('__init__.py')
 | |
|         tfile.write(py.code.Source("""
 | |
|             import py
 | |
|             py.initpkg('realtest', {
 | |
|                 'x.module.__doc__': ('./testmodule.py', '__doc__'),
 | |
|                 'x.module': ('./testmodule.py', '*'), 
 | |
|             })
 | |
|         """))
 | |
| 
 | |
|         tfile = pkgdir.join('testmodule.py')
 | |
|         tfile.write(py.code.Source("""
 | |
|             'test module'
 | |
| 
 | |
|             __all__ = ['mytest0', 'mytest1', 'MyTest']
 | |
|         
 | |
|             def mytest0():
 | |
|                 pass
 | |
|             def mytest1():
 | |
|                 pass
 | |
|             class MyTest:
 | |
|                 pass
 | |
| 
 | |
|         """))
 | |
| 
 | |
|         import realtest # need to mimic what a user would do
 | |
|         #py.initpkg('realtest', {
 | |
|         #    'module': ('./testmodule.py', None)
 | |
|         #})
 | |
| 
 | |
|     def setup_method(self, *args):
 | |
|         """Unload the test modules before each test."""
 | |
|         module_names = ['realtest', 'realtest.x', 'realtest.x.module']
 | |
|         for modname in module_names:
 | |
|             if modname in sys.modules:
 | |
|                 del sys.modules[modname]
 | |
| 
 | |
|     def test_realmodule(self):
 | |
|         """Testing 'import realtest.x.module'"""
 | |
|         import realtest.x.module
 | |
|         assert 'realtest.x.module' in sys.modules
 | |
|         assert getattr(realtest.x.module, 'mytest0')
 | |
| 
 | |
|     def test_realmodule_from(self):
 | |
|         """Testing 'from test import module'."""
 | |
|         from realtest.x import module
 | |
|         assert getattr(module, 'mytest1')
 | |
| 
 | |
|     def test_realmodule_star(self):
 | |
|         """Testing 'from test.module import *'."""
 | |
|         tfile = self.tmpdir.join('startest.py')
 | |
|         tfile.write(py.code.Source("""
 | |
|             from realtest.x.module import *
 | |
|             globals()['mytest0']
 | |
|             globals()['mytest1']
 | |
|             globals()['MyTest']
 | |
|         """))
 | |
|         import startest # an exception will be raise if an error occurs
 | |
| 
 | |
|     def test_realmodule_dict_import(self):
 | |
|         "Test verifying that accessing the __dict__ invokes the import"
 | |
|         import realtest.x.module
 | |
|         moddict = realtest.x.module.__dict__ 
 | |
|         assert 'mytest0' in moddict
 | |
|         assert 'mytest1' in moddict
 | |
|         assert 'MyTest' in moddict
 | |
| 
 | |
|     def test_realmodule___doc__(self):
 | |
|         """test whether the __doc__ attribute is set properly from initpkg"""
 | |
|         import realtest.x.module
 | |
|         assert realtest.x.module.__doc__ == 'test module'
 | |
| 
 | |
| def test_autoimport():
 | |
|     from py.initpkg import autoimport
 | |
|     py.std.os.environ['AUTOTEST_AUTOIMPORT'] = "nonexistmodule"
 | |
|     py.test.raises(ImportError, "autoimport('autotest')")
 |