xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/testsuite/gdb.mi/mi-basics.exp (revision 9616dacfef448e70e3fbbd865bddf60d54b656c5)
1# Copyright 1999-2015 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#
17# Test basic Machine interface (MI) operations
18#
19# Verify that, using the MI, we can load a program and do
20# other basic things that are used by all test files through  mi_gdb_exit,
21# mi_gdb_start, mi_delete_breakpoints, mi_gdb_reinitialize_dir and
22# mi_gdb_load, so we can safely use those.
23#
24# The goal is not to test gdb functionality, which is done by other tests,
25# but the command syntax and correct output response to MI operations.
26#
27
28load_lib mi-support.exp
29set MIFLAGS "-i=mi"
30
31gdb_exit
32if [mi_gdb_start separate-inferior-tty] {
33    continue
34}
35
36standard_testfile basics.c
37# This file was audited to ensure that the explicit references to
38# objdir in it are safe for parallel testing.  Please be sure to
39# maintain this property in any additions.
40set escapedobjdir [string_to_regexp ${objdir}]
41set testsubdir [standard_output_file ""]
42set envirodir [string_to_regexp $testsubdir]
43
44if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
45     untested mi-basics.exp
46     return -1
47}
48
49# In this file we want to test if the operations needed by the following
50# procedures work, so it makes no sense using them here.
51
52# mi_delete_breakpoints
53# mi_gdb_reinitialize_dir $srcdir/$subdir
54# mi_gdb_load ${binfile}
55
56# Test if the MI interpreter has been configured
57
58proc test_mi_interpreter_selection {} {
59    global mi_gdb_prompt
60    global gdb_prompt
61
62    # All this test expects is to get the prompt back
63    # with no syntax error message
64    if ![mi_gdb_test "-gdb-version" "~\"GNU gdb.*" "acceptance of MI operations"] {
65	return 1
66    }
67
68    note "Skipping all other MI tests."
69    return 0
70}
71
72proc test_exec_and_symbol_mi_operatons {} {
73    global mi_gdb_prompt
74    global binfile testfile
75
76    if [is_remote host] {
77	set filename ${testfile}
78	remote_download host ${binfile} ${filename}
79    } else {
80	set filename ${binfile}
81    }
82
83    # Load symbols and specify executable on a single operation
84    # Tests:
85    # -file-exec-and-symbols
86
87    if [mi_gdb_test "-file-exec-and-symbols ${filename}" "\\\^done" \
88       "file-exec-and-symbols operation"] {
89	note "Skipping all other MI tests."
90	return 0
91    }
92
93    # The following is not used by mi-support.exp, but we test here so
94    # we get done with loading a program basics.
95
96    # Do it again, but now load symbols and specify executable with
97    # two separate operations
98    # Tests:
99    # -file-clear
100    # -file-exec-file
101    # -file-symbol-file
102
103    # FIXME: file-clear is not implemented yet.
104#   mi_gdb_test "-file-clear" \
105#            "\\\^done" \
106#            "file-clear operation"
107
108    mi_gdb_test "-file-exec-file ${filename}" \
109             "\\\^done" \
110             "file-exec-file operation"
111
112    mi_gdb_test "-file-symbol-file ${filename}" \
113             "\\\^done" \
114             "file-symbol-file operation"
115
116    # We need to return != 0.
117    return 1
118}
119
120proc test_breakpoints_deletion {} {
121    global mi_gdb_prompt
122    global srcfile
123
124    # Clear all breakpoints and list to confirm
125    # Tests:
126    # -break-delete (all)
127    # -break-list
128
129    # The all parameter is actually no parameter.
130    mi_gdb_test "200-break-delete" \
131             "200\\\^done" \
132             "break-delete (all) operation"
133
134    mi_gdb_test "201-break-list" \
135             ".*\\\^done,BreakpointTable=\\\{.*,body=\\\[\\\]\\\}" \
136             "all breakpoints removed"
137}
138
139proc test_dir_specification {} {
140    global mi_gdb_prompt
141    global envirodir
142    global testsubdir
143
144    # Add to the search directories, display, then reset back to default
145    # Tests:
146    # -environment-directory arg
147    # -environment-directory
148    # -environment-directory -r
149
150    mi_gdb_test "202-environment-directory ${testsubdir}" \
151             "202\\\^done,source-path=\"${envirodir}.\\\$cdir.\\\$cwd\"" \
152             "environment-directory arg operation"
153
154    mi_gdb_test "203-environment-directory" \
155             "203\\\^done,source-path=\"${envirodir}.\\\$cdir.\\\$cwd\"" \
156             "environment-directory empty-string operation"
157
158    mi_gdb_test "204-environment-directory -r" \
159             "204\\\^done,source-path=\"\\\$cdir.\\\$cwd\"" \
160             "environment-directory operation"
161}
162
163proc test_cwd_specification {} {
164    global mi_gdb_prompt
165    global objdir
166    global escapedobjdir
167
168    # Change the working directory, then print the current working directory
169    # Tests:
170    # -environment-cd ${objdir}
171    # -environment-pwd
172
173    mi_gdb_test "205-environment-cd ${objdir}" \
174             "205\\\^done" \
175             "environment-cd arg operation"
176
177    # The canonical name of the working directory may differ on a
178    # remote host from that on the build system.
179    if ![is_remote host] {
180	mi_gdb_test "206-environment-pwd" \
181             "206\\\^done,cwd=\"${escapedobjdir}\"" \
182             "environment-pwd operation"
183    }
184}
185
186proc test_path_specification {} {
187    global mi_gdb_prompt
188    global orig_path
189    global objdir
190    global escapedobjdir
191    global testsubdir
192    global envirodir
193    global expect_out
194
195    # Add to the path, display, then reset
196    # Tests:
197    # -environment-path
198    # -environment-path dir1 dir2
199    # -environment-path -r dir
200    # -environment-path -r
201
202    mi_gdb_test "-environment-path" "\\\^done,path=\"(.*)\"" "environment-path"
203    set orig_path $expect_out(3,string)
204
205    set orig_path [string_to_regexp ${orig_path}]
206
207    mi_gdb_test "207-environment-path" \
208             "207\\\^done,path=\"$orig_path\"" \
209             "environment-path no-args operation"
210
211    mi_gdb_test "208-environment-path $objdir ${testsubdir}" \
212             "208\\\^done,path=\"$escapedobjdir.${envirodir}.$orig_path\"" \
213             "environment-path dir1 dir2 operation"
214
215    mi_gdb_test "209-environment-path -r $objdir" \
216             "209\\\^done,path=\"$escapedobjdir.$orig_path\"" \
217             "environment-path -r dir operation"
218
219    mi_gdb_test "210-environment-path -r" \
220             "210\\\^done,path=\"$orig_path\"" \
221             "environment-path -r operation"
222
223}
224
225proc test_setshow_inferior_tty {} {
226    global mi_gdb_prompt
227    global mi_inferior_tty_name
228
229    # Test that the commands,
230    #   -inferior-tty-set
231    #   -inferior-tty-show
232    # are setting/getting the same data in GDB.
233
234    mi_gdb_test "301-inferior-tty-show" \
235		"301\\\^done,inferior_tty_terminal=\"$mi_inferior_tty_name\"" \
236		"initial tty is mi_inferior_tty_name"
237
238    mi_gdb_test "302-inferior-tty-set /dev/pts/1" \
239		"302\\\^done" \
240		"set tty to /dev/pts/1"
241
242    mi_gdb_test "303-inferior-tty-show" \
243		"303\\\^done,inferior_tty_terminal=\"/dev/pts/1\"" \
244		"tty was set correctly"
245
246    mi_gdb_test "304-inferior-tty-set" \
247		"304\\\^done" \
248		"set tty to the empty string"
249
250    mi_gdb_test "305-inferior-tty-show" \
251		"305\\\^done" \
252		"make sure tty is empty"
253
254    mi_gdb_test "306-inferior-tty-set $mi_inferior_tty_name" \
255		"306\\\^done" \
256		"set tty to mi_inferior_tty_name (the way it was)"
257
258    mi_gdb_test "307-inferior-tty-show" \
259		"307\\\^done,inferior_tty_terminal=\"$mi_inferior_tty_name\"" \
260		"verify tty is correct"
261}
262
263if { [test_mi_interpreter_selection]
264      && [test_exec_and_symbol_mi_operatons] } {
265  test_breakpoints_deletion
266  test_dir_specification
267  test_cwd_specification
268  test_path_specification
269  test_setshow_inferior_tty
270}
271
272mi_gdb_exit
273return 0
274