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