# Copyright (C) 2010-2021 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 standard_testfile if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} { return -1 } # Skip all tests if Python scripting is not enabled. if { [skip_python_tests] } { continue } 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 [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py] gdb_test_no_output "source ${python_file}" "load 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 7 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 - 2] printers disabled.*1 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.*2 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.*2 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_exact "print (enum flag_enum) (FOO_1)" \ { = 0x1 [FOO_1]} gdb_test_exact "print (enum flag_enum) (BAR_3)" \ { = 0x40 [BAR_3]} gdb_test_exact "print (enum flag_enum) (BAR_2 | FOO_2)" \ { = 0x22 [FOO_2 | BAR_2]} gdb_test_exact "print (enum flag_enum) (FOO_1 | FOO_2 | FOO_3)" \ { = 0x7 [FOO_1 | FOO_2 | FOO_3]} gdb_test_exact "print (enum flag_enum) (FOO_MASK)" \ { = 0x7 [FOO_1 | FOO_2 | FOO_3]} gdb_test_exact "print (enum flag_enum) (FOO_MASK | (BAR_MASK & ~BAR_2))" \ { = 0x57 [FOO_1 | FOO_2 | FOO_3 | BAR_1 | BAR_3]} gdb_test_exact "print (enum flag_enum) (0x4 + 0x8)" \ { = 0xc [FOO_3 | ]}