# Copyright (C) 2011-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 is part of the GDB testsuite.  It tests the mechanism
# exposing values to Python.

if {[skip_shlib_tests]} {
	untested py-finish-breakpoint.exp
    return 0
}

load_lib gdb-python.exp

set libfile "py-events-shlib"
set libsrc  $srcdir/$subdir/$libfile.c
set lib_sl  [standard_output_file $libfile-nodebug.so]
set lib_opts ""

standard_testfile
set exec_opts [list debug shlib=$lib_sl]

if [get_compiler_info] {
    return -1
}

if { [gdb_compile_shlib $libsrc $lib_sl $lib_opts] != ""
     || [gdb_compile $srcdir/$subdir/$srcfile $binfile executable $exec_opts] != ""} {
    untested "Could not compile either $libsrc or $srcdir/$subdir/$srcfile."
    return -1
}

# Start with a fresh gdb.
clean_restart ${testfile}

if { [skip_python_tests] } { continue }

if { $gdb_py_is_py24 == 1 } {
    # Python 2.4, 2.5 do not support the "ValueError as e" syntax used in
    # the py-finish-breakpoint.py script.
	untested py-finish-breakpoint.exp
    return 0
}

set python_file ${srcdir}/${subdir}/${testfile}.py


# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

#
# Test FinishBreakpoint in normal conditions
#

clean_restart ${testfile}
gdb_load_shlibs ${lib_sl}

if ![runto_main] then {
    fail "Cannot run to main."
    return 0
}

gdb_test_no_output "set confirm off" "disable confirmation"
gdb_test "source $python_file" "Python script imported.*" \
         "import python scripts"
gdb_breakpoint "increase_1"
gdb_test "continue" "Breakpoint .*at.*" "continue to the function to finish"

# set FinishBreakpoint

gdb_test "python finishbp_default = gdb.FinishBreakpoint ()" \
         "Temporary breakpoint.*" "set FinishBreakpoint with default frame value"
gdb_test "python finishbp = MyFinishBreakpoint (gdb.parse_and_eval ('a'), gdb.newest_frame ())" \
         "Temporary breakpoint.*" "set FinishBreakpoint"
gdb_test "python print (finishbp.return_value)" "None.*" \
         "check return_value at init"

# check normal bp hit

gdb_test "continue" "MyFinishBreakpoint stop with.*return_value is: -5.*#0.*increase.*" \
         "check MyFinishBreakpoint hit"
gdb_test "python print (finishbp.return_value)" "-5.*" "check return_value"

gdb_test "python print (finishbp_default.hit_count)" "1.*" "check finishBP on default frame has been hit"
gdb_test "python print (finishbp.is_valid())" "False.*"\
         "ensure that finish bp is invalid afer normal hit"

# check FinishBreakpoint in main no allowed

gdb_test "finish" "main.*" "return to main()"
gdb_test "python MyFinishBreakpoint (None, gdb.selected_frame ())" \
         "ValueError: \"FinishBreakpoint\" not meaningful in the outermost frame..*" \
         "check FinishBP not allowed in main"

#
# Test FinishBreakpoint with no debug symbol 
#

clean_restart ${testfile}
gdb_load_shlibs ${lib_sl}

gdb_test "source $python_file" "Python script imported.*" \
         "import python scripts"
set cond_line [gdb_get_line_number "Condition Break."]

if ![runto_main] then {
    fail "Cannot run to main."
    return 0
}

gdb_test "print do_nothing" "no debug info.*" "ensure that shared lib has no debug info"
gdb_breakpoint "do_nothing" {temporary}
gdb_test "continue" "Temporary breakpoint .*in \\.?do_nothing.*" \
         "continue to do_nothing"

gdb_test "python finishBP = SimpleFinishBreakpoint(gdb.newest_frame())" \
         "SimpleFinishBreakpoint init" \
         "set finish breakpoint"
gdb_test "continue" "SimpleFinishBreakpoint stop.*" "check FinishBreakpoint hit"
gdb_test "python print (finishBP.return_value)" "None" "check return value without debug symbol"

#
# Test FinishBreakpoint in function returned by longjmp 
#

clean_restart ${testfile}
gdb_load_shlibs ${lib_sl}

gdb_test "source $python_file" "Python script imported.*" \
         "import python scripts"

if ![runto call_longjmp_1] then {
    perror "couldn't run to breakpoint call_longjmp"
    continue
}

gdb_test "python finishbp = SimpleFinishBreakpoint(gdb.newest_frame())" \
         "SimpleFinishBreakpoint init" \
         "set finish breakpoint" 
gdb_test "break [gdb_get_line_number "after longjmp."]" "Breakpoint.* at .*" \
         "set BP after the jump"
gdb_test "continue" "SimpleFinishBreakpoint out of scope.*" \
         "check FinishBP out of scope notification"
gdb_test "python print (finishbp.is_valid())" "False.*"\
         "ensure that finish bp is invalid afer out of scope notification"

#
# Test FinishBreakpoint in BP condition evaluation 
# (finish in dummy frame)
#

clean_restart ${testfile}
gdb_load_shlibs ${lib_sl}

gdb_test "source $python_file" "Python script imported.*" \
         "import python scripts"


if ![runto_main] then {
    fail "Cannot run to main."
    return 0
}
         
gdb_test "break ${cond_line} if test_1(i,8)" "Breakpoint .* at .*" \
         "set a conditional BP"
gdb_test "python TestBreakpoint()" "TestBreakpoint init" \
         "set FinishBP in a breakpoint condition"
gdb_test "continue" \
         "\"FinishBreakpoint\" cannot be set on a dummy frame.*" \
         "don't allow FinishBreakpoint on dummy frames"
gdb_test "print i" "8" "check stopped location"

#
# Test FinishBreakpoint in BP condition evaluation 
# (finish in normal frame)
#

clean_restart ${testfile}
gdb_load_shlibs ${lib_sl}

gdb_test "source $python_file" "Python script imported.*" \
         "import python scripts"

if ![runto_main] then {
    fail "Cannot run to main."
    return 0
}

gdb_test "break ${cond_line} if test(i,8)" \
         "Breakpoint .* at .*" "set conditional BP"
gdb_test "python TestBreakpoint()" "TestBreakpoint init" "set BP in condition"

gdb_test "continue" \
         "test don't stop: 1.*test don't stop: 2.*test stop.*Error in testing breakpoint condition.*The program being debugged stopped while in a function called from GDB.*" \
         "stop in condition function"

gdb_test "continue" "Continuing.*" "finish condition evaluation"
gdb_test "continue" "Breakpoint.*" "stop at conditional breakpoint"
gdb_test "print i" "8" "check stopped location"

#
# Test FinishBreakpoint in explicit inferior function call
#

clean_restart ${testfile}
gdb_load_shlibs ${lib_sl}

gdb_test "source $python_file" "Python script imported.*" \
         "import python scripts"

if ![runto_main] then {
    fail "Cannot run to main."
    return 0
}

# return address in dummy frame

gdb_test "python TestExplicitBreakpoint('increase_1')" "Breakpoint.*at.*" \
         "prepare TestExplicitBreakpoint"
gdb_test "print increase_1(&i)" \
         "\"FinishBreakpoint\" cannot be set on a dummy frame.*" \
         "don't allow FinishBreakpoint on dummy frames"

# return address in normal frame

delete_breakpoints
gdb_test "python TestExplicitBreakpoint(\"increase_1\")" "Breakpoint.*at.*" \
         "prepare TestExplicitBreakpoint"
gdb_test "print increase(&i)" \
         "SimpleFinishBreakpoint init.*SimpleFinishBreakpoint stop.*The program being debugged stopped while in a function called from GDB.*" \
         "FinishBP stop at during explicit function call"


#
# Test FinishBreakpoint when inferior exits
#

if ![runto "test_exec_exit"] then {
    fail "Cannot run to test_exec_exit."
    return 0
}

gdb_test_no_output "set var self_exec = 0" "switch to exit() test"
gdb_test "python SimpleFinishBreakpoint(gdb.newest_frame())" "SimpleFinishBreakpoint init" "set FinishBP after the exit()"
gdb_test "continue" "SimpleFinishBreakpoint out of scope.*" "catch out of scope after exit"

#
# Test FinishBreakpoint when inferior execs
#

if ![runto "test_exec_exit"] then {
    fail "Cannot run to test_exec_exit."
    return 0
}     

gdb_test "python SimpleFinishBreakpoint(gdb.newest_frame())" "SimpleFinishBreakpoint init" "set FinishBP after the exec"
gdb_test "catch exec" "Catchpoint.*\(exec\).*" "catch exec"
gdb_test "continue" "SimpleFinishBreakpoint out of scope.*" "catch out of scope after exec"
