# Copyright 1992, 2004, 2005, 2007, 2008, 2009 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/>.  */

# Test case for CLLbs15503
# This file was written by Sue Kimura (sue_kimura@hp.com)
# Rewritten by Michael Chastain (mec.gnu@mindspring.com)

if $tracelevel {
    strace $tracelevel
}

if { [skip_cplus_tests] } { continue }

# On SPU this test fails because the executable exceeds local storage size.
if { [istarget "spu*-*-*"] } {
        return 0
}

set testfile "bs15503"
set srcfile ${testfile}.cc
set binfile ${objdir}/${subdir}/${testfile}

if [get_compiler_info ${binfile}] {
    return -1
}

if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "debug c++"] != "" } {
    perror "Couldn't compile ${srcfile}"
    return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

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

# Set breakpoint on template function

gdb_test "break StringTest<wchar_t>::testFunction" \
    "Breakpoint $decimal at $hex: file .*${srcfile}, line $decimal."

gdb_test "continue" \
    ".*Breakpoint $decimal, StringTest<wchar_t>::testFunction \\(this=$hex\\).*" \
    "continue to StringTest<wchar_t>"

# Run to some random point in the middle of the function.

gdb_breakpoint [gdb_get_line_number "find position where blank needs to be inserted"]
gdb_continue_to_breakpoint "find position where blank needs to be inserted"

# Call some string methods.

gdb_test "print s.length()"		"\\$\[0-9\]+ = 42"
gdb_test "print s\[0\]"			"\\$\[0-9\]+ =.* 'I'"
gdb_test "print s\[s.length()-1\]"	"\\$\[0-9\]+ =.* 'g'"
gdb_test "print (const char *) s" \
    "\\$\[0-9\]+ = $hex \"I am a short stringand now a longer string\""

# TODO: tests that do not work with gcc 2.95.3
# -- chastain 2004-01-07
# 
# gdb_test "print s.compare(s)"		"\\$\[0-9\]+ = 0"
# gdb_test "print s.compare(\"AAA\")"     "\\$\[0-9\]+ = 1"
# gdb_test "print s.compare(\"ZZZ\")"     "\\$\[0-9\]+ = -1"

# TODO: tests that do not work with gcc 2.95.3 and gcc 3.3.2.
# cannot call overloaded non-member operator.  -- chastain 2004-01-07
# 
# gdb_test "print s == s"			"\\$\[0-9\]+ = true"
# gdb_test "print s > "AAA"			"\\$\[0-9\]+ = true"
# gdb_test "print s < "ZZZ"			"\\$\[0-9\]+ = true"

# TODO: GDB doesn't know to convert the string to a const char *, and
# instead tries to use the string as a structure initializer.
# 
# gdb_test "print s == \"I am a short stringand now a longer string\"" \
#     "\\$\[0-9\]+ = true"

gdb_test "print (const char *) s.substr(0,4)"	"\\$\[0-9\]+ = $hex \"I am\""
gdb_test "print (const char *) (s=s.substr(0,4))" \
    "\\$\[0-9\]+ = $hex \"I am\""

# TODO: cannot call overloaded non-member operator again.
# -- chastain 2004-01-07
# 
# gdb_test "print (const char *) (s + s)" \
#    "\\$\[0-9\]+ = $hex \"I amI am\""
# gdb_test "print (const char *) (s + \" \" + s)" \
#    "\\$\[0-9\]+ = $hex \"I am I am\""
