diff -r 000000000000 -r 6474c204b198 js/src/gdb/lib-for-tests/prolog.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/js/src/gdb/lib-for-tests/prolog.py Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,75 @@ +import gdb +import os +import re +import sys +import traceback + +# testlibdir is set on the GDB command line, via --eval-command python testlibdir=... +sys.path[0:0] = [testlibdir] + +# Run the C++ fragment named |fragment|, stopping on entry to |function| +# ('breakpoint', by default) and then select the calling frame. +def run_fragment(fragment, function='breakpoint'): + # Arrange to stop at a reasonable place in the test program. + bp = gdb.Breakpoint(function); + try: + gdb.execute("run %s" % (fragment,)) + # Check that we did indeed stop by hitting the breakpoint we set. + assert bp.hit_count == 1 + finally: + bp.delete() + gdb.execute('frame 1') + +# Assert that |actual| is equal to |expected|; if not, complain in a helpful way. +def assert_eq(actual, expected): + if actual != expected: + raise AssertionError, """Unexpected result: +expected: %r +actual: %r""" % (expected, actual) + +# Assert that |value|'s pretty-printed form is |form|. If |value| is a +# string, then evaluate it with gdb.parse_and_eval to produce a value. +def assert_pretty(value, form): + if isinstance(value, str): + value = gdb.parse_and_eval(value) + assert_eq(str(value), form) + +# Check that the list of registered pretty-printers includes one named +# |printer|, with a subprinter named |subprinter|. +def assert_subprinter_registered(printer, subprinter): + # Match a line containing |printer| followed by a colon, and then a + # series of more-indented lines containing |subprinter|. + + names = { 'printer': re.escape(printer), 'subprinter': re.escape(subprinter) } + pat = r'^( +)%(printer)s *\n(\1 +.*\n)*\1 +%(subprinter)s *\n' % names + output = gdb.execute('info pretty-printer', to_string=True) + if not re.search(pat, output, re.MULTILINE): + raise AssertionError, ("assert_subprinter_registered failed to find pretty-printer:\n" + " %s:%s\n" + "'info pretty-printer' says:\n" + "%s" % (printer, subprinter, output)) + +# Request full stack traces for Python errors. +gdb.execute('set python print-stack full') + +# Tell GDB not to ask the user about the things we tell it to do. +gdb.execute('set confirm off', False) + +# Some print settings that make testing easier. +gdb.execute('set print static-members off') +gdb.execute('set print address off') +gdb.execute('set print pretty off') +gdb.execute('set width 0') + +try: + # testscript is set on the GDB command line, via: + # --eval-command python testscript=... + execfile(testscript) +except AssertionError as err: + sys.stderr.write('\nAssertion traceback:\n') + (t, v, tb) = sys.exc_info() + traceback.print_tb(tb) + sys.stderr.write('\nTest assertion failed:\n') + sys.stderr.write(str(err)) + sys.exit(1) +