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
 | |
|     #
 |