# Copyright (C) 2010-2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # This file is part of the GDB testsuite. It tests Python-based # pretty-printing for the CLI. if [is_remote host] { untested "py-pp-maint.exp can only be run locally" return -1 } load_lib gdb-python.exp set testfile "py-pp-maint" set srcfile ${testfile}.c set binfile ${objdir}/${subdir}/${testfile} # Start with a fresh gdb. gdb_exit gdb_start # Skip all tests if Python scripting is not enabled. if { [skip_python_tests] } { continue } if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "debug"] != "" } { untested "Couldn't compile ${srcfile}" return -1 } gdb_reinitialize_dir $srcdir/$subdir gdb_load ${binfile} if ![runto_main ] then { fail "Can't run to main" return -1 } gdb_test "b [gdb_get_line_number {break to inspect} ${testfile}.c ]" \ ".*Breakpoint.*" gdb_test "continue" ".*Breakpoint.*" set python_file ${srcdir}/${subdir}/${testfile}.py gdb_test_no_output "python execfile ('${python_file}')" "" gdb_test "info pretty-printer" \ {.*function_lookup_test.*pp-test.*struct ss.*} gdb_test "info pretty-printer global .*function" \ {.*function_lookup_test.*} gdb_test "info pretty-printer .* pp-test" \ {.*pp-test.*struct ss.*} gdb_test "print flt" " = x=<42> y=<43>" \ "print flt enabled #1" gdb_test "print ss" " = a= b=<$hex>> b= b=<$hex>>" \ "print ss enabled #1" set num_pp 6 gdb_test "disable pretty-printer" \ "$num_pp printers disabled.*0 of $num_pp printers enabled" gdb_test "enable pretty-printer" \ "$num_pp printers enabled.*$num_pp of $num_pp printers enabled" gdb_test "disable pretty-printer global" \ "$num_pp printers disabled.*0 of $num_pp printers enabled" gdb_test "enable pretty-printer" \ "$num_pp printers enabled.*$num_pp of $num_pp printers enabled" gdb_test "disable pretty-printer global lookup_function_lookup_test" \ "1 printer disabled.*[expr $num_pp - 1] of $num_pp printers enabled" gdb_test "disable pretty-printer global pp-test;.*" \ "[expr $num_pp - 1] printers disabled.*0 of $num_pp printers enabled" gdb_test "info pretty-printer global .*function" \ {.*function_lookup_test \[disabled\].*} gdb_test "info pretty-printer .* pp-test" \ {.*pp-test.*struct ss \[disabled\].*} gdb_test "print flt" " = {x = 42, y = 43}" \ "print flt disabled" gdb_test "print ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \ "print ss disabled" gdb_test "enable pretty-printer global lookup_function_lookup_test" \ "1 printer enabled.*1 of $num_pp printers enabled" # This doesn't enable any printers because each subprinter in the collection # is still individually disabled. But this is still needed, to enable the # collection itself. gdb_test "enable pretty-printer global pp-test" \ "0 printers enabled.*1 of $num_pp printers enabled" gdb_test "enable pretty-printer global pp-test;.*ss.*" \ "2 printers enabled.*[expr $num_pp - 3] of $num_pp printers enabled" gdb_test "enable pretty-printer global pp-test;.*s.*" \ "2 printers enabled.*[expr $num_pp - 1] of $num_pp printers enabled" gdb_test "enable pretty-printer global pp-test;.*" \ "1 printer enabled.*$num_pp of $num_pp printers enabled" gdb_test "info pretty-printer" \ {.*function_lookup_test.*pp-test.*struct ss.*} gdb_test "print flt" " = x=<42> y=<43>" \ "print flt re-enabled" gdb_test "print ss" " = a= b=<$hex>> b= b=<$hex>>" \ "print ss re-enabled" gdb_test "print (enum flag_enum) (FLAG_1)" \ " = 0x1 .FLAG_1." \ "print FLAG_1" gdb_test "print (enum flag_enum) (FLAG_1 | FLAG_3)" \ " = 0x5 .FLAG_1 | FLAG_3." \ "print FLAG_1 | FLAG_3" gdb_test "print (enum flag_enum) (4 + 8)" \ " = 0xc .FLAG_1 | ." \ "print FLAG_1 | 8"