Show More
@@ -2694,7 +2694,7 class InteractiveShell(SingletonConfigurable): | |||
|
2694 | 2694 | warn("AST transformer %r threw an error. It will be unregistered." % transformer) |
|
2695 | 2695 | self.ast_transformers.remove(transformer) |
|
2696 | 2696 | |
|
2697 | return node | |
|
2697 | return ast.fix_missing_locations(node) | |
|
2698 | 2698 | |
|
2699 | 2699 | |
|
2700 | 2700 | def run_ast_nodes(self, nodelist, cell_name, interactivity='last_expr'): |
@@ -438,6 +438,31 class TestAstTransform(unittest.TestCase): | |||
|
438 | 438 | with tt.AssertNotPrints('-55'): |
|
439 | 439 | ip.run_cell('print (n)') |
|
440 | 440 | |
|
441 | class IntegerWrapper(ast.NodeTransformer): | |
|
442 | """Wraps all integers in a call to Integer()""" | |
|
443 | def visit_Num(self, node): | |
|
444 | if isinstance(node.n, int): | |
|
445 | return ast.Call(func=ast.Name(id='Integer', ctx=ast.Load()), | |
|
446 | args=[node], keywords=[]) | |
|
447 | ||
|
448 | class TestAstTransform2(unittest.TestCase): | |
|
449 | def setUp(self): | |
|
450 | self.intwrapper = IntegerWrapper() | |
|
451 | ip.ast_transformers.append(self.intwrapper) | |
|
452 | ||
|
453 | self.calls = [] | |
|
454 | def Integer(*args): | |
|
455 | self.calls.append(args) | |
|
456 | ip.push({"Integer": Integer}) | |
|
457 | ||
|
458 | def tearDown(self): | |
|
459 | ip.ast_transformers.remove(self.intwrapper) | |
|
460 | del ip.user_ns['Integer'] | |
|
461 | ||
|
462 | def test_run_cell(self): | |
|
463 | ip.run_cell("n = 2") | |
|
464 | self.assertEqual(self.calls, [(2,)]) | |
|
465 | ||
|
441 | 466 | class ErrorTransformer(ast.NodeTransformer): |
|
442 | 467 | """Throws an error when it sees a number.""" |
|
443 | 468 | def visit_Num(self): |
General Comments 0
You need to be logged in to leave comments.
Login now