blob: ab93d4a0ec37ae8c6150041a31cf30fd3fdf51e6 [file] [log] [blame]
Skip Montanaroadd0ccc2003-02-27 21:27:07 +00001from test.test_support import verify, verbose, TestFailed, run_unittest
2import sys
3import dis
4import StringIO
5
6# Minimal tests for dis module
7
8import unittest
9
10# placement is crucial!!! move the start of _f and you have to adjust the
11# line numbers in dis_f
12def _f(a):
Tim Peterseabafeb2003-03-07 15:55:36 +000013 print a
14 return 1
Skip Montanaroadd0ccc2003-02-27 21:27:07 +000015
16dis_f = """\
17 13 0 LOAD_FAST 0 (a)
Tim Peterseabafeb2003-03-07 15:55:36 +000018 3 PRINT_ITEM
19 4 PRINT_NEWLINE
Skip Montanaroadd0ccc2003-02-27 21:27:07 +000020
21 14 5 LOAD_CONST 1 (1)
Tim Peterseabafeb2003-03-07 15:55:36 +000022 8 RETURN_VALUE
Skip Montanaroadd0ccc2003-02-27 21:27:07 +000023 9 LOAD_CONST 0 (None)
Tim Peterseabafeb2003-03-07 15:55:36 +000024 12 RETURN_VALUE
Skip Montanaroadd0ccc2003-02-27 21:27:07 +000025"""
26
27class DisTests(unittest.TestCase):
28 def test_opmap(self):
29 self.assertEqual(dis.opmap["STOP_CODE"], 0)
30 self.assertEqual(dis.opmap["LOAD_CONST"] in dis.hasconst, True)
31 self.assertEqual(dis.opmap["STORE_NAME"] in dis.hasname, True)
32
33 def test_opname(self):
34 self.assertEqual(dis.opname[dis.opmap["LOAD_FAST"]], "LOAD_FAST")
35
36 def test_boundaries(self):
37 self.assertEqual(dis.opmap["EXTENDED_ARG"], dis.EXTENDED_ARG)
38 self.assertEqual(dis.opmap["STORE_NAME"], dis.HAVE_ARGUMENT)
39
40 def test_dis(self):
41 s = StringIO.StringIO()
42 save_stdout = sys.stdout
43 sys.stdout = s
44 dis.dis(_f)
45 sys.stdout = save_stdout
Tim Peterseabafeb2003-03-07 15:55:36 +000046 got = s.getvalue()
47 # Trim trailing blanks (if any).
48 lines = got.split('\n')
49 lines = [line.rstrip() for line in lines]
50 got = '\n'.join(lines)
51 self.assertEqual(dis_f, got)
Skip Montanaroadd0ccc2003-02-27 21:27:07 +000052
53def test_main():
54 run_unittest(DisTests)
55
56
57if __name__ == "__main__":
58 test_main()