# 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
set MIFLAGS "-i=mi0"

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=\"\[01\]\",frame=\{addr=\"$hex\",func=\"main\",args=\{\},file=\".*mi-console.c\",line=\"13\"\}\r\n$mi_gdb_prompt$" {
	    pass "run to main"
    }
    -re ".*$mi_gdb_prompt$" {
	fail "run to main (2)"
    }
    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
