1# Copyright (C) 2010-2016 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16# This file is part of the GDB testsuite. It tests Python-based 17# pretty-printing for the CLI. 18 19if [is_remote host] { 20 untested "py-pp-maint.exp can only be run locally" 21 return -1 22} 23 24load_lib gdb-python.exp 25 26standard_testfile 27 28if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} { 29 return -1 30} 31 32# Skip all tests if Python scripting is not enabled. 33if { [skip_python_tests] } { continue } 34 35if ![runto_main ] then { 36 fail "Can't run to main" 37 return -1 38} 39 40gdb_test "b [gdb_get_line_number {break to inspect} ${testfile}.c ]" \ 41 ".*Breakpoint.*" 42gdb_test "continue" ".*Breakpoint.*" 43 44set python_file ${srcdir}/${subdir}/${testfile}.py 45 46gdb_test_no_output "python exec (open ('${python_file}').read ())" "" 47 48gdb_test "info pretty-printer" \ 49 {.*function_lookup_test.*pp-test.*struct ss.*} 50 51gdb_test "info pretty-printer global .*function" \ 52 {.*function_lookup_test.*} 53 54gdb_test "info pretty-printer .* pp-test" \ 55 {.*pp-test.*struct ss.*} 56 57gdb_test "print flt" " = x=<42> y=<43>" \ 58 "print flt enabled #1" 59 60gdb_test "print ss" " = a=<a=<1> b=<$hex>> b=<a=<2> b=<$hex>>" \ 61 "print ss enabled #1" 62 63set num_pp 7 64 65gdb_test "disable pretty-printer" \ 66 "$num_pp printers disabled.*0 of $num_pp printers enabled" 67 68gdb_test "enable pretty-printer" \ 69 "$num_pp printers enabled.*$num_pp of $num_pp printers enabled" 70 71gdb_test "disable pretty-printer global" \ 72 "$num_pp printers disabled.*0 of $num_pp printers enabled" 73 74gdb_test "enable pretty-printer" \ 75 "$num_pp printers enabled.*$num_pp of $num_pp printers enabled" 76 77gdb_test "disable pretty-printer global lookup_function_lookup_test" \ 78 "1 printer disabled.*[expr $num_pp - 1] of $num_pp printers enabled" 79 80gdb_test "disable pretty-printer global pp-test;.*" \ 81 "[expr $num_pp - 2] printers disabled.*1 of $num_pp printers enabled" 82 83gdb_test "info pretty-printer global .*function" \ 84 {.*function_lookup_test \[disabled\].*} 85 86gdb_test "info pretty-printer .* pp-test" \ 87 {.*pp-test.*struct ss \[disabled\].*} 88 89gdb_test "print flt" " = {x = 42, y = 43}" \ 90 "print flt disabled" 91 92gdb_test "print ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \ 93 "print ss disabled" 94 95gdb_test "enable pretty-printer global lookup_function_lookup_test" \ 96 "1 printer enabled.*2 of $num_pp printers enabled" 97 98# This doesn't enable any printers because each subprinter in the collection 99# is still individually disabled. But this is still needed, to enable the 100# collection itself. 101gdb_test "enable pretty-printer global pp-test" \ 102 "0 printers enabled.*2 of $num_pp printers enabled" 103 104gdb_test "enable pretty-printer global pp-test;.*ss.*" \ 105 "2 printers enabled.*[expr $num_pp - 3] of $num_pp printers enabled" 106 107gdb_test "enable pretty-printer global pp-test;.*s.*" \ 108 "2 printers enabled.*[expr $num_pp - 1] of $num_pp printers enabled" 109 110gdb_test "enable pretty-printer global pp-test;.*" \ 111 "1 printer enabled.*$num_pp of $num_pp printers enabled" 112 113gdb_test "info pretty-printer" \ 114 {.*function_lookup_test.*pp-test.*struct ss.*} 115 116gdb_test "print flt" " = x=<42> y=<43>" \ 117 "print flt re-enabled" 118 119gdb_test "print ss" " = a=<a=<1> b=<$hex>> b=<a=<2> b=<$hex>>" \ 120 "print ss re-enabled" 121 122gdb_test_exact "print (enum flag_enum) (FOO_1)" \ 123 { = 0x1 [FOO_1]} 124 125gdb_test_exact "print (enum flag_enum) (BAR_3)" \ 126 { = 0x40 [BAR_3]} 127 128gdb_test_exact "print (enum flag_enum) (BAR_2 | FOO_2)" \ 129 { = 0x22 [FOO_2 | BAR_2]} 130 131gdb_test_exact "print (enum flag_enum) (FOO_1 | FOO_2 | FOO_3)" \ 132 { = 0x7 [FOO_1 | FOO_2 | FOO_3]} 133 134gdb_test_exact "print (enum flag_enum) (FOO_MASK)" \ 135 { = 0x7 [FOO_1 | FOO_2 | FOO_3]} 136 137gdb_test_exact "print (enum flag_enum) (FOO_MASK | (BAR_MASK & ~BAR_2))" \ 138 { = 0x57 [FOO_1 | FOO_2 | FOO_3 | BAR_1 | BAR_3]} 139 140gdb_test_exact "print (enum flag_enum) (0x4 + 0x8)" \ 141 { = 0xc [FOO_3 | <unknown: 0x8>]} 142