[py-svn] r33023 - in py/branch/apigen/py/test/tracer: . testing
fijal at codespeak.net
fijal at codespeak.net
Sun Oct 8 23:19:26 CEST 2006
Author: fijal
Date: Sun Oct 8 23:19:24 2006
New Revision: 33023
Modified:
py/branch/apigen/py/test/tracer/description.py
py/branch/apigen/py/test/tracer/docstorage.py
py/branch/apigen/py/test/tracer/genrest.py
py/branch/apigen/py/test/tracer/testing/test_docgen.py
Log:
Added some return value tests as well as fixed it.
Modified: py/branch/apigen/py/test/tracer/description.py
==============================================================================
--- py/branch/apigen/py/test/tracer/description.py (original)
+++ py/branch/apigen/py/test/tracer/description.py Sun Oct 8 23:19:24 2006
@@ -1,9 +1,5 @@
-from pypy.annotation.model import unionof
-
-# XXX: Global notice - for performance reason we have to make hash
-# out of probably code as a key to search for proper desc. I'm not doing that
-# right now, because I'm not absolutely sure what will be the real key
+from pypy.annotation import model
import types
@@ -49,25 +45,27 @@
# define code somehow
class FunctionDesc(Desc):
+ def __init__(self, *args, **kwargs):
+ super(FunctionDesc, self).__init__(*args, **kwargs)
+ self.inputcells = [model.s_ImpossibleValue for i in xrange(self.\
+ code.co_argcount)]
+ self.call_sites = []
+ self.retval = model.s_ImpossibleValue
+
def consider_call(self, inputcells):
- if not hasattr(self, 'inputcells'):
- self.inputcells = inputcells
- return
for cell_num, cell in enumerate(inputcells):
- self.inputcells[cell_num] = unionof(cell, self.inputcells[cell_num])
+ self.inputcells[cell_num] = model.unionof(cell, self.inputcells[cell_num])
def consider_call_site(self, frame):
- if not hasattr(self, 'call_sites'):
- self.call_sites = []
self.call_sites.append(CallSite(frame.code.raw.co_filename, frame.lineno+1, str(frame.statement)))
+
+ def consider_return(self, arg):
+ self.retval = model.unionof(arg, self.retval)
def getcode(self):
return self.pyobj.func_code
code = property(getcode)
- def was_used(self):
- return hasattr(self, 'inputcells')
-
class ClassDesc(Desc):
def __init__(self, *args, **kwargs):
super(ClassDesc, self).__init__(*args, **kwargs)
@@ -84,6 +82,9 @@
self.fields['__init__'] = md
md.consider_call(inputcells)
+ def consider_return(self, arg):
+ pass # we *know* what return value we do have
+
def consider_call_site(self, frame):
self.fields['__init__'].consider_call_site(frame)
Modified: py/branch/apigen/py/test/tracer/docstorage.py
==============================================================================
--- py/branch/apigen/py/test/tracer/docstorage.py (original)
+++ py/branch/apigen/py/test/tracer/docstorage.py Sun Oct 8 23:19:24 2006
@@ -15,16 +15,13 @@
class DummyAnnotator(object):
policy = AnnotatorPolicy()
-DEBUG_FRAMES = False # flag for debugging gathered frames
-
class DocStorage(object):
""" Class storing info about API
"""
def __init__(self):
self.bookkeeper = Bookkeeper(DummyAnnotator())
#self.call_stack = []
- if DEBUG_FRAMES:
- self.frames = []
+ #self.frames = []
def consider_call(self, frame, caller_frame):
assert isinstance(frame, py.code.Frame)
@@ -32,25 +29,20 @@
if desc:
self.generalize_args(desc, frame)
desc.consider_call_site(caller_frame)
- if DEBUG_FRAMES:
- all_frames = []
- num = 0
- try:
- while 1:
- all_frames.append(sys._getframe(num))
- num += 1
- except ValueError:
- pass
-
- self.frames.append(all_frames)
def generalize_args(self, desc, frame):
args = [arg for key, arg in frame.getargs()]
#self.call_stack.append((desc, args))
desc.consider_call([self.bookkeeper.immutablevalue(arg) for arg in args])
+
+ def generalize_retval(self, desc, arg):
+ desc.consider_return(self.bookkeeper.immutablevalue(arg))
def consider_return(self, frame, arg):
- pass
+ assert isinstance(frame, py.code.Frame)
+ desc = self.find_desc(frame)
+ if desc:
+ self.generalize_retval(desc, arg)
def find_desc(self, frame):
return self.desc_cache.get(frame.code.raw, None)
@@ -104,9 +96,10 @@
def __init__(self, ds):
self.ds = ds
- def get_names(self):
+ def get_function_names(self):
# get iterator over all API exposed names
- return self.ds.descs.iterkeys()
+ return [i for i, desc in self.ds.descs.iteritems() if isinstance(desc,
+ FunctionDesc)]
#def get_function(self, name):
# return self.ds.descs[name].pyobj
Modified: py/branch/apigen/py/test/tracer/genrest.py
==============================================================================
--- py/branch/apigen/py/test/tracer/genrest.py (original)
+++ py/branch/apigen/py/test/tracer/genrest.py Sun Oct 8 23:19:24 2006
@@ -56,11 +56,12 @@
self.list = []
self.add(Title("Module: %s" % self.dsa.get_module_name(), belowchar="="))
self.add(Paragraph(Text(self.dsa.get_module_info())))
- self.add(Title("Exported functions:", belowchar="-"))
self.write_functions()
+ self.write_classes()
def write_functions(self):
- for key in self.dsa.get_names():
+ self.add(Title("Exported functions:", belowchar="-"))
+ for key in self.dsa.get_function_names():
title = Title("%s description:" % key, belowchar="^")
docstr = Paragraph(self.dsa.get_function_doc(key))
args = self.dsa.get_function_args(key)
@@ -74,7 +75,10 @@
link_str = "File %s:%s" % (call_site.filename,
call_site.lineno)
link_target = self.linkgen.getlink(call_site.filename, call_site.lineno)
- call_sites.append(Paragraph(Link(link_str, link_target)))
+ if link_target: # otherwise it's just inline text
+ call_sites.append(Paragraph(Link(link_str, link_target)))
+ else:
+ call_sites.append(Paragraph(link_str))
call_sites.append(BlockQuote(call_site.source))
for item in [title, docstr, arg_quote, call_site_title] + call_sites:
@@ -83,3 +87,7 @@
#for call_site in self.dsa.get_function_callpoints(key):
# self.writeline("File %s:%s\n%s" % call_site.get_tuple())
self.output.write(Rest(*self.list).text())
+
+ def write_classes(self):
+ self.add(Title("Exported classes:", belowchar="-"))
+
Modified: py/branch/apigen/py/test/tracer/testing/test_docgen.py
==============================================================================
--- py/branch/apigen/py/test/tracer/testing/test_docgen.py (original)
+++ py/branch/apigen/py/test/tracer/testing/test_docgen.py Sun Oct 8 23:19:24 2006
@@ -30,6 +30,7 @@
assert isinstance(inputcells[0], model.SomeFloat)
assert isinstance(inputcells[1], model.SomeTuple)
assert isinstance(inputcells[2], model.SomeObject)
+ assert isinstance(desc.retval, model.SomeChar)
cs = desc.call_sites
assert len(cs) == 2
f_name = __file__
@@ -86,3 +87,4 @@
assert isinstance(inputcells[1], model.SomeInteger)
assert isinstance(inputcells[2], model.SomeFloat)
assert isinstance(inputcells[3], model.SomeList)
+ assert isinstance(desc.fields['exposed_method'].retval, model.SomeChar)
More information about the pytest-commit
mailing list