1*b725ae77Skettenis# Copyright 2003, 2004 Free Software Foundation, Inc. 2*b725ae77Skettenis 3*b725ae77Skettenis# This program is free software; you can redistribute it and/or modify 4*b725ae77Skettenis# it under the terms of the GNU General Public License as published by 5*b725ae77Skettenis# the Free Software Foundation; either version 2 of the License, or 6*b725ae77Skettenis# (at your option) any later version. 7*b725ae77Skettenis# 8*b725ae77Skettenis# This program is distributed in the hope that it will be useful, 9*b725ae77Skettenis# but WITHOUT ANY WARRANTY; without even the implied warranty of 10*b725ae77Skettenis# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11*b725ae77Skettenis# GNU General Public License for more details. 12*b725ae77Skettenis# 13*b725ae77Skettenis# You should have received a copy of the GNU General Public License 14*b725ae77Skettenis# along with this program; if not, write to the Free Software 15*b725ae77Skettenis# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 16*b725ae77Skettenis 17*b725ae77Skettenis# This file was written by Adam Fedor (fedor@gnu.org) 18*b725ae77Skettenis 19*b725ae77Skettenisif $tracelevel then { 20*b725ae77Skettenis strace $tracelevel 21*b725ae77Skettenis} 22*b725ae77Skettenis 23*b725ae77Skettenisset testfile "basicclass" 24*b725ae77Skettenisset srcfile ${testfile}.m 25*b725ae77Skettenisset binfile ${objdir}/${subdir}/${testfile} 26*b725ae77Skettenis 27*b725ae77Skettenis# 28*b725ae77Skettenis# Objective-C program compilation isn't standard. We need to figure out 29*b725ae77Skettenis# which libraries to link in. Most of the time it uses pthread 30*b725ae77Skettenis# 31*b725ae77Skettenisif {[gdb_compile_objc "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } { 32*b725ae77Skettenis return -1 33*b725ae77Skettenis} 34*b725ae77Skettenis 35*b725ae77Skettenis# 36*b725ae77Skettenis# Deduce language of main() 37*b725ae77Skettenis# 38*b725ae77Skettenis 39*b725ae77Skettenisproc deduce_language_of_main {} { 40*b725ae77Skettenis global gdb_prompt 41*b725ae77Skettenis 42*b725ae77Skettenis # See what language gdb thinks main() is, prior to reading full symbols. 43*b725ae77Skettenis # I think this fails for COFF targets. 44*b725ae77Skettenis send_gdb "show language\n" 45*b725ae77Skettenis gdb_expect { 46*b725ae77Skettenis -re ".* source language is \"auto; currently objective-c\".*$gdb_prompt $" { 47*b725ae77Skettenis pass "deduced language is Objective-C, before full symbols" 48*b725ae77Skettenis } 49*b725ae77Skettenis -re ".*$gdb_prompt $" { 50*b725ae77Skettenis fail "source language not correct for Objective-C (psymtabs only)" 51*b725ae77Skettenis return 52*b725ae77Skettenis } 53*b725ae77Skettenis timeout { 54*b725ae77Skettenis fail "can't show language (timeout)" 55*b725ae77Skettenis return 56*b725ae77Skettenis } 57*b725ae77Skettenis } 58*b725ae77Skettenis 59*b725ae77Skettenis runto_main 60*b725ae77Skettenis 61*b725ae77Skettenis # See if our idea of the language has changed. 62*b725ae77Skettenis 63*b725ae77Skettenis send_gdb "show language\n" 64*b725ae77Skettenis gdb_expect { 65*b725ae77Skettenis -re ".* source language is \"auto; currently objective-c\".*$gdb_prompt $" { 66*b725ae77Skettenis pass "deduced language is Objective-C, after full symbols" 67*b725ae77Skettenis } 68*b725ae77Skettenis -re ".*$gdb_prompt $" { 69*b725ae77Skettenis fail "source language not correct for Objective-C (full symbols)" 70*b725ae77Skettenis return 71*b725ae77Skettenis } 72*b725ae77Skettenis timeout { 73*b725ae77Skettenis fail "can't show language (timeout)" 74*b725ae77Skettenis return 75*b725ae77Skettenis } 76*b725ae77Skettenis } 77*b725ae77Skettenis} 78*b725ae77Skettenis 79*b725ae77Skettenisproc do_objc_tests {} { 80*b725ae77Skettenis global prms_id 81*b725ae77Skettenis global bug_id 82*b725ae77Skettenis global subdir 83*b725ae77Skettenis global objdir 84*b725ae77Skettenis global srcdir 85*b725ae77Skettenis global binfile 86*b725ae77Skettenis global gdb_prompt 87*b725ae77Skettenis 88*b725ae77Skettenis set prms_id 0 89*b725ae77Skettenis set bug_id 0 90*b725ae77Skettenis 91*b725ae77Skettenis # Start with a fresh gdb. 92*b725ae77Skettenis 93*b725ae77Skettenis gdb_exit 94*b725ae77Skettenis gdb_start 95*b725ae77Skettenis gdb_reinitialize_dir $srcdir/$subdir 96*b725ae77Skettenis gdb_load $binfile 97*b725ae77Skettenis 98*b725ae77Skettenis deduce_language_of_main 99*b725ae77Skettenis} 100*b725ae77Skettenis 101*b725ae77Skettenisdo_objc_tests 102*b725ae77Skettenis 103*b725ae77Skettenis# 104*b725ae77Skettenis# Breakpoint tests 105*b725ae77Skettenis# 106*b725ae77Skettenisgdb_test "break doIt" \ 107*b725ae77Skettenis "Breakpoint.*at.* file .*$srcfile, line.29.*" \ 108*b725ae77Skettenis "breakpoint method" 109*b725ae77Skettenis 110*b725ae77Skettenisgdb_test "break takeArg:" \ 111*b725ae77Skettenis "Breakpoint.*at.* file .*$srcfile, line.34.*" \ 112*b725ae77Skettenis "breakpoint method with colon" 113*b725ae77Skettenis 114*b725ae77Skettenisgdb_test "break newWithArg:" \ 115*b725ae77Skettenis "Breakpoint.*at.* file .*$srcfile, line.22.*" \ 116*b725ae77Skettenis "breakpoint class method with colon" 117*b725ae77Skettenis 118*b725ae77Skettenis# 119*b725ae77Skettenis# Continue until breakpoint (test re-setting breakpoint) 120*b725ae77Skettenis# 121*b725ae77Skettenisgdb_test continue \ 122*b725ae77Skettenis "Continuing\\..*Breakpoint \[0-9\]+, -.BasicClass takeArg:. \\(self=.*, _cmd=.*, arg=.*\\) at .*$srcfile:34.*" \ 123*b725ae77Skettenis "continue until method breakpoint" 124*b725ae77Skettenis 125*b725ae77Skettenis# 126*b725ae77Skettenis# Test resetting breakpoints when re-running program 127*b725ae77Skettenis# 128*b725ae77Skettenisgdb_run_cmd 129*b725ae77Skettenisgdb_expect { 130*b725ae77Skettenis -re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:.*$gdb_prompt $"\ 131*b725ae77Skettenis { pass "resetting breakpoints when rerunning" } 132*b725ae77Skettenis -re ".*$gdb_prompt $" { fail "resetting breakpoints when rerunning" } 133*b725ae77Skettenis timeout { fail "resetting breakpoints when rerunning" } 134*b725ae77Skettenis} 135*b725ae77Skettenis 136*b725ae77Skettenis# 137*b725ae77Skettenis# Continue until breakpoint (test re-setting breakpoint) 138*b725ae77Skettenis# 139*b725ae77Skettenisgdb_test continue \ 140*b725ae77Skettenis "Continuing\\..*Breakpoint \[0-9\]+, -.BasicClass takeArg:. \\(self=.*, _cmd=.*, arg=.*\\) at .*$srcfile:34.*" \ 141*b725ae77Skettenis "continue until method breakpoint" 142*b725ae77Skettenis 143*b725ae77Skettenis# 144*b725ae77Skettenis# Test printing objects 145*b725ae77Skettenis# 146*b725ae77Skettenisgdb_test "print object" \ 147*b725ae77Skettenis "\\$\[0-9\] = .*0x0" \ 148*b725ae77Skettenis " print an ivar of self" 149*b725ae77Skettenis 150*b725ae77Skettenisgdb_test "print self" \ 151*b725ae77Skettenis "\\$\[0-9\] = \\(.*BasicClass \\*\\) 0x\[0-9a-f\]+" \ 152*b725ae77Skettenis " print self" 153*b725ae77Skettenis 154*b725ae77Skettenisgdb_test "print \*self" \ 155*b725ae77Skettenis "\\$\[0-9\] = \{isa = 0x\[0-9a-f\]+, object = 0x0\}" \ 156*b725ae77Skettenis " print contents of self" 157*b725ae77Skettenis 158*b725ae77Skettenis# 159*b725ae77Skettenis# Break in a category 160*b725ae77Skettenis# 161*b725ae77Skettenisgdb_test "break hiddenMethod" \ 162*b725ae77Skettenis "Breakpoint.*at.* file .*$srcfile, line.61." \ 163*b725ae77Skettenis "breakpoint in category method" 164*b725ae77Skettenis 165*b725ae77Skettenis 166*b725ae77Skettenis# 167*b725ae77Skettenis# Continue until breakpoint (test re-setting category breakpoint) 168*b725ae77Skettenis# 169*b725ae77Skettenisgdb_test continue \ 170*b725ae77Skettenis "Continuing\\..*Breakpoint \[0-9\]+, -.BasicClass\\(Private\\) hiddenMethod. \\(self=.*, _cmd=.*\\) at .*$srcfile:61.*" \ 171*b725ae77Skettenis "continue until category method" 172*b725ae77Skettenis 173*b725ae77Skettenis# 174*b725ae77Skettenis# Test calling Objective-C methods 175*b725ae77Skettenis# 176*b725ae77Skettenisgdb_test "print \[self printHi\]" \ 177*b725ae77Skettenis "Hi.*\\$\[0-9\] = \\(.*objc_object \\*\\) 0x\[0-9a-f\]+" \ 178*b725ae77Skettenis "Call an Objective-C method with no arguments" 179*b725ae77Skettenis 180*b725ae77Skettenisgdb_test "print \[self printNumber: 42\]" \ 181*b725ae77Skettenis "42.*\\$\[0-9\] = 43" \ 182*b725ae77Skettenis "Call an Objective-C method with one argument" 183*b725ae77Skettenis 184*b725ae77Skettenis# 185*b725ae77Skettenis# Test printing the object description 186*b725ae77Skettenis# 187*b725ae77Skettenisgdb_test "print-object object" \ 188*b725ae77Skettenis "BasicClass gdb test object" \ 189*b725ae77Skettenis "Use of the print-object command" 190*b725ae77Skettenis 191*b725ae77Skettenisgdb_test "po self" \ 192*b725ae77Skettenis "BasicClass gdb test object" \ 193*b725ae77Skettenis "Use of the po (print-object) command" 194*b725ae77Skettenis 195*b725ae77Skettenis 196