def add_comparison(self, modulename, label, node): base_call = ast.copy_location(self.get_recorder_call(), node) base_call.args = \ [node, ast.Str(s=modulename, lineno=node.lineno, col_offset=node.col_offset), ast.Str(s=label, lineno=node.lineno, col_offset=node.col_offset)] ast.fix_missing_locations(base_call) return base_call
def add_BoolOp(self, modulename, label, node, pragmas, parent): # Now wrap the individual values in recorder calls base_call = self.get_recorder_call() base_call.args = \ [ast.Str(s=modulename, lineno=node.lineno, col_offset=node.col_offset), ast.Str(s=label, lineno=node.lineno, col_offset=node.col_offset)] for i, value in enumerate(node.values): recorder_call = deepcopy(base_call) recorder_call.args.insert(0, node.values[i]) recorder_call.args.append( ast.copy_location(ast.Num(n=i), node.values[i])) node.values[i] = ast.copy_location(recorder_call, node.values[i]) ast.fix_missing_locations(node) return node
def test_construct_with_literal(self): recorder = ExecutionRecorder.get() node = ast.BoolOp(op=ast.Or(), values=[ast.Name(id="foo"), ast.Str(s='""')], lineno=1, col_offset=0) recorder.add_BoolOp('somemodule', '1.1', node, [], None)
def test_add_a_non_BoolOp(self): recorder = ExecutionRecorder.get() node = ast.BoolOp(op=4, values=[ast.Name(id="foo"), ast.Str(s='""')], lineno=1, col_offset=0) try: recorder.add_BoolOp('somemodule', node, [], None) except TypeError as exc: assert "BoolOp" in str(exc), exc
def test_serialize_Comparison(self): from instrumental.constructs import Comparison node = ast.Compare(left=ast.Name(id="a"), ops=[ast.NotEq()], comparators=[ast.Str(s="foobar")], lineno=4) construct = Comparison('somemodule', '4.2', node, []) serializer = self._makeOne() actual = serializer.dump(construct) expected = "Comparison|somemodule|4.2|Compare'4'Name{a};NotEq;Str{Zm9vYmFy}||False:;True:" assert actual == expected, (actual, expected)
def get_statement_recorder_call(modulename, lineno): kall = ast.Call() kall.func = ast.Attribute(value=ast.Name(id="_xxx_recorder_xxx_", ctx=ast.Load()), attr="record_statement", ctx=ast.Load()) kall.args = [ ast.Str(s=modulename), ast.Num(n=lineno), ] kall.keywords = [] kall_stmt = ast.Expr(value=kall) return kall_stmt