# Copyright 2003-2013 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/>.

# This file was written by Elena Zannoni (ezannoni@cygnus.com)


# are we on a target board? If so, don't run these tests.
# note: this is necessary because we cannot use runto_main (which would
# work for remote targets too) because of the different prompt we get
# when using annotation level 2.
#
if [is_remote target] then {
    return 0
}


#
# test running programs
#

standard_testfile .c

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


clean_restart ${binfile}

# The commands we test here produce many lines of output; disable "press 
# <return> to continue" prompts.
gdb_test_no_output "set height 0"

#
# break at main
#

set main_line [gdb_get_line_number "break main"]

gdb_test "break main" \
    "Breakpoint.*at.* file .*$srcfile, line $main_line\\." \
    "breakpoint main"


# NOTE: this prompt is OK only when the annotation level is > 1

# NOTE: When this prompt is in use the gdb_test procedure cannot be
# used because it assumes that the last char after the gdb_prompt is a
# white space. This is not true with this annotated prompt. So we must
# use send_gdb and gdb_expect or gdb_expect_list.

set old_gdb_prompt $gdb_prompt
set gdb_prompt "\r\n\032\032pre-prompt\r\n$gdb_prompt \r\n\032\032prompt\r\n"



#
# set the annotation level to 3
#
# of course, this will test:
# annotate-pre-prompt
# annotate-prompt
# annotate-post-prompt (in the next block)
#
send_gdb "set annotate 3\n" 
gdb_expect_list "annotation set at level 3" "\r\n$gdb_prompt$" {
    "set annotate 3"
}

#
# if construct:
#
gdb_test_multiple "if 1" "start if construct" {
    -re "^if 1\r\n\r\n\032\032post-prompt\r\n\r\n\032\032pre-commands\r\n >\r\n\032\032commands\r\n$" {
	pass "start if construct"
    }
}

gdb_test_multiple "end" "end if construct" {
    -re "^end\r\n\r\n\032\032post-commands\r\n$gdb_prompt$" {
 	pass "end if construct"
    }
}

#
# info break:
#
send_gdb "info break\n" 
gdb_expect_list "breakpoint info" "$gdb_prompt$" [concat {
    "\r\n\032\032post-prompt\r\n"
    "Num     Type           Disp Enb Address    +What\r\n" } [list \
    "1       breakpoint     keep y   0x\[0-9a-zA-Z\]+ +in main at .*annota3.c:$main_line\r\n"]]


#
# run to a break point will test:
#
#exp_internal 1
send_gdb "run\n"
gdb_expect_list "run until main breakpoint" "$gdb_prompt$" [concat {
    "\r\n\032\032post-prompt\r\n"
    "Starting program: .*annota3(|\.exe) \r\n"
    "\r\n\032\032starting\r\n"
    "\r\n\032\032breakpoint 1\r\n"
    "\r\n"
    "Breakpoint 1, "
    "\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n" } [list \
    "main \\(\\) at .*annota3.c:$main_line\r\n"] [list \
    "\r\n\032\032source.*annota3.c:$main_line:.*:beg:0x\[0-9a-z\]+\r\n"] {
    "\r\n\032\032stopped\r\n"
}]
#exp_internal 0
#exit 0

#
# Let's do a next, to get to a point where the array is initialized
# We don't care about the annotated output for this operation, it is the same as
# the one produced by run above
#
send_gdb "next\n" 
gdb_expect_list "go after array init line" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "\r\n\032\032starting\r\n"
    "\r\n\032\032source .*annota3.c:\[0-9\]+:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
    "\r\n\032\032stopped\r\n"
}


#
# printing the array:
#
send_gdb "print my_array\n"
gdb_expect_list "print array" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    ".*= .1, 2, 3.\r\n"
}


#
# this should generate an error message, so to test:
# annotate-error-begin
# FIXME: annotate-error not tested
#

#exp_internal 1
send_gdb "print non_existent_value\n"
gdb_expect_list "print non_existent_value" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "\r\n\032\032error-begin\r\n"
    "No symbol \"non_existent_value\" in current context.\r\n"
    "\r\n\032\032error\r\n"
}


#
# break at signal handler
#
send_gdb "break handle_USR1\n"
gdb_expect_list "breakpoint handle_USR1" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "Breakpoint.*at 0x\[0-9a-z\]+: file.*annota3.c, line.*\r\n"
}

#
# break at printf. When we are stopped at printf, we can test 
#
send_gdb "break printf\n"
gdb_expect_list "breakpoint printf" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "Breakpoint.*at 0x\[0-9a-z\]+.*"
}

#
# get to printf
#
send_gdb "continue\n"
gdb_expect_list "continue to printf" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "Continuing.\r\n"
    "\r\n\032\032starting\r\n"
    "\r\n\032\032breakpoint 3\r\n"
    "\r\n"
    "Breakpoint 3, \[^\r\n\]*\r\n"
    "\r\n\032\032stopped\r\n"
}

send_gdb "backtrace\n"
gdb_expect_list "backtrace from shlibrary" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "#0 .* .*printf(@\[^ ]*)? \[^\r\n\]*\r\n"
    "#1 .* main \[^\r\n\]*\r\n"
}


#
# test printing a frame with some arguments: 
#

if [target_info exists gdb,nosignals] {
    unsupported "send SIGUSR1"
    unsupported "backtrace @ signal handler"
} else {
    send_gdb "signal SIGUSR1\n"
    gdb_expect_list "send SIGUSR1" "$gdb_prompt$" {
	"\r\n\032\032post-prompt\r\n"
	"Continuing with signal SIGUSR1.\r\n"
	"\r\n\032\032starting\r\n"
	"\r\n\032\032breakpoint 2\r\n"
	"\r\n"
	"Breakpoint 2, "
	"\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n"
	"handle_USR1 \\(sig=\[0-9\]+\\) at .*annota3.c:\[0-9\]+\r\n"
	"\r\n\032\032source .*annota3.c:\[0-9\]+:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
	"\r\n\032\032stopped\r\n"
    }

    #
    # test:
    #
    send_gdb "backtrace\n"
    gdb_expect_list "backtrace @ signal handler" "$gdb_prompt$" {
	"#0 +handle_USR1 \[^\r\n\]+\r\n"
	"#1 +.signal handler called.\r\n"
	"#2 .* .*printf(@\[^ \]*)? \[^\r\n\]+\r\n"
	"#3 .* main \[^\r\n\]+\r\n"
    }
}

#
# delete all the breakpoints
#
send_gdb "delete 1\n"
gdb_expect_list "delete bp 1" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
}

send_gdb "delete 2\n"
gdb_expect_list "delete bp 2" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
}

send_gdb "delete 3\n"
gdb_expect_list "delete bp 3" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
}

#
# break at main, after value is initialized. This is in preparation
# to test the annotate output for the display command.
#
send_gdb "break main\n"
gdb_expect_list "break at main" "$gdb_prompt$" [concat {
    "\r\n\032\032post-prompt\r\n" } [list \
    "Breakpoint 4 at 0x\[0-9a-z\]+: file .*annota3.c, line $main_line.\r\n"]]

#
# display the value
#
send_gdb "display value\n"
gdb_expect_list "set up display" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "1: value = 7\r\n"
}


# should ask query. Test annotate-query.
# we don't care about anything else here, only the query.

send_gdb "run\n"
gdb_expect {
  -re "pre-query.*already.*\\(y or n\\).*query\r\n" {
         send_gdb "y\n"
         gdb_expect {
	     -re ".*post-query.*$gdb_prompt$" \
		     { pass "re-run" }
	     -re ".*$gdb_prompt$"  { fail "re-run" }
	     timeout { fail "re-run (timeout)" }
	 }
     }
  -re ".*$gdb_prompt$"  { fail "re-run" }
  timeout { fail "re-run (timeout)" }
}

#
# Test that breakpoints-invalid is issued once and only once for
# breakpoint ignore count changes, after annotation stopped.
# NOTE: breakpoints-invalid annotations have been removed from
# level 3 but keep these tests for continuity and comparison
# with annota1.exp.

set value_inc_line [gdb_get_line_number "increment value"]

send_gdb "break $value_inc_line\n"
gdb_expect_list  "break at value++" "$gdb_prompt$" [concat {
    "\r\n\032\032post-prompt\r\n" } [list \
    "Breakpoint 5 at 0x\[0-9a-z\]+: file .*annota3.c, line $value_inc_line.\r\n"]]

send_gdb "ignore 5 4\n"
gdb_expect_list "ignore 5 4" "$gdb_prompt$" {
    "\r\n\032\032post-prompt\r\n"
    "Will ignore next 4 crossings of breakpoint 5"
    "\r\n"
}

send_gdb "continue\n"
gdb_expect_list "annotate ignore count change" "$gdb_prompt$" [concat {
    "\r\n\032\032post-prompt\r\n"
    "\r\n\032\032breakpoint 5\r\n"
    "\r\n"
    "Breakpoint 5, "
    "\r\n\032\032frame-begin 0 0x\[0-9a-z\]+\r\n" } [list \
    "main \\(\\) at .*annota3.c:$value_inc_line\r\n"] [list \
    "\r\n\032\032source .*annota3.c:$value_inc_line:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"] {
    "1: value = 11\r\n"
    "\r\n\032\032stopped\r\n"
}]

# check that ignore command is working, or the above can provide
# misleading assurance ...

send_gdb "next\n"
gdb_expect_list "next to exit loop" "$gdb_prompt$"  {
    "\r\n\032\032post-prompt\r\n"
    "\r\n\032\032starting\r\n"
    "\r\n\032\032source.*annota3.c:\[0-9\]+:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"
    "1: value = 12\r\n"
    "\r\n\032\032stopped\r\n"
}

set after_loop_line [gdb_get_line_number "after loop"]

send_gdb "next\n"
gdb_expect_list "breakpoint ignore count" "$gdb_prompt$" [concat {
    "\r\n\032\032post-prompt\r\n"
    "\r\n\032\032starting\r\n" } [list \
    "\r\n\032\032source.*annota3.c:$after_loop_line:\[0-9\]+:beg:0x\[0-9a-z\]+\r\n"] {
    "1: value = 12\r\n"
    "\r\n\032\032stopped\r\n"
}]

# Get the inferior's PID for later.

set test "get inferior pid"
set pid -1
gdb_test_multiple "info inferior 1" "$test" {
    -re "process (\[0-9\]*).*$gdb_prompt$" {
	set pid $expect_out(1,string)
	pass "$test"
    }
}

#
# Send a signal that is not handled
#
# SIGTRAP signals are dropped before they get to the inferior process
# on hpux11.  In theory, this behaivor can be controlled by setting
# TTEO_NORM_SIGTRAP in the inferior, but doing so did not cause
# the signal to be properly delivered.
#
# It has been verified that other signals will be delivered.  However,
# rather than twiddle the test, I choose to leave it as-is as it
# exposes an interesting failure on hpux11.

if [target_info exists gdb,nosignals] {
    unsupported "signal sent"
} else {
    setup_xfail hppa*-*-hpux11*
    send_gdb "signal SIGTRAP\n"
    gdb_expect_list "signal sent" "$gdb_prompt$" {
	"\r\n\032\032post-prompt\r\n"
	"Continuing with signal SIGTRAP.\r\n"
	"\r\n\032\032starting\r\n"
	"\r\n\032\032signalled\r\n"
	"\r\nProgram terminated with signal SIGTRAP, Trace.breakpoint trap.\r\n"
	"The program no longer exists.\r\n"
	"\r\n\032\032stopped\r\n"
    }
}


# Check for production of a core file and remove it!

set test "cleanup core file"
if { [remote_file host exists core] } {
    remote_file host delete core
    pass "$test (removed)"
} elseif { $pid != -1 && [remote_file host exists core.$pid] } {
    remote_file host delete core.$pid
    pass "$test (removed)"
} else {
    pass "$test (not dumped)"
}

# restore the original prompt for the rest of the testsuite

set gdb_prompt $old_gdb_prompt
