* gdb.python/py-mi.exp: Use different file names for different
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.python / py-mi.exp
CommitLineData
7b6bb8da 1# Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
b6313243
TT
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 MI.
18
19load_lib mi-support.exp
20set MIFLAGS "-i=mi2"
21
22gdb_exit
23if [mi_gdb_start] {
24 continue
25}
26
3b48433d
PA
27set testfile "py-mi"
28set srcfile py-prettyprint.c
29set binfile ${objdir}/${subdir}/${testfile}
30set pyfile py-prettyprint.py
b6313243 31if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DMI}] != "" } {
3b48433d 32 untested ${testfile}.exp
b6313243
TT
33 return -1
34}
35
36mi_delete_breakpoints
37mi_gdb_reinitialize_dir $srcdir/$subdir
38mi_gdb_load ${binfile}
39
40if {[lsearch -exact [mi_get_features] python] < 0} {
41 unsupported "python support is disabled"
42 return -1
43}
44
45mi_runto main
46
3b48433d 47set remote_python_file [remote_download host ${srcdir}/${subdir}/${pyfile}]
f24fce77
NF
48
49mi_gdb_test "python execfile ('${remote_python_file}')" ""
b6313243 50
3b48433d 51mi_continue_to_line [gdb_get_line_number {MI breakpoint here} ${srcfile}] \
b6313243
TT
52 "step to breakpoint"
53
0cc7d26f
TT
54mi_create_dynamic_varobj container c \
55 "create container varobj, no pretty-printing"
56
57mi_list_varobj_children container {
58 { container.name name 1 string }
59 { container.len len 0 int }
60 { container.elements elements 1 "int ." }
61} "examine container children=0, no pretty-printing"
62
63mi_delete_varobj container "delete varobj"
64
79f283fe
PM
65mi_create_dynamic_varobj nscont nstype \
66 "create nscont varobj, no pretty-printing"
67
68mi_list_varobj_children nscont {
69 { nscont.len len 0 int }
70 { nscont.elements elements 1 "int ." }
71} "examine nscont children=0, no pretty-printing"
72
73mi_delete_varobj nscont "delete varobj"
74
0cc7d26f
TT
75mi_gdb_test "-enable-pretty-printing" ""
76
77mi_create_varobj_checked string string_1 \
78 "struct string_repr" \
79 "create string_1 varobj"
80
be759fcf
PM
81mi_create_varobj_checked lstring estring \
82 "struct lazystring" \
83 "create estring varobj"
84
0cc7d26f
TT
85mi_gdb_test "-data-evaluate-expression \"string_1 = string_2\"" ".*" \
86 "assign string_1 from string_2"
87
88mi_gdb_test "-var-update string" \
89 "\\^done,changelist=\\\[{name=\"string\",in_scope=\"true\",type_changed=\"false\",dynamic=\"1\",has_more=\"0\"}\\\]" \
90 "update string varobj after assignment"
91
92mi_create_dynamic_varobj container c \
93 "create container varobj"
b6313243
TT
94
95mi_list_varobj_children container {
96} "examine container children=0"
97
98mi_next "next over update 1"
99
0cc7d26f
TT
100mi_varobj_update_dynamic container "varobj update 1" {
101 type_changed false new_num_children 1 dynamic 1 has_more 0
102} {
103} {
104 { name {container.\[0\]} exp {\[0\]} numchild 0 type int thread-id 1 }
105}
b6313243
TT
106
107mi_next "next over update 2"
108
0cc7d26f
TT
109mi_varobj_update_dynamic container "varobj update 2" {
110 type_changed false new_num_children 2 dynamic 1 has_more 0
111} {
112} {
113 { name {container.\[1\]} exp {\[1\]} numchild 0 type int thread-id 1 }
114}
b6313243
TT
115
116mi_gdb_test "-var-set-visualizer container None" \
117 "\\^done" \
118 "clear visualizer"
119
120mi_gdb_test "-var-update container" \
121 "\\^done,changelist=\\\[\\\]" \
122 "varobj update after clearing"
123
124mi_gdb_test "-var-set-visualizer container gdb.default_visualizer" \
125 "\\^done" \
126 "choose default visualizer"
127
0cc7d26f
TT
128mi_varobj_update_dynamic container "varobj update after choosing default" {
129 type_changed false new_num_children 2 dynamic 1 has_more 0
130} {
131} {
132 { name {container.\[0\]} exp {\[0\]} numchild 0 type int thread-id 1 }
133 { name {container.\[1\]} exp {\[1\]} numchild 0 type int thread-id 1 }
134}
b6313243
TT
135
136mi_gdb_test "-var-set-visualizer container ContainerPrinter" \
137 "\\^done" \
138 "choose visualizer using expression"
139
0cc7d26f
TT
140mi_varobj_update_dynamic container \
141 "varobj update after choosing via expression" {
142 type_changed false new_num_children 2 dynamic 1 has_more 0
143 } {
144 } {
145 { name {container.\[0\]} exp {\[0\]} numchild 0 type int thread-id 1 }
146 { name {container.\[1\]} exp {\[1\]} numchild 0 type int thread-id 1 }
147 }
148
149mi_list_varobj_children_range container 1 2 2 {
150 { {container.\[1\]} {\[1\]} 0 int }
151} "list varobj children after selecting child range"
152
153mi_list_varobj_children_range container -1 -1 2 {
b6313243
TT
154 { {container.\[0\]} {\[0\]} 0 int }
155 { {container.\[1\]} {\[1\]} 0 int }
0cc7d26f
TT
156} "list varobj children after resetting child range"
157
158mi_next "next over update 3"
159
160mi_gdb_test "-var-set-update-range container 0 1" \
161 "\\^done" \
162 "set update range"
163
164# This should truncate the list.
165mi_list_varobj_children container {
166 { {container.\[0\]} {\[0\]} 0 int }
167} "list children after setting update range"
168
169# This should return just the items in [1,2).
170mi_list_varobj_children_range container 1 2 2 {
171 { {container.\[1\]} {\[1\]} 0 int }
172} "list selected children after setting range"
173
174# This should not be affected by the previous list-children request.
175mi_list_varobj_children container {
176 { {container.\[0\]} {\[0\]} 0 int }
177} "list children after listing selected range"
178
179mi_next "next over update 4"
180
181# This should only show the first child, because the update range has
182# been set.
183mi_varobj_update_dynamic container \
184 "update after next with restricted range" {
185 type_changed false new_num_children 1 dynamic 1 has_more 1
186 } {
187 { name {container.\[0\]} in_scope true type_changed false dynamic 1 has_more 0 }
188 } {
189 }
190
191mi_gdb_test "-var-set-update-range container 3 4" \
192 "\\^done" \
193 "set update range with non-zero start"
194
195# Elements were updated but should not be reported.
196mi_varobj_update_dynamic container \
197 "update varobj with change outside selected range" {
198 type_changed false new_num_children 3 dynamic 1 has_more 0
199 } {
200 } {
201 }
202
203mi_next "next over update 5"
204
205# Regression test: examine an object that has no children, then update
206# it to ensure that we don't print the children.
207mi_create_dynamic_varobj container2 c2 \
208 "create second container varobj"
209
210mi_gdb_test "-var-update container2" \
211 "\\^done,changelist=.." \
212 "update varobj, no children requested"
213
214mi_next "next over update 6"
215
216# Now container2 has an element -- and an update should mention that
217# it has_more. But, because we did not request children, we still
218# should not actually see them.
219mi_varobj_update_dynamic container2 \
220 "update varobj 2, no children requested" {
221 type_changed false dynamic 1 has_more 1
222 } {} {}
223
224mi_continue_to_line \
3b48433d 225 [gdb_get_line_number {MI outer breakpoint here} ${srcfile}] \
0cc7d26f
TT
226 "step to outer breakpoint"
227
228mi_create_dynamic_varobj outer outer \
229 "create outer varobj"
230
231mi_list_varobj_children outer {
232 { outer.s s 2 "struct substruct" }
233 { outer.x x 0 "int" }
234} "list children of outer"
235
236mi_list_varobj_children outer.s {
237 { outer.s.a a 0 int }
238 { outer.s.b b 0 int }
239} "list children of outer.s"
240
241mi_next "next over outer update"
242
243mi_gdb_test "-var-update outer" \
244 ".done,changelist=.{name=\"outer.s.a\",in_scope=\"true\",type_changed=\"false\",dynamic=\"1\",has_more=\"0\"}." \
245 "update after updating element of outer"
b6313243
TT
246
247mi_continue_to_line \
3b48433d 248 [gdb_get_line_number {Another MI breakpoint} ${srcfile}] \
b6313243
TT
249 "step to second breakpoint"
250
251mi_varobj_update_with_type_change container int 0 "update after type change"
f24fce77 252
79f283fe
PM
253
254mi_continue_to_line \
3b48433d 255 [gdb_get_line_number {break to inspect struct and union} ${srcfile}] \
79f283fe
PM
256 "step to outer breakpoint"
257
258mi_create_dynamic_varobj nscont nstype \
259 "create nstype varobj"
260
261mi_list_varobj_children nscont {
262 { {nscont.\[0\]} {\[0\]} 0 int }
263 { {nscont.\[1\]} {\[1\]} 0 int }
264} "list children after setting update range"
265
266mi_gdb_test "-var-set-visualizer nscont None" \
267 "\\^done" \
268 "clear visualizer"
269
270mi_gdb_test "-var-update nscont" \
271 "\\^done,changelist=\\\[\\\]" \
272 "varobj update after clearing"
273
274mi_gdb_test "-var-set-visualizer nscont gdb.default_visualizer" \
275 "\\^done" \
276 "choose default visualizer"
277
a4c8e806
TT
278mi_gdb_test "python exception_flag = True" ""
279
280mi_create_dynamic_varobj nstype2 nstype2 \
281 "create nstype2 varobj"
282
283mi_list_varobj_children nstype2 {
284 { {nstype2.<error at 0>} {<error at 0>} 6 {char \[6\]} }
285} "list children after setting exception flag"
286
d65aec65
PM
287# C++ MI tests
288gdb_exit
b3215adc 289if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}-c++" \
d65aec65
PM
290 executable {debug c++ additional_flags=-DMI}] != "" } {
291 untested "Couldn't compile ${srcfile} in c++ mode"
292 return -1
293}
294
295if [mi_gdb_start] {
296 continue
297}
298mi_delete_breakpoints
299mi_gdb_reinitialize_dir $srcdir/$subdir
b3215adc 300mi_gdb_load ${binfile}-c++
d65aec65
PM
301
302if {[lsearch -exact [mi_get_features] python] < 0} {
303 unsupported "python support is disabled"
304 return -1
305}
306
307mi_runto main
308mi_continue_to_line \
3b48433d 309 [gdb_get_line_number {break to inspect struct and union} ${srcfile}] \
d65aec65
PM
310 "step to breakpoint"
311
312# Test python/12531. Install visualizer on a cplus_fake_child.
313mi_create_varobj fake fake \
314 "create fake varobj"
315
316mi_list_varobj_children fake {
317 { fake.private private 1 }
318} "list children of fake"
319
320mi_list_varobj_children fake.private {
321 { fake.private.sname sname 0 int }
322} "list children fake.private"
323
324mi_gdb_test "-var-set-visualizer fake.private gdb.default_visualizer" \
325 "\\^done" "Install visualizer on a cplus_fake_child"
326
f24fce77 327remote_file host delete ${remote_python_file}
This page took 0.287372 seconds and 4 git commands to generate.