# Copyright 1999-2001, 2005, 2007-2012 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 3 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, see <http://www.gnu.org/licenses/>.

# 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}] != "" } {
     untested mi-until.exp
     return -1
}

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_create_breakpoint "10" 1 "keep" foo ".*until.c" 10 ".*" \
             "break-insert operation"

    mi_run_cmd
    mi_expect_stop "breakpoint-hit" "foo" "" ".*until.c" 10 \
      { "" "disp=\"keep\"" } "run to main"

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

}

proc test_until {} {
    global mi_gdb_prompt
    global hex fullname_syntax srcfile

    setup_kfail gdb/2104 "*-*-*"
    mi_execute_to "exec-until" "end-stepping-range" "foo" "" ".*until.c" "12" "" \
        "until after while loop"

    mi_execute_to "exec-until 15" "location-reached" "foo" "" ".*until.c" "15" ""\
        "until line number"

    mi_execute_to "exec-until until.c:17" "location-reached" "foo" "" ".*until.c" "17" ""\
        "until line number:file"

    # This is supposed to NOT stop at line 25. It stops right after foo is over.
    mi_execute_to "exec-until until.c:25" "location-reached" "main" "" ".*until.c" "(23|24)" ""\
        "until after current function"
}

test_running_to_foo
test_until

mi_gdb_exit
return 0
