| from test.test_support import verify, verbose, TestFailed, run_unittest |
| import sys |
| import dis |
| import StringIO |
| |
| # Minimal tests for dis module |
| |
| import unittest |
| |
| # placement is crucial!!! move the start of _f and you have to adjust the |
| # line numbers in dis_f |
| def _f(a): |
| print a |
| return 1 |
| |
| dis_f = """\ |
| 13 0 LOAD_FAST 0 (a) |
| 3 PRINT_ITEM |
| 4 PRINT_NEWLINE |
| |
| 14 5 LOAD_CONST 1 (1) |
| 8 RETURN_VALUE |
| 9 LOAD_CONST 0 (None) |
| 12 RETURN_VALUE |
| """ |
| |
| class DisTests(unittest.TestCase): |
| def test_opmap(self): |
| self.assertEqual(dis.opmap["STOP_CODE"], 0) |
| self.assertEqual(dis.opmap["LOAD_CONST"] in dis.hasconst, True) |
| self.assertEqual(dis.opmap["STORE_NAME"] in dis.hasname, True) |
| |
| def test_opname(self): |
| self.assertEqual(dis.opname[dis.opmap["LOAD_FAST"]], "LOAD_FAST") |
| |
| def test_boundaries(self): |
| self.assertEqual(dis.opmap["EXTENDED_ARG"], dis.EXTENDED_ARG) |
| self.assertEqual(dis.opmap["STORE_NAME"], dis.HAVE_ARGUMENT) |
| |
| def test_dis(self): |
| s = StringIO.StringIO() |
| save_stdout = sys.stdout |
| sys.stdout = s |
| dis.dis(_f) |
| sys.stdout = save_stdout |
| got = s.getvalue() |
| # Trim trailing blanks (if any). |
| lines = got.split('\n') |
| lines = [line.rstrip() for line in lines] |
| got = '\n'.join(lines) |
| self.assertEqual(dis_f, got) |
| |
| def test_main(): |
| run_unittest(DisTests) |
| |
| |
| if __name__ == "__main__": |
| test_main() |