# Copyright 1999, 2000, 2001 Cygnus Solutions.

# 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 essential Machine interface (MI) operations
#
# Verify that, using the MI, we can run a simple program and perform basic
# debugging activities like: insert breakpoints, run the program,
# step, next, continue until it ends and, last but not least, quit.
#
# The goal is not to test gdb functionality, which is done by other tests,
# but to verify the correct output response to MI operations.
#

# This test only works when talking to a target that routes its output
# through GDB.  Check that we're either talking to a simulator or a
# remote target.

load_lib mi-support.exp

gdb_exit
if [mi_gdb_start] {
    continue
}

set testfile "mi-console"
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_load ${binfile}

# Halt in main
mi_gdb_test "200-break-insert main" \
	"200\\^done,bkpt=\{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$hex\",func=\"main\",file=\".*mi-console.c\",line=\"13\",times=\"0\"\}" \
	"break-insert operation"
mi_run_cmd
gdb_expect {
    -re "000\\*stopped,reason=\"breakpoint-hit\",bkptno=\"1\",thread-id=\"0\",frame=\{addr=\"$hex\",func=\"main\",args=\{\},file=\".*mi-console.c\",line=\"13\"\}\r\n$mi_gdb_prompt$" {
	    pass "run to main"
    }
    timeout {
	fail "run to main (timeout)"
    }
}

# Next over the hello() call which will produce lots of output
send_gdb "47-exec-next\n"
gdb_expect {
    -re "47\\^running\r\n$mi_gdb_prompt" {
	pass "Started step over hello"
    }
    timeout {
	fail "Started step over hello (timeout)"
    }
}

gdb_expect {
    -re "@\"H\"\r\n.*@\"e\"\r\n.*@\"l\"\r\n.*@\"l\"\r\n.*@\"o\"\r\n.*@\" \"\r\n.*@\"\\\\\\\\\"\r\n.*@\"\\\\\"\"\r\n.*@\"!\"\r\n.*@\"\\\\r\"\r\n.*@\"\\\\n\"\r\n" {
	pass "Hello message"
    }
    -re "Hello" {

	# Probably a native system where GDB doesn't have direct
	# control over the inferior console.
	# For this to work, GDB would need to run the inferior process
	# under a PTY and then use the even-loops ability to wait on
	# multiple event sources to channel the output back through the
	# MI.

	fail "Hello message (known bug)"
    }
    timeout {
	fail "Hello message (timeout)"
    }
}
    
gdb_expect {
    -re "47\\*stopped.*$mi_gdb_prompt$" {
	pass "Finished step over hello"
    }
    timeout {
	fail "Finished step over hello (timeout)"
    }
}

mi_gdb_exit
return 0

# Local variables: 
# change-log-default-name: "ChangeLog-mi"
# End: 
