256 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			256 lines
		
	
	
		
			8.0 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 Module
 | 
						|
    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 Module 
 | 
						|
glob = []
 | 
						|
class MyModule(Module):
 | 
						|
    def __init__(self, *args):
 | 
						|
        glob.append(self.__dict__) 
 | 
						|
        assert isinstance(glob[-1], (dict, type(None)))
 | 
						|
        Module.__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.__package__._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('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('magic', 'greenlet.py'), 
 | 
						|
        base.join('bin'),
 | 
						|
        base.join('execnet', 'script'),
 | 
						|
        base.join('compat', 'testing'),
 | 
						|
    )
 | 
						|
    for p in base.visit('*.py', lambda x: x.check(dotfile=0)): 
 | 
						|
        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) 
 | 
						|
 | 
						|
def test_shahexdigest():
 | 
						|
    hex = py.__package__.shahexdigest()
 | 
						|
    assert len(hex) == 40
 | 
						|
 | 
						|
def test_getzipdata():
 | 
						|
    s = py.__package__.getzipdata()
 | 
						|
 | 
						|
def test_getrev():
 | 
						|
    d = py.__package__.getrev()
 | 
						|
    svnversion = py.path.local.sysfind('svnversion')
 | 
						|
    if svnversion is None:
 | 
						|
        py.test.skip("cannot test svnversion, 'svnversion' binary not found")
 | 
						|
    v = svnversion.sysexec(py.path.local(py.__file__).dirpath())
 | 
						|
    assert v.startswith(str(d))
 | 
						|
 | 
						|
# the following test should abasically work in the future
 | 
						|
def XXXtest_virtual_on_the_fly():
 | 
						|
    py.initpkg('my', {
 | 
						|
        'x.abspath' : 'os.path.abspath',
 | 
						|
        'x.local'   : 'py.path.local',
 | 
						|
        'y'   : 'smtplib',
 | 
						|
        'z.cmdexec'   : 'py.process.cmdexec',
 | 
						|
    })
 | 
						|
    from my.x import abspath
 | 
						|
    from my.x import local
 | 
						|
    import smtplib
 | 
						|
    from my import y
 | 
						|
    assert y is smtplib
 | 
						|
    from my.z import cmdexec
 | 
						|
    from py.process import cmdexec as cmdexec2
 | 
						|
    assert cmdexec is cmdexec2
 | 
						|
 | 
						|
#
 | 
						|
# 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'
 | 
						|
 | 
						|
#class TestStdHook:
 | 
						|
#    """Tests imports for the standard Python library hook."""
 | 
						|
#
 | 
						|
#    def setup_method(self, *args):
 | 
						|
#        """Unload the test modules before each test."""
 | 
						|
#        module_names = ['py.std.StringIO', 'py.std', 'py']
 | 
						|
#        for modname in module_names:
 | 
						|
#            if modname in sys.modules:
 | 
						|
#                del sys.modules[modname]
 | 
						|
#
 | 
						|
#    def test_std_import_simple(self):
 | 
						|
#        import py
 | 
						|
#        StringIO = py.std.StringIO
 | 
						|
#        assert 'py' in sys.modules
 | 
						|
#        assert 'py.std' in sys.modules
 | 
						|
#        assert 'py.std.StringIO' in sys.modules
 | 
						|
#        assert hasattr(py.std.StringIO, 'StringIO')
 | 
						|
#
 | 
						|
#    def test_std_import0(self):
 | 
						|
#        """Testing 'import py.std.StringIO'."""
 | 
						|
#        import py.std.StringIO
 | 
						|
#        assert 'py' in sys.modules
 | 
						|
#        assert 'py.std' in sys.modules
 | 
						|
#        assert 'py.std.StringIO' in sys.modules
 | 
						|
#        assert hasattr(py.std.StringIO, 'StringIO')
 | 
						|
#
 | 
						|
#    def test_std_import1(self):
 | 
						|
#        """Testing 'from py import std'."""
 | 
						|
#        from py import std
 | 
						|
#        assert 'py' in sys.modules
 | 
						|
#        assert 'py.std' in sys.modules
 | 
						|
#
 | 
						|
#    def test_std_from(self):
 | 
						|
#        """Testing 'from py.std import StringIO'."""
 | 
						|
#        from py.std import StringIO
 | 
						|
#        assert getattr(StringIO, 'StringIO')
 | 
						|
#
 | 
						|
#    def test_std_star(self):
 | 
						|
#        "Test from py.std.string import *"
 | 
						|
#        """Testing 'from test.module import *'."""
 | 
						|
#        tmpdir = py.test.ensuretemp('test_initpkg')
 | 
						|
#        tfile = tmpdir.join('stdstartest.py')
 | 
						|
#        tfile.write(py.code.Source("""if True:
 | 
						|
#            from realtest.module import *
 | 
						|
#            globals()['mytest0']
 | 
						|
#            globals()['mytest1']
 | 
						|
#            globals()['MyTest']
 | 
						|
#        """))
 | 
						|
#        import stdstartest  # an exception will be raise if an error occurs
 | 
						|
 | 
						|
##def test_help():
 | 
						|
#    help(std.path)
 | 
						|
#    #assert False
 | 
						|
 | 
						|
def test_url_of_version():
 | 
						|
    py.test.skip("FAILING! - provide a proper URL or upload pylib tgz")
 | 
						|
    from urllib import URLopener
 | 
						|
    URLopener().open(py.__package__.download_url)
 | 
						|
 |