# Copyright 2003, 2004, 2007, 2008, 2009, 2010, 2011
# 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 Joel Brobecker (brobecker@gnat.com), derived
# from xfullpath.exp.

if $tracelevel then {
    strace $tracelevel
}


# are we on a target board
if { [is_remote target] || ![isnative] } then {
    return
}

proc setup_test { executable } {
    global gdb_prompt
    global timeout

    # load yourself into the debugger
    # This can take a relatively long time, particularly for testing where
    # the executable is being accessed over a network, or where gdb does not
    # support partial symbols for a particular target and has to load the
    # entire symbol table.  Set the timeout to 10 minutes, which should be
    # adequate for most environments (it *has* timed out with 5 min on a
    # SPARCstation SLC under moderate load, so this isn't unreasonable).
    # After gdb is started, set the timeout to 30 seconds for the duration
    # of this test, and then back to the original value.

    set oldtimeout $timeout
    set timeout 600
    verbose "Timeout is now $timeout seconds" 2

    global gdb_file_cmd_debug_info
    set gdb_file_cmd_debug_info "unset"

    set result [gdb_load $executable]
    set timeout $oldtimeout
    verbose "Timeout is now $timeout seconds" 2

    if { $result != 0 } then {
	return -1
    }

    if { $gdb_file_cmd_debug_info != "debug" } then {
	untested "No debug information, skipping testcase."
	return -1
    }

    # Set a breakpoint at main
    gdb_test "break captured_main" \
            "Breakpoint.*at.* file.*, line.*" \
            "breakpoint in captured_main"

    # run yourself
    # It may take a very long time for the inferior gdb to start (lynx),
    # so we bump it back up for the duration of this command.
    set timeout 600

    set description "run until breakpoint at captured_main"
    gdb_test_multiple "run -nw" "$description" {
        -re "Starting program.*Breakpoint \[0-9\]+,.*captured_main .data.* at .*main.c:.*$gdb_prompt $" {
            pass "$description"
        }
        -re "Starting program.*Breakpoint \[0-9\]+,.*captured_main .data.*$gdb_prompt $" {
            xfail "$description (line numbers scrambled?)"
        }
        -re "vfork: No more processes.*$gdb_prompt $" {
            fail "$description (out of virtual memory)"
            set timeout $oldtimeout
            verbose "Timeout is now $timeout seconds" 2
            return -1
        }
        -re ".*$gdb_prompt $" {
            fail "$description"
            set timeout $oldtimeout
            verbose "Timeout is now $timeout seconds" 2
            return -1
        }
    }

    set timeout $oldtimeout
    verbose "Timeout is now $timeout seconds" 2

    return 0
}

proc attach_first_observer { message } {
    gdb_test_no_output "set \$first_obs = observer_attach_test_notification (&observer_test_first_notification_function)" \
	"$message; attach first observer"
}

proc attach_second_observer { message } {
    gdb_test_no_output "set \$second_obs = observer_attach_test_notification (&observer_test_second_notification_function)" \
	"$message; attach second observer"
}

proc attach_third_observer { message } {
    gdb_test_no_output "set \$third_obs = observer_attach_test_notification (&observer_test_third_notification_function)" \
	"$message; attach third observer"
}

proc detach_first_observer { message } {
    gdb_test_no_output "call observer_detach_test_notification (\$first_obs)" \
	"$message; detach first observer"
}

proc detach_second_observer { message } {
    gdb_test_no_output "call observer_detach_test_notification (\$second_obs)" \
	"$message; detach second observer"
}

proc detach_third_observer { message } {
    gdb_test_no_output "call observer_detach_test_notification (\$third_obs)" \
	"$message; detach third observer"
}

proc check_counters { first second third message } {
    gdb_test "print observer_test_first_observer" \
	".\[0-9\]+ =.*$first" \
	"$message; check first observer counter value"
    gdb_test "print observer_test_second_observer" \
	".\[0-9\]+ =.*$second" \
	"$message; check second observer counter value"
    gdb_test "print observer_test_third_observer" \
	".\[0-9\]+ =.*$third" \
	"$message; check third observer counter value"
}

proc reset_counters { message } {
    gdb_test_no_output "set variable observer_test_first_observer = 0" \
	"$message; reset first observer counter"
    gdb_test_no_output "set variable observer_test_second_observer = 0" \
	"$message; reset second observer counter"
    gdb_test_no_output "set variable observer_test_third_observer = 0" \
	"$message; reset third observer counter"
}

proc test_notifications { first second third message args } {
    # Do any initialization
    for {set i 0} {$i < [llength $args]} {incr i} {
	[lindex $args $i] $message
    }
    reset_counters $message
    # Call observer_notify_test_notification.  Note that this procedure
    # takes one argument, but this argument is ignored by the observer
    # callbacks we have installed.  So we just pass an arbitrary value.
    gdb_test_no_output "call observer_notify_test_notification (0)" \
	"$message; sending notification"
    check_counters $first $second $third $message
}

proc test_observer { executable } {

    set setup_result [setup_test $executable]
    if {$setup_result <0} then {
        return -1
    }

    # First, try sending a notification without any observer attached.
    test_notifications 0 0 0 "no observer attached"

    # Now, attach one observer, and send a notification.
    test_notifications 0 1 0 "second observer attached" \
	attach_second_observer

    # Remove the observer, and send a notification.
    test_notifications 0 0 0 "second observer detached" \
	detach_second_observer

    # With a new observer.
    test_notifications 1 0 0 "1st observer added" \
	attach_first_observer

    # With 2 observers.
    test_notifications 1 1 0 "2nd observer added" \
	attach_second_observer

    # With 3 observers.
    test_notifications 1 1 1 "3rd observer added" \
	attach_third_observer

    # Remove middle observer.
    test_notifications 1 0 1 "2nd observer removed" \
	detach_second_observer

    # Remove first observer.
    test_notifications 0 0 1 "1st observer removed" \
	detach_first_observer

    # Remove last observer.
    test_notifications 0 0 0 "3rd observer removed" \
	detach_third_observer

    # Go back to 3 observers, and remove them in a different order...
    test_notifications 1 1 1 "three observers added" \
	attach_first_observer \
	attach_second_observer \
	attach_third_observer 

    # Remove the third observer.
    test_notifications 1 1 0 "third observer removed" \
	detach_third_observer

    # Remove the second observer.
    test_notifications 1 0 0 "second observer removed" \
	detach_second_observer

    # Remove the first observer, no more observers.
    test_notifications 0 0 0 "first observer removed" \
	detach_first_observer

    return 0
}

# Find a pathname to a file that we would execute if the shell was asked
# to run $arg using the current PATH.

proc find_gdb { arg } {

    # If the arg directly specifies an existing executable file, then
    # simply use it.

    if [file executable $arg] then {
	return $arg
    }

    set result [which $arg]
    if [string match "/" [ string range $result 0 0 ]] then {
	return $result
    }

    # If everything fails, just return the unqualified pathname as default
    # and hope for best.

    return $arg
}

# Run the test with self.
# Copy the file executable file in case this OS doesn't like to edit its own
# text space.

set GDB_FULLPATH [find_gdb $GDB]

# Remove any old copy lying around.
remote_file host delete x$tool

gdb_start
set file [remote_download host $GDB_FULLPATH x$tool]
set result [test_observer $file];
gdb_exit;
catch "remote_file host delete $file";

if {$result <0} then {
    warning "Couldn't test self"
    return -1
}
