diff -r 336137a359ae Lib/test/disutil.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/test/disutil.py Fri Mar 11 16:37:49 2011 -0500 @@ -0,0 +1,17 @@ +import dis +import sys +from io import StringIO + +def disassemble(func): + f = StringIO() + tmp = sys.stdout + sys.stdout = f + dis.dis(func) + sys.stdout = tmp + result = f.getvalue() + f.close() + return result + +def dis_single(line): + return disassemble(compile(line, '', 'single')) + diff -r 336137a359ae Lib/test/test_compile.py --- a/Lib/test/test_compile.py Fri Mar 11 10:27:14 2011 -0500 +++ b/Lib/test/test_compile.py Fri Mar 11 16:37:49 2011 -0500 @@ -2,6 +2,7 @@ import sys import _ast from test import support +from test.disutil import disassemble class TestSpecifics(unittest.TestCase): @@ -433,6 +434,16 @@ ast.body = [_ast.BoolOp()] self.assertRaises(TypeError, compile, ast, '', 'exec') + def test_if_no_else(self): + def f1(x): + if x: + x = 1 + return x + + asm = disassemble(f1) + for elem in ('JUMP_FORWARD', 'JUMP_ABSOLUTE'): + self.assertNotIn(elem, asm) + def test_main(): support.run_unittest(TestSpecifics) diff -r 336137a359ae Lib/test/test_dis.py --- a/Lib/test/test_dis.py Fri Mar 11 10:27:14 2011 -0500 +++ b/Lib/test/test_dis.py Fri Mar 11 16:37:49 2011 -0500 @@ -4,7 +4,7 @@ import unittest import sys import dis -import io +from test.disutil import disassemble def _f(a): @@ -139,12 +139,7 @@ class DisTests(unittest.TestCase): def do_disassembly_test(self, func, expected): - s = io.StringIO() - save_stdout = sys.stdout - sys.stdout = s - dis.dis(func) - sys.stdout = save_stdout - got = s.getvalue() + got = disassemble(func) # Trim trailing blanks (if any). lines = got.split('\n') lines = [line.rstrip() for line in lines] diff -r 336137a359ae Lib/test/test_peepholer.py --- a/Lib/test/test_peepholer.py Fri Mar 11 10:27:14 2011 -0500 +++ b/Lib/test/test_peepholer.py Fri Mar 11 16:37:49 2011 -0500 @@ -1,22 +1,8 @@ -import dis +from test.disutil import disassemble, dis_single import re import sys -from io import StringIO import unittest -def disassemble(func): - f = StringIO() - tmp = sys.stdout - sys.stdout = f - dis.dis(func) - sys.stdout = tmp - result = f.getvalue() - f.close() - return result - -def dis_single(line): - return disassemble(compile(line, '', 'single')) - class TestTranforms(unittest.TestCase): def test_unot(self):