annota2.exp revision 1.1
1# Copyright 1999-2014 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# This file was written by Elena Zannoni (ezannoni@cygnus.com) 17 18 19# 20# test running programs 21# 22 23if { [skip_cplus_tests] } { continue } 24 25standard_testfile .cc 26 27if {[prepare_for_testing $testfile.exp $testfile $srcfile \ 28 {debug c++ nowarnings}]} { 29 return -1 30} 31 32# are we on a target board? If so, don't run these tests. 33# note: this is necessary because we cannot use runto_main (which would 34# work for remote targets too) because of the different prompt we get 35# when using annotation level 2. 36# 37if [is_remote target] then { 38 return 0 39} 40 41set breakpoints_invalid "\r\n\032\032breakpoints-invalid\r\n" 42set frames_invalid "\r\n\032\032frames-invalid\r\n" 43 44# 45# line number where we need to stop in main 46# 47set main_line 25 48 49# The commands we test here produce many lines of output; disable "press 50# <return> to continue" prompts. 51gdb_test_no_output "set height 0" 52 53# 54# break at main 55# 56gdb_test "break 25" \ 57 "Breakpoint.*at.* file .*$srcfile, line.*" \ 58 "breakpoint main" 59 60 61# 62# NOTE: this prompt is OK only when the annotation level is > 1 63# NOTE: When this prompt is in use the gdb_test procedure cannot be used because 64# it assumes that the last char of the gdb_prompt is a white space. This is not 65# true with this annotated prompt. So we must use send_gdb and gdb_expect. 66# 67 68set old_gdb_prompt $gdb_prompt 69set gdb_prompt "\r\n\032\032pre-prompt\r\n$gdb_prompt \r\n\032\032prompt\r\n" 70 71send_gdb "set annotate 2\n" 72gdb_expect { 73 -re "set annotate 2\r\n$gdb_prompt$" { pass "annotation set at level 2" } 74 -re ".*$gdb_prompt$" { fail "annotation set at level 2" } 75 timeout { fail "annotation set at level 2 (timeout)" } 76 } 77 78gdb_test_multiple "run" "run until main breakpoint" { 79 -re "$main_line.*$gdb_prompt$" { 80 pass "run until main breakpoint" 81 } 82} 83 84# 85# print class 'a' with public fields. 86# this will test: 87# annotate-field-begin 88# annotate-field-name-end 89# annotate-field-value 90# annotate-field-end 91# 92gdb_test_multiple "print a" "print class" { 93 -re "\r\n\032\032post-prompt\r\n\r\n\032\032value-history-begin 1 -\r\n.*= \r\n\032\032value-history-value\r\n\\{\r\n\032\032field-begin -\r\nx\r\n\032\032field-name-end\r\n = \r\n\032\032field-value\r\n1\r\n\032\032field-end\r\n, \r\n\032\032field-begin -\r\ny\r\n\032\032field-name-end\r\n = \r\n\032\032field-value\r\n2\r\n\032\032field-end\r\n\\}\r\n\r\n\032\032value-history-end\r\n$gdb_prompt$" { 94 pass "print class" 95 } 96} 97 98# 99# continue until exit 100# this will test: 101# annotate-exited 102# `a.x is 1' is asynchronous regarding to `frames-invalid'. 103# 104gdb_test_multiple "continue" "continue until exit" { 105 -re "\r\n\032\032post-prompt\r\nContinuing.\r\n\r\n\032\032starting\(\r\n\r\n\032\032frames-invalid\)*\r\na.x is 1\r\n\(\r\n\032\032frames-invalid\r\n\)*\r\n\032\032exited 0\r\n$inferior_exited_re normally.\r\n\r\n\032\032stopped\r\n$gdb_prompt$" { 106 pass "continue until exit" 107 } 108} 109 110# 111# delete all breakpoints 112# 113send_gdb "delete\n" 114gdb_expect { 115 -re ".*Delete all breakpoints. \\(y or n\\) \r\n\032\032query.*$" { 116 send_gdb "y\n" 117 gdb_expect { 118 -re "\r\n\032\032post-query\r\n${breakpoints_invalid}$gdb_prompt$" { pass "delete bps" } 119 -re ".*$gdb_prompt$" { fail "delete bps" } 120 timeout { fail "delete bps (timeout)" } 121 } 122 } 123 -re ".*$gdb_prompt$" { fail "delete bps" } 124 timeout { fail "delete bps (timeout)" } 125} 126 127# 128# break at first line of main. 129# 130gdb_test_multiple "break 22" "break at main" { 131 -re "\r\n\032\032post-prompt\r\nBreakpoint.*at $hex: file.*$srcfile, line.*\r\n\032\032breakpoints-invalid.*\r\n$gdb_prompt$" { 132 pass "breakpoint at main" 133 } 134} 135 136# 137# change value of main_line 138# 139set main_line 22 140 141# 142# run program up to breakpoint. 143# 144 145gdb_test_multiple "run" "run until main breakpoint" { 146 -re "$main_line.*$gdb_prompt$" { 147 pass "run until main breakpoint" 148 } 149} 150 151# 152# set up a watch point on a.x 153# 154gdb_test_multiple "watch a.x" "set watch on a.x" { 155 -re "\r\n\032\032post-prompt\r\n.*atchpoint 3: a.x.*\r\n\032\032breakpoints-invalid\r\n.*$gdb_prompt$" { 156 pass "set watch on a.x" 157 } 158} 159 160# 161# do a next, so that the watchpoint triggers. This will test: 162# annotate-watchpoint 163# 164gdb_test_multiple "next" "watch triggered on a.x" { 165 -re "\r\n\032\032post-prompt\r\n\r\n\032\032starting\r\n${frames_invalid}${breakpoints_invalid}\r\n\032\032watchpoint 3\r\n.*atchpoint 3: a.x\r\n\r\nOld value = 0\r\nNew value = 1\r\n\r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nmain\r\n\032\032frame-args\r\n \\(\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*$srcfile\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n$decimal\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source .*$srcfile.*beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n.*$gdb_prompt$" { 166 pass "watch triggered on a.x" 167 } 168 -re "\r\n\032\032post-prompt\r\n\r\n\032\032starting\r\n${frames_invalid}\r\n\032\032source .*$srcfile.*beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" { 169 kfail "gdb/38" "watch triggered on a.x" 170 } 171} 172 173 174# 175# send ^C to gdb, so that the quit() function gets called 176# and annotate-quit is tested 177# test: 178# annotate-quit 179# 180send_gdb "\003" 181gdb_expect { 182 -re "\r\n\032\032error-begin\r\nQuit\r\n\r\n\032\032quit\r\n$gdb_prompt$" \ 183 { pass "annotate-quit" } 184 -re ".*$gdb_prompt$" { fail "annotate-quit" } 185 timeout { fail "annotate-quit (timeout)" } 186} 187 188# 189# FIXME: the testsuite does not currently have tests for 190# annotate_catchpoints and annotate_function_call 191# and a few variants of the annotations that are 192# tested (marked by FIXME on the annot?.exp files) 193# 194 195# reinstall the old prompt for the rest of the testsuite. 196 197set gdb_prompt $old_gdb_prompt 198 199