def test_import_and_rename(self): code = "from enthought.block_canvas.debug.my_operator import add as add1\n" \ "a = add1(1,2)\n" \ "b = add1(a,3)" foo_block = Block(code) info = find_functions(foo_block.ast) foo_call = FunctionCall.from_ast(foo_block.sub_blocks[1].ast, info) desired = 'result = add(1, 2)' self.assertEqual(foo_call.call_signature, desired)
def test_local_function_preprocessing(self): code = "def foo(a,b):\n" \ "\tx,y=a,b\n" \ "\treturn x,y\n" \ "i,j = foo(1,2)\n" foo_block = Block(code) info = find_functions(foo_block.ast) assert 'foo' in info assert info['foo']
def from_ast(cls, ast): """ Create an ExecutionModel object from the ast. """ # Build dictionaries for import information and local defs info = find_functions(ast) statement_info = walk(ast, StatementWalker()) statements = parse_stmts_info(statement_info,info) return cls(statements=statements)
def test_local_def(self): code = "def foo(a):\n" \ " b = a\n" \ " return b\n" \ "y = foo(2)\n" foo_block = Block(code) info = find_functions(foo_block.ast) foo_call = FunctionCall.from_ast(foo_block.sub_blocks[-1].ast, info) desired = 'b = foo(2)' self.assertEqual(foo_call.call_signature, desired)
def test_import(self): code = "from enthought.block_canvas.debug.my_operator import add, mul\n" \ "c = add(a,b)\n" \ "d = mul(c, 2)\n" \ "e = mul(c, 3)\n" \ "f = add(d,e)" foo_block = Block(code) info = find_functions(foo_block.ast) foo_call = FunctionCall.from_ast(foo_block.sub_blocks[1].ast, info) desired = 'result = add(a, b)' self.assertEqual(foo_call.call_signature, desired)
def test_add_function(self): code = "def foo(a, b):\n" " x, y = a, b\n" " return x, y\n" "c, d = foo(1, 2)" block = Block(code) info = find_functions(block.ast) func = FunctionCall.from_ast(block.sub_blocks[-1].ast, info) model = ExecutionModel() model.add_function(func) assert len(model.sorted_statements) == 1 desired = "\ndef foo(a, b): \n x, y = (a, b)\n return x, y\n\nx_, y_ = foo(1, 2)" self.assertEqual(desired, model.code)
def test_import_rename_preprocessing(self): code = "from enthought.block_canvas.debug.my_operator import add as add1\n" \ "a = add1(1,2)\n" \ "b = add1(a,3)" foo_block = Block(code) info = find_functions(foo_block.ast) assert 'add1' in info assert not( 'add' in info ) assert info['add1'] desired = 'enthought.block_canvas.debug.my_operator' add1_func = info['add1'] self.assertEqual(add1_func.module, desired)
def test_remove_function(self): code = "def foo(a, b):\n" " x, y = a, b\n" " return x, y\n" "c, d = foo(1, 2)\n" "e, f = foo(3, 4)" block = Block(code) info = find_functions(block.ast) foo1_func = FunctionCall.from_ast(block.sub_blocks[-1].ast, info) foo2_func = FunctionCall.from_ast(block.sub_blocks[-2].ast, info) assert foo1_func != foo2_func model = ExecutionModel() model.add_function(foo1_func) model.add_function(foo2_func) model.remove_function(foo2_func) assert not (foo2_func in model.statements) assert foo1_func in model.statements
def test_import_preprocessing(self): code = "from enthought.block_canvas.debug.my_operator import add, mul\n" \ "c = add(a,b)\n" \ "d = mul(c, 2)\n" \ "e = mul(c, 3)\n" \ "f = add(d,e)" foo_block = Block(code) info = find_functions(foo_block.ast) desired = 'enthought.block_canvas.debug.my_operator' assert 'add' in info assert info['add'] add_func = info['add'] self.assertEqual(add_func.module, desired) assert 'mul' in info assert info['mul'] mul_func = info['mul'] self.assertEqual(mul_func.module, desired)