# Copyright 2004 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# This file was written by Jeff Johnston. (jjohnstn@redhat.com)
#

if $tracelevel then {
	strace $tracelevel
}

load_lib "java.exp"

set testfile "jprint"
set srcfile ${srcdir}/$subdir/${testfile}.java
set binfile ${objdir}/${subdir}/${testfile}
if  { [compile_java_from_source ${srcfile} ${binfile} "-g"] != "" } {
    untested "Couldn't compile ${srcfile}"
    return -1
}

# Set the current language to java.  This counts as a test.  If it
# fails, then we skip the other tests.

proc set_lang_java {} {
    global gdb_prompt
    global binfile objdir subdir

    verbose "loading file '$binfile'"
    gdb_load $binfile

    send_gdb "set language java\n"
    gdb_expect {
	-re ".*$gdb_prompt $" {}
	timeout { fail "set language java (timeout)" ; return 0 }
    }

    return [gdb_test "show language" ".* source language is \"java\".*" \
	"set language to \"java\""]
}

set prms_id 0
set bug_id 0

# Start with a fresh gdb.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

gdb_test "set print sevenbit-strings" ".*"

if ![set_lang_java] then {
    # Ref PR gdb:java/1565.  Don't use the simpler "break jmisc.main".
    # As of 2004-02-24 it wasn't working and is being tested separatly.
    runto "\'${testfile}.main(java.lang.String\[\])\'"

    gdb_test "p jvclass.addprint(4,5,6)" "sum is 15\r\n.*" "unambiguous static call"

    gdb_test "next" ""
    gdb_test "next" ""

    gdb_test "p x.print(44)" "x is 44\r\n.*" "single argument print call"
    gdb_test "p x.print(22,33)" "y is 33\r\n.*" "double argument print call"
    gdb_test "call x.dothat(55)" "new value is 58\r\n.*= 62.*" "virtual fn call"
    gdb_test "p x.addprint(1,2,3)" "sum is 6\r\n.*" "inherited static call"
    gdb_test "call x.addk(44)" "adding k gives 121\r\n.*= 121.*" "inherited virtual fn call"
}
