# Copyright 1999, 2000, 2001, 2005 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

# Test Machine interface (MI) operations 
# Verify that, using the MI, we can run a simple program and perform
# exec-until.  

# The goal is not to
# test gdb functionality, which is done by other tests, but to verify
# the correct output response to MI operations.  
#

load_lib mi-support.exp
set MIFLAGS "-i=mi"

gdb_exit
if [mi_gdb_start] {
    continue
}

set testfile "until"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}

proc test_running_to_foo {} {
    global mi_gdb_prompt
    global hex

    mi_gdb_test "200-break-insert 10" \
             "200\\^done,bkpt=\{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$hex\",func=\"foo\",file=\".*until.c\",line=\"10\",times=\"0\"\}" \
             "break-insert operation"

    mi_run_cmd

    gdb_expect {
	-re "000\\*stopped,reason=\"breakpoint-hit\",bkptno=\"1\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"foo\",args=\\\[\\\],file=\".*until.c\",line=\"10\"\}\r\n$mi_gdb_prompt$" {
	    pass "run to main"
	}
	-re ".*$mi_gdb_prompt$" {
	    fail "run to main (2)"
	}
	timeout {
	    fail "run to main (timeout)"
	}
    }

    mi_gdb_test "100-break-delete 1" "100\\^done" "break-delete 1"

}

proc test_until {} {
    global mi_gdb_prompt
    global hex fullname_syntax srcfile

    send_gdb "111-exec-until\n"
    gdb_expect {
	-re "111\\^running\r\n${mi_gdb_prompt}111\\*stopped,reason=\"end-stepping-range\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"foo\",args=\\\[\\\],file=\".*until.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"12\"\}\r\n$mi_gdb_prompt$" {
	    pass "until after while loop"
	}
	timeout {
	    fail "until after while loop (timeout)"
	}
    }

    send_gdb "222-exec-until 15\n"
    gdb_expect {
	-re "222\\^running\r\n${mi_gdb_prompt}222\\*stopped,reason=\"location-reached\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"foo\",args=\\\[\\\],file=\".*until.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"15\"\}\r\n$mi_gdb_prompt$" {
	    pass "until line number"
	}
	timeout {
	    fail "until line number (timeout)"
	}
    }

    send_gdb "333-exec-until until.c:17\n"
    gdb_expect {
	-re "333\\^running\r\n${mi_gdb_prompt}333\\*stopped,reason=\"location-reached\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"foo\",args=\\\[\\\],file=\".*until.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"17\"\}\r\n$mi_gdb_prompt$" {
	    pass "until line number:file"
	}
	timeout {
	    fail "until line number:file (timeout)"
	}
    }

    # This is supposed to NOT stop at line 25. It stops right after foo is over.

    send_gdb "444-exec-until until.c:25\n"
    gdb_expect {
	-re "444\\^running\r\n${mi_gdb_prompt}444\\*stopped,reason=\"location-reached\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"main\",args=\\\[\\\],file=\".*until.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"24\"\}\r\n$mi_gdb_prompt$" {
	    pass "until after current function"
	}
	timeout {
	    fail "until after current function (timeout)"
	}
    }

}

test_running_to_foo
test_until

mi_gdb_exit
return 0
