Show More
@@ -637,7 +637,8 class TransformerManager: | |||
|
637 | 637 | |
|
638 | 638 | try: |
|
639 | 639 | for transform in self.cleanup_transforms: |
|
640 | lines = transform(lines) | |
|
640 | if not getattr(transform, 'has_side_effects', False): | |
|
641 | lines = transform(lines) | |
|
641 | 642 | except SyntaxError: |
|
642 | 643 | return 'invalid', None |
|
643 | 644 | |
@@ -650,7 +651,8 class TransformerManager: | |||
|
650 | 651 | |
|
651 | 652 | try: |
|
652 | 653 | for transform in self.line_transforms: |
|
653 | lines = transform(lines) | |
|
654 | if not getattr(transform, 'has_side_effects', False): | |
|
655 | lines = transform(lines) | |
|
654 | 656 | lines = self.do_token_transforms(lines) |
|
655 | 657 | except SyntaxError: |
|
656 | 658 | return 'invalid', None |
@@ -289,4 +289,38 def test_check_complete_II(): | |||
|
289 | 289 | def test_null_cleanup_transformer(): |
|
290 | 290 | manager = ipt2.TransformerManager() |
|
291 | 291 | manager.cleanup_transforms.insert(0, null_cleanup_transformer) |
|
292 |
|
|
|
292 | assert manager.transform_cell("") == "" | |
|
293 | ||
|
294 | ||
|
295 | ||
|
296 | ||
|
297 | def test_side_effects_I(): | |
|
298 | count = 0 | |
|
299 | def counter(lines): | |
|
300 | nonlocal count | |
|
301 | count += 1 | |
|
302 | return lines | |
|
303 | ||
|
304 | counter.has_side_effects = True | |
|
305 | ||
|
306 | manager = ipt2.TransformerManager() | |
|
307 | manager.cleanup_transforms.insert(0, counter) | |
|
308 | assert manager.check_complete("a=1\n") == ('complete', None) | |
|
309 | assert count == 0 | |
|
310 | ||
|
311 | ||
|
312 | ||
|
313 | ||
|
314 | def test_side_effects_II(): | |
|
315 | count = 0 | |
|
316 | def counter(lines): | |
|
317 | nonlocal count | |
|
318 | count += 1 | |
|
319 | return lines | |
|
320 | ||
|
321 | counter.has_side_effects = True | |
|
322 | ||
|
323 | manager = ipt2.TransformerManager() | |
|
324 | manager.line_transforms.insert(0, counter) | |
|
325 | assert manager.check_complete("b=1\n") == ('complete', None) | |
|
326 | assert count == 0 |
@@ -689,6 +689,30 class TestAstTransform(unittest.TestCase): | |||
|
689 | 689 | with tt.AssertPrints("8"): |
|
690 | 690 | ip.run_cell("amacro") |
|
691 | 691 | |
|
692 | class TestMiscTransform(unittest.TestCase): | |
|
693 | ||
|
694 | ||
|
695 | def test_transform_only_once(self): | |
|
696 | cleanup = 0 | |
|
697 | line_t = 0 | |
|
698 | def count_cleanup(lines): | |
|
699 | nonlocal cleanup | |
|
700 | cleanup += 1 | |
|
701 | return lines | |
|
702 | ||
|
703 | def count_line_t(lines): | |
|
704 | nonlocal line_t | |
|
705 | line_t += 1 | |
|
706 | return lines | |
|
707 | ||
|
708 | ip.input_transformer_manager.cleanup_transforms.append(count_cleanup) | |
|
709 | ip.input_transformer_manager.line_transforms.append(count_line_t) | |
|
710 | ||
|
711 | ip.run_cell('1') | |
|
712 | ||
|
713 | assert cleanup == 1 | |
|
714 | assert line_t == 1 | |
|
715 | ||
|
692 | 716 | class IntegerWrapper(ast.NodeTransformer): |
|
693 | 717 | """Wraps all integers in a call to Integer()""" |
|
694 | 718 |
General Comments 0
You need to be logged in to leave comments.
Login now