This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[RFA] New test for gdb's "finish" command



This is a general test for the "finish" command, which tests the
value returned by the function being "finished".  I've included
the basic intrinsic types, and it should be straightforward to add
more if anyone wants to (I may do so myself).  This test uses the
same source file as the return test that I submitted earlier today.

If you're wondering why I'm doing this -- I'm doing a new base port, 
and these are things you always have to test early on in the process.
I got tired of testing them by hand for every new architecture.  ;-)

As my base port progresses, I may extend these tests.

2000-12-07  Michael Snyder  <msnyder@cleaver.cygnus.com>

        * gdb.base/finish.exp: New test for gdb's "finish" command.

# Copyright (C) 2000 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# This file was written by Michael Snyder (msnyder@redhat.com)

if $tracelevel then {
	strace $tracelevel
}

set prms_id 0
set bug_id 0

# re-use the program from the "return2" test.
set testfile "return2"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

proc finish_1 { type } {
    global gdb_prompt

    gdb_test "break ${type}_func" "Breakpoint \[0123456789\].*" \
	    "set break on ${type}_func"
    gdb_test "continue" "Breakpoint.* ${type}_func.*" \
	    "continue to ${type}_func"
    send_gdb "finish\n"
    gdb_expect {
	-re ".*Value returned is .* = 1 '.001'\r\n$gdb_prompt $" {
	    if { $type == "char" } {
		pass "finish from char_func"
	    } else {
		fail "finish from char_func"
	    }
	}
	-re ".*Value returned is .* = 1\r\n$gdb_prompt $" {
	    pass "finish from ${type}_func"
	}
	-re ".*$gdb_prompt $" {
	    fail "finish from ${type}_func"
	}
	timeout {
	    fail "finish from ${type}_func (timeout)"
	}
    }
}

proc finish_void { } {
    global gdb_prompt

    gdb_test "break void_func" "Breakpoint \[0123456789\].*" \
	    "set break on void_func"
    gdb_test "continue" "Breakpoint.* void_func.*" \
	    "continue to void_func"
    send_gdb "finish\n"
    gdb_expect {
	-re ".*void_checkpoint.*$gdb_prompt $" {
	    pass "finish from void_func"
	}
	-re ".*$gdb_prompt $" {
	    fail "finish from void_func"
	}
	timeout {
	    fail "finish from void_func (timeout)"
	}
    }
}

proc finish_tests { } {
    global gdb_prompt

    if { ! [ runto main ] } then {
	gdb_suppress_entire_file "Run to main failed, so all tests in this file will automatically fail."
    }

    finish_void
    finish_1 "char"
    finish_1 "short"
    finish_1 "int"
    finish_1 "long"
    finish_1 "long_long"
    finish_1 "float"
    finish_1 "double"
}

# Start with a fresh gdb.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

set timeout 30
finish_tests


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]