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

# This file was written by Joel Brobecker (brobecker@gnat.com), derived
# from xfullpath.exp.


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

proc setup_test { executable } {
    global gdb_prompt
    global timeout
    global INTERNAL_GDBFLAGS

    # 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 $INTERNAL_GDBFLAGS" "$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
}
