5971a40387ed8e49634445bda14fea5fef9b0a8e
[external/binutils.git] / gdb / testsuite / gdb.python / py-pp-maint.exp
1 # Copyright (C) 2010-2012 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
19 if [is_remote host] {
20     untested "py-pp-maint.exp can only be run locally"
21     return -1
22 }
23
24 load_lib gdb-python.exp
25
26 set testfile "py-pp-maint"
27 set srcfile ${testfile}.c
28 set binfile ${objdir}/${subdir}/${testfile}
29
30 # Start with a fresh gdb.
31 gdb_exit
32 gdb_start
33
34 # Skip all tests if Python scripting is not enabled.
35 if { [skip_python_tests] } { continue }
36
37 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "debug"] != "" } {
38     untested "Couldn't compile ${srcfile}"
39     return -1
40 }
41
42 gdb_reinitialize_dir $srcdir/$subdir
43 gdb_load ${binfile}
44
45 if ![runto_main ] then {
46     fail "Can't run to main"
47     return -1
48 }
49
50 gdb_test "b [gdb_get_line_number {break to inspect} ${testfile}.c ]" \
51     ".*Breakpoint.*"
52 gdb_test "continue" ".*Breakpoint.*"
53
54 set python_file ${srcdir}/${subdir}/${testfile}.py
55
56 gdb_test_no_output "python execfile ('${python_file}')" ""
57
58 gdb_test "info pretty-printer" \
59     {.*function_lookup_test.*pp-test.*struct ss.*}
60
61 gdb_test "info pretty-printer global .*function" \
62     {.*function_lookup_test.*}
63
64 gdb_test "info pretty-printer .* pp-test" \
65     {.*pp-test.*struct ss.*}
66
67 gdb_test "print flt" " = x=<42> y=<43>" \
68     "print flt enabled #1"
69
70 gdb_test "print ss" " = a=<a=<1> b=<$hex>> b=<a=<2> b=<$hex>>" \
71     "print ss enabled #1"
72
73 set num_pp 6
74
75 gdb_test "disable pretty-printer" \
76     "$num_pp printers disabled.*0 of $num_pp printers enabled"
77
78 gdb_test "enable pretty-printer" \
79     "$num_pp printers enabled.*$num_pp of $num_pp printers enabled"
80
81 gdb_test "disable pretty-printer global" \
82     "$num_pp printers disabled.*0 of $num_pp printers enabled"
83
84 gdb_test "enable pretty-printer" \
85     "$num_pp printers enabled.*$num_pp of $num_pp printers enabled"
86
87 gdb_test "disable pretty-printer global lookup_function_lookup_test" \
88     "1 printer disabled.*[expr $num_pp - 1] of $num_pp printers enabled"
89
90 gdb_test "disable pretty-printer global pp-test;.*" \
91     "[expr $num_pp - 1] printers disabled.*0 of $num_pp printers enabled"
92
93 gdb_test "info pretty-printer global .*function" \
94     {.*function_lookup_test \[disabled\].*}
95
96 gdb_test "info pretty-printer .* pp-test" \
97     {.*pp-test.*struct ss \[disabled\].*}
98
99 gdb_test "print flt" " = {x = 42, y = 43}" \
100     "print flt disabled"
101
102 gdb_test "print ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \
103     "print ss disabled"
104
105 gdb_test "enable pretty-printer global lookup_function_lookup_test" \
106     "1 printer enabled.*1 of $num_pp printers enabled"
107
108 # This doesn't enable any printers because each subprinter in the collection
109 # is still individually disabled.  But this is still needed, to enable the
110 # collection itself.
111 gdb_test "enable pretty-printer global pp-test" \
112     "0 printers enabled.*1 of $num_pp printers enabled"
113
114 gdb_test "enable pretty-printer global pp-test;.*ss.*" \
115     "2 printers enabled.*[expr $num_pp - 3] of $num_pp printers enabled"
116
117 gdb_test "enable pretty-printer global pp-test;.*s.*" \
118     "2 printers enabled.*[expr $num_pp - 1] of $num_pp printers enabled"
119
120 gdb_test "enable pretty-printer global pp-test;.*" \
121     "1 printer enabled.*$num_pp of $num_pp printers enabled"
122
123 gdb_test "info pretty-printer" \
124     {.*function_lookup_test.*pp-test.*struct ss.*}
125
126 gdb_test "print flt" " = x=<42> y=<43>" \
127     "print flt re-enabled"
128
129 gdb_test "print ss" " = a=<a=<1> b=<$hex>> b=<a=<2> b=<$hex>>" \
130     "print ss re-enabled"
131
132 gdb_test "print (enum flag_enum) (FLAG_1)" \
133     " = 0x1 .FLAG_1." \
134     "print FLAG_1"
135
136 gdb_test "print (enum flag_enum) (FLAG_1 | FLAG_3)" \
137     " = 0x5 .FLAG_1 | FLAG_3." \
138     "print FLAG_1 | FLAG_3"
139
140 gdb_test "print (enum flag_enum) (4 + 8)" \
141     " = 0xc .FLAG_1 | <unknown: 0x8>." \
142     "print FLAG_1 | 8"