1*11efff7fSkettenis# Copyright 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
2b725ae77Skettenis
3b725ae77Skettenis# This program is free software; you can redistribute it and/or modify
4b725ae77Skettenis# it under the terms of the GNU General Public License as published by
5b725ae77Skettenis# the Free Software Foundation; either version 2 of the License, or
6b725ae77Skettenis# (at your option) any later version.
7b725ae77Skettenis#
8b725ae77Skettenis# This program is distributed in the hope that it will be useful,
9b725ae77Skettenis# but WITHOUT ANY WARRANTY; without even the implied warranty of
10b725ae77Skettenis# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11b725ae77Skettenis# GNU General Public License for more details.
12b725ae77Skettenis#
13b725ae77Skettenis# You should have received a copy of the GNU General Public License
14b725ae77Skettenis# along with this program; if not, write to the Free Software
15b725ae77Skettenis# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
16b725ae77Skettenis
17b725ae77Skettenis# Please email any bugs, comments, and/or additions to this file to:
18b725ae77Skettenis# bug-gdb@prep.ai.mit.edu
19b725ae77Skettenis
20b725ae77Skettenis#
21b725ae77Skettenis# test basic Machine interface (MI) operations
22b725ae77Skettenis#
23b725ae77Skettenis# Verify that, using the MI, we can load a program and do
24b725ae77Skettenis# other basic things that are used by all test files through  mi_gdb_exit,
25b725ae77Skettenis# mi_gdb_start, mi_delete_breakpoints, mi_gdb_reinitialize_dir and
26b725ae77Skettenis# mi_gdb_load, so we can safely use those.
27b725ae77Skettenis#
28b725ae77Skettenis# The goal is not to test gdb functionality, which is done by other tests,
29b725ae77Skettenis# but the command syntax and correct output response to MI operations.
30b725ae77Skettenis#
31b725ae77Skettenis
32b725ae77Skettenisload_lib mi-support.exp
33b725ae77Skettenisset MIFLAGS "-i=mi"
34b725ae77Skettenis
35b725ae77Skettenisgdb_exit
36b725ae77Skettenisif [mi_gdb_start] {
37b725ae77Skettenis    continue
38b725ae77Skettenis}
39b725ae77Skettenis
40b725ae77Skettenisset testfile "basics"
41b725ae77Skettenisset srcfile ${testfile}.c
42b725ae77Skettenisset binfile ${objdir}/${subdir}/${testfile}
43b725ae77Skettenisset escapedobjdir [string_to_regexp ${objdir}]
44b725ae77Skettenisset escapedsrcdir [string_to_regexp ${srcdir}]
45b725ae77Skettenis
46b725ae77Skettenisif  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
47b725ae77Skettenis     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
48b725ae77Skettenis}
49b725ae77Skettenis
50b725ae77Skettenis# In this file we want to test if the operations needed by the following
51b725ae77Skettenis# procedures work, so it makes no sense using them here.
52b725ae77Skettenis
53b725ae77Skettenis# mi_delete_breakpoints
54b725ae77Skettenis# mi_gdb_reinitialize_dir $srcdir/$subdir
55b725ae77Skettenis# mi_gdb_load ${binfile}
56b725ae77Skettenis
57b725ae77Skettenis# Test if the MI interpreter has been configured
58b725ae77Skettenis
59b725ae77Skettenisproc test_mi_interpreter_selection {} {
60b725ae77Skettenis    global mi_gdb_prompt
61b725ae77Skettenis    global gdb_prompt
62b725ae77Skettenis
63b725ae77Skettenis    # All this test expects is to get the prompt back
64b725ae77Skettenis    # with no syntax error message
65b725ae77Skettenis    send_gdb "-gdb-version\n"
66b725ae77Skettenis    gdb_expect {
67b725ae77Skettenis           -re "GNU gdb .*\r\n$mi_gdb_prompt$" \
68b725ae77Skettenis               { pass "acceptance of MI operations"
69b725ae77Skettenis                 return 1}
70b725ae77Skettenis           -re ".*\r\n$mi_gdb_prompt$" \
71b725ae77Skettenis               { fail "acceptance of MI operations"
72b725ae77Skettenis                 note "Skipping all other MI tests." }
73b725ae77Skettenis           -re "Undefined command.*$gdb_prompt $" \
74b725ae77Skettenis               { fail "acceptance of MI operations"
75b725ae77Skettenis                 note "Skipping all other MI tests." }
76b725ae77Skettenis           -re ".*$gdb_prompt $" \
77b725ae77Skettenis               { fail "acceptance of MI operations"
78b725ae77Skettenis                 note "Skipping all other MI tests." }
79b725ae77Skettenis           timeout { fail "acceptance of MI operations (timeout)"
80b725ae77Skettenis                     note "Skipping all other MI tests." }
81b725ae77Skettenis    }
82b725ae77Skettenis    return 0
83b725ae77Skettenis}
84b725ae77Skettenis
85b725ae77Skettenisproc test_exec_and_symbol_mi_operatons {} {
86b725ae77Skettenis    global mi_gdb_prompt
87b725ae77Skettenis    global binfile
88b725ae77Skettenis
89b725ae77Skettenis    # Load symbols and specify executable on a single operation
90b725ae77Skettenis    # Tests:
91b725ae77Skettenis    # -file-exec-and-symbols
92b725ae77Skettenis
93b725ae77Skettenis    # Can't use mi_gdb_test as if this doesn't work,
94b725ae77Skettenis    #  we must give up on the whole test file
95b725ae77Skettenis    send_gdb "-file-exec-and-symbols ${binfile}\n"
96b725ae77Skettenis    gdb_expect {
97b725ae77Skettenis           -re "\[\r\n\]*\\\^done\r\n$mi_gdb_prompt$" \
98b725ae77Skettenis               { pass "file-exec-and-symbols operation" }
99b725ae77Skettenis           timeout { fail "file-exec-and-symbols operation (timeout)"
100b725ae77Skettenis                     note "Skipping all other MI tests."
101b725ae77Skettenis                     return 0}
102b725ae77Skettenis    }
103b725ae77Skettenis
104b725ae77Skettenis    # The following is not used by mi-support.exp, but we test here so
105b725ae77Skettenis    # we get done with loading a program basics.
106b725ae77Skettenis
107b725ae77Skettenis    # Do it again, but now load symbols and specify executable with
108b725ae77Skettenis    # two separate operations
109b725ae77Skettenis    # Tests:
110b725ae77Skettenis    # -file-clear
111b725ae77Skettenis    # -file-exec-file
112b725ae77Skettenis    # -file-symbol-file
113b725ae77Skettenis
114b725ae77Skettenis    # FIXME: file-clear is not implemented yet.
115b725ae77Skettenis#   mi_gdb_test "-file-clear" \
116b725ae77Skettenis#            "\\\^done" \
117b725ae77Skettenis#            "file-clear operation"
118b725ae77Skettenis
119b725ae77Skettenis    mi_gdb_test "-file-exec-file ${binfile}" \
120b725ae77Skettenis             "\\\^done" \
121b725ae77Skettenis             "file-exec-file operation"
122b725ae77Skettenis
123b725ae77Skettenis    mi_gdb_test "-file-symbol-file ${binfile}" \
124b725ae77Skettenis             "\\\^done" \
125b725ae77Skettenis             "file-symbol-file operation"
126b725ae77Skettenis
127b725ae77Skettenis    # FIXME: if we cannot load we have to skip all other tests.
128b725ae77Skettenis}
129b725ae77Skettenis
130b725ae77Skettenisproc test_breakpoints_deletion {} {
131b725ae77Skettenis    global mi_gdb_prompt
132b725ae77Skettenis    global srcfile
133b725ae77Skettenis
134b725ae77Skettenis    # Clear all breakpoints and list to confirm
135b725ae77Skettenis    # Tests:
136b725ae77Skettenis    # -break-delete (all)
137b725ae77Skettenis    # -break-list
138b725ae77Skettenis
139b725ae77Skettenis    # The all parameter is actually no parameter.
140b725ae77Skettenis    mi_gdb_test "200-break-delete" \
141b725ae77Skettenis             "\\\^done" \
142b725ae77Skettenis             "break-delete (all) operation"
143b725ae77Skettenis
144b725ae77Skettenis    mi_gdb_test "201-break-list" \
145b725ae77Skettenis             ".*\\\^done,BreakpointTable=\\\{.*,body=\\\[\\\]\\\}" \
146b725ae77Skettenis             "all breakpoints removed"
147b725ae77Skettenis}
148b725ae77Skettenis
149b725ae77Skettenisproc test_dir_specification {} {
150b725ae77Skettenis    global mi_gdb_prompt
151b725ae77Skettenis    global srcdir
152b725ae77Skettenis    global subdir
153b725ae77Skettenis
154b725ae77Skettenis    # Add to the search directories, display, then reset back to default
155b725ae77Skettenis    # Tests:
156b725ae77Skettenis    # -environment-directory arg
157b725ae77Skettenis    # -environment-directory
158b725ae77Skettenis    # -environment-directory -r
159b725ae77Skettenis
160b725ae77Skettenis    set envirodir [string_to_regexp ${srcdir}/${subdir}]
161b725ae77Skettenis
162b725ae77Skettenis    mi_gdb_test "202-environment-directory ${srcdir}/${subdir}" \
163b725ae77Skettenis             "\\\^done,source-path=\"${envirodir}.\\\$cdir.\\\$cwd\"" \
164b725ae77Skettenis             "environment-directory arg operation"
165b725ae77Skettenis
166b725ae77Skettenis    mi_gdb_test "203-environment-directory" \
167b725ae77Skettenis             "\\\^done,source-path=\"${envirodir}.\\\$cdir.\\\$cwd\"" \
168b725ae77Skettenis             "environment-directory empty-string operation"
169b725ae77Skettenis
170b725ae77Skettenis    mi_gdb_test "204-environment-directory -r" \
171b725ae77Skettenis             "\\\^done,source-path=\"\\\$cdir.\\\$cwd\"" \
172b725ae77Skettenis             "environment-directory operation"
173b725ae77Skettenis}
174b725ae77Skettenis
175b725ae77Skettenisproc test_cwd_specification {} {
176b725ae77Skettenis    global mi_gdb_prompt
177b725ae77Skettenis    global objdir
178b725ae77Skettenis    global escapedobjdir
179b725ae77Skettenis    global subdir
180b725ae77Skettenis
181b725ae77Skettenis    # Change the working directory, then print the current working directory
182b725ae77Skettenis    # Tests:
183b725ae77Skettenis    # -environment-cd ${objdir}
184b725ae77Skettenis    # -environment-pwd
185b725ae77Skettenis
186b725ae77Skettenis    mi_gdb_test "205-environment-cd ${objdir}" \
187b725ae77Skettenis             "\\\^done" \
188b725ae77Skettenis             "environment-cd arg operation"
189b725ae77Skettenis
190b725ae77Skettenis    mi_gdb_test "206-environment-pwd" \
191b725ae77Skettenis             "\\\^done,cwd=\"${escapedobjdir}\"" \
192b725ae77Skettenis             "environment-pwd operation"
193b725ae77Skettenis}
194b725ae77Skettenis
195b725ae77Skettenisproc test_path_specification {} {
196b725ae77Skettenis    global mi_gdb_prompt
197b725ae77Skettenis    global orig_path
198b725ae77Skettenis    global objdir
199b725ae77Skettenis    global srcdir
200b725ae77Skettenis    global escapedobjdir
201b725ae77Skettenis    global escapedsrcdir
202b725ae77Skettenis
203b725ae77Skettenis    # Add to the path, display, then reset
204b725ae77Skettenis    # Tests:
205b725ae77Skettenis    # -environment-path
206b725ae77Skettenis    # -environment-path dir1 dir2
207b725ae77Skettenis    # -environment-path -r dir
208b725ae77Skettenis    # -environment-path -r
209b725ae77Skettenis
210b725ae77Skettenis    send_gdb "-environment-path\n"
211b725ae77Skettenis    gdb_expect 20 {
212b725ae77Skettenis	-re "\\\^done,path=\"\(.*\)\"\r\n$mi_gdb_prompt" {
213b725ae77Skettenis	  set orig_path $expect_out(1,string);
214b725ae77Skettenis	}
215b725ae77Skettenis	timeout {
216b725ae77Skettenis	  perror "-environment-path (timeout)" ;
217b725ae77Skettenis	  return
218b725ae77Skettenis	}
219b725ae77Skettenis    }
220b725ae77Skettenis
221b725ae77Skettenis    mi_gdb_test "207-environment-path" \
222b725ae77Skettenis             "\\\^done,path=\"$orig_path\"" \
223b725ae77Skettenis             "environment-path no-args operation"
224b725ae77Skettenis
225b725ae77Skettenis    mi_gdb_test "208-environment-path $srcdir $objdir" \
226b725ae77Skettenis             "\\\^done,path=\"$escapedsrcdir.$escapedobjdir.$orig_path\"" \
227b725ae77Skettenis             "environment-path dir1 dir2 operation"
228b725ae77Skettenis
229b725ae77Skettenis    mi_gdb_test "209-environment-path -r $objdir" \
230b725ae77Skettenis             "\\\^done,path=\"$escapedobjdir.$orig_path\"" \
231b725ae77Skettenis             "environment-path -r dir operation"
232b725ae77Skettenis
233b725ae77Skettenis    mi_gdb_test "210-environment-path -r" \
234b725ae77Skettenis             "\\\^done,path=\"$orig_path\"" \
235b725ae77Skettenis             "environment-path -r operation"
236b725ae77Skettenis
237b725ae77Skettenis}
238b725ae77Skettenis
239b725ae77Skettenisif [test_mi_interpreter_selection] {
240b725ae77Skettenis  test_exec_and_symbol_mi_operatons
241b725ae77Skettenis  test_breakpoints_deletion
242b725ae77Skettenis  test_dir_specification
243b725ae77Skettenis  test_cwd_specification
244b725ae77Skettenis  test_path_specification
245b725ae77Skettenis}
246b725ae77Skettenis
247b725ae77Skettenismi_gdb_exit
248b725ae77Skettenisreturn 0
249