xref: /openbsd-src/gnu/usr.bin/binutils/gdb/testsuite/gdb.objc/basicclass.exp (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
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