# Copyright 1999-2003, 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 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=mi2"

gdb_exit
if [mi_gdb_start] {
    continue
}

standard_testfile mi-console.c

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested mi2-console.exp
     return -1
}

mi_run_to_main

# Next over the hello() call which will produce lots of output
mi_gdb_test "220-exec-next" "220\\^running(\r\n)?(\\*running,thread-id=\"all\")?" \
	"Started step over hello"

if { ![target_info exists gdb,noinferiorio] } {
    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.

	    kfail "gdb/623" "Hello message"
	}
	timeout {
	    fail "Hello message (timeout)"
	}
    }
}

mi_expect_stop "end-stepping-range" "main" "" ".*mi-console.c" "14" "" \
    "finished step over hello"

mi_gdb_exit
return 0
