81 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
 | 
						|
""" test source browser abilities
 | 
						|
"""
 | 
						|
 | 
						|
from py.__.apigen.source.browser import parse_path, Class, Function, Method
 | 
						|
import py
 | 
						|
 | 
						|
def test_browser():
 | 
						|
    tmp = py.test.ensuretemp("sourcebrowser")
 | 
						|
    tmp.ensure("a.py").write(py.code.Source("""
 | 
						|
    def f():
 | 
						|
        pass
 | 
						|
    
 | 
						|
    def g():
 | 
						|
        pass
 | 
						|
        
 | 
						|
    class X:
 | 
						|
        pass
 | 
						|
        
 | 
						|
    class Z(object):
 | 
						|
        x = 1
 | 
						|
        def zzz(self):
 | 
						|
            1
 | 
						|
            2
 | 
						|
            3
 | 
						|
            4
 | 
						|
    """))
 | 
						|
    mod = parse_path(tmp.join("a.py"))
 | 
						|
    assert isinstance(mod.g, Function)
 | 
						|
    assert isinstance(mod.Z, Class)
 | 
						|
    py.test.raises(AttributeError, "mod.zzz")
 | 
						|
    assert mod.g.firstlineno == 5
 | 
						|
    assert mod.g.name == "g"
 | 
						|
    assert mod.g.endlineno == 6
 | 
						|
    assert mod.X.firstlineno == 8
 | 
						|
    assert mod.X.endlineno == 9
 | 
						|
    assert mod.Z.bases == ["object"]
 | 
						|
    assert isinstance(mod.Z.zzz, Method)
 | 
						|
    assert mod.Z.zzz.firstlineno == 13
 | 
						|
    assert mod.Z.zzz.endlineno == 17
 | 
						|
 | 
						|
def test_if_browser():
 | 
						|
    tmp = py.test.ensuretemp("sourcebrowser")
 | 
						|
    tmp.ensure("b.py").write(py.code.Source("""
 | 
						|
        if 1:
 | 
						|
            def f():
 | 
						|
                pass
 | 
						|
        if 0:
 | 
						|
            def g():
 | 
						|
                pass
 | 
						|
    """))
 | 
						|
    mod = parse_path(tmp.join("b.py"))
 | 
						|
    assert isinstance(mod.f, Function)
 | 
						|
    py.test.raises(AttributeError, 'mod.g')
 | 
						|
 | 
						|
def test_bases():
 | 
						|
    tmp = py.test.ensuretemp("sourcebrowser")
 | 
						|
    tmp.ensure("c.py").write(py.code.Source("""
 | 
						|
    import py
 | 
						|
    class Dir(py.test.collect.Directory):
 | 
						|
        pass
 | 
						|
    """))
 | 
						|
    mod = parse_path(tmp.join("c.py"))
 | 
						|
    # if it does not rise it's ok for now
 | 
						|
    #
 | 
						|
    
 | 
						|
def test_importing_goes_wrong():
 | 
						|
    tmp = py.test.ensuretemp("sourcebrowserimport")
 | 
						|
    tmp.ensure("x.py").write(py.code.Source("""
 | 
						|
        import aslkdjaslkdjasdl
 | 
						|
    """))
 | 
						|
    mod = parse_path(tmp.join("x.py"))
 | 
						|
 | 
						|
    tmp.ensure("y.py").write(py.code.Source("""
 | 
						|
        raise KeyboardInterrupt 
 | 
						|
    """))
 | 
						|
    py.test.raises(KeyboardInterrupt, 'parse_path(tmp.join("y.py"))')
 | 
						|
    
 | 
						|
    # if it does not rise it's ok for now
 | 
						|
    #
 |