|
| 1 | +from codeanalyzer.schema.l2_callees import backfill_callees |
| 2 | +from codeanalyzer.schema.py_schema import ( |
| 3 | + PyApplication, PyModule, PyCallable, PyCallsite, BodyNode, |
| 4 | +) |
| 5 | + |
| 6 | +def _app_with_one_call(callee_sig): |
| 7 | + cs = PyCallsite(method_name="g", start_line=2, start_column=4, end_line=2, |
| 8 | + end_column=7, callee_signature=callee_sig) |
| 9 | + fn = PyCallable(name="f", path="m.py", signature="m.f", call_sites=[cs], |
| 10 | + body={"2:4": BodyNode(kind="call", callee=None)}) |
| 11 | + mod = PyModule(file_path="m.py", module_name="m", functions={"f": fn}) |
| 12 | + return PyApplication(symbol_table={"m.py": mod}), fn |
| 13 | + |
| 14 | +def test_declared_callee_resolves_to_can_id(): |
| 15 | + app, fn = _app_with_one_call("m.g") |
| 16 | + backfill_callees(app, {"m.g": "can://python/app/m.py/g()"}) |
| 17 | + assert fn.body["2:4"].callee == "can://python/app/m.py/g()" |
| 18 | + |
| 19 | +def test_external_callee_keeps_dotted_signature(): |
| 20 | + app, fn = _app_with_one_call("requests.get") |
| 21 | + backfill_callees(app, {"m.g": "can://python/app/m.py/g()"}) # requests.get not declared |
| 22 | + assert fn.body["2:4"].callee == "requests.get" |
| 23 | + |
| 24 | +def test_unresolved_callsite_leaves_callee_absent(): |
| 25 | + app, fn = _app_with_one_call(None) |
| 26 | + backfill_callees(app, {}) |
| 27 | + assert fn.body["2:4"].callee is None |
0 commit comments