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