Esempio n. 1
0
def test_class():
    descs = {"AClass": AClass}
    ds = DocStorage().from_dict(descs)
    t = Tracer(ds)
    t.start_tracing()
    s = AClass()
    s.exposed_method(1, 2.0, [1, 2, 3])
    t.end_tracing()
    desc = ds.descs["AClass"]
    inputcells = desc.fields["__init__"].inputcells
    assert len(inputcells) == 2
    assert isinstance(inputcells[0], model.SomeInstance)
    # assert inputcells[0].classdef.classdesc.pyobj is SomeClass
    # XXX: should work
    assert isinstance(inputcells[1], model.SomeString)
    f_name = __file__
    if f_name.endswith(".pyc"):
        f_name = f_name[:-1]
    cs = sorted(desc.fields["__init__"].call_sites.keys())
    assert len(cs) == 1
    assert len(cs[0]) == 1
    assert cs[0][0].filename == f_name
    assert cs[0][0].lineno == test_class.func_code.co_firstlineno + 4
    # method check
    assert sorted(desc.getfields()) == ["__init__", "exposed_method"]
    inputcells = desc.fields["exposed_method"].inputcells
    assert len(inputcells) == 4
    assert isinstance(inputcells[0], model.SomeInstance)
    # assert inputcells[0].classdef.classdesc.pyobj is SomeClass
    # XXX should work
    assert isinstance(inputcells[1], model.SomeInt)
    assert isinstance(inputcells[2], model.SomeFloat)
    assert isinstance(inputcells[3], model.SomeList)
    assert isinstance(desc.fields["exposed_method"].retval, model.SomeString)
    if 0:
        pds = PermaDocStorage(DocStorageAccessor(ds))
        assert pds.get_class_names() == ["AClass"]
        assert len(pds.get_function_signature("AClass.exposed_method")[0]) == 4