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