# 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/>.

standard_testfile .c
set inputrc ${srcdir}/${subdir}/${testfile}.inputrc

if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {debug}] != "" } {
    untested ${testfile}.exp
    return -1
}

# INPUTRC gets reset for the next testfile.
setenv INPUTRC $inputrc
clean_restart ${binfile}

gdb_test_no_output "set width 50"
gdb_test_no_output "set height 3"

set cmd "p symbol_0"
send_gdb "$cmd\t"
set test "bell for more message"
gdb_test_multiple "" $test {
    -re "$cmd\007$" {
	pass $test
    }
}

send_gdb "\t"
set test "more message for 01 and 02"
gdb_test_multiple "" $test {
    -re "^\r\nsymbol_01_length_40_____________________\r\nsymbol_02_length_40_____________________\r\n--More--$" {
	pass $test
    }
    -re "$gdb_prompt " {
	fail $test
    }
}

# There get some VT100 characters printed.

send_gdb "\r"
set test "more message for 03"
gdb_test_multiple "" $test {
    -re "\rsymbol_03_length_40_____________________\r\n--More--$" {
	pass $test
    }
}

# "$gdb_prompt $" will not match as $cmd gets output: $gdb_prompt p symbol_0
# And "$gdb_prompt p symbol_0" cannot be matched as the default "$gdb_prompt $"
# string from gdb_test_multiple could match earlier.

send_gdb "\r"
set test "more finish for 04"
gdb_test_multiple "" $test {
    -re "\rsymbol_04_length_40_____________________\r\n$gdb_prompt " {
	pass $test
    }
}

gdb_test "foo" {No symbol "symbol_0foo" in current context\.} "abort more message"

set cmd "p symbol_"
send_gdb "$cmd\t"
set test "bell for ask message"
gdb_test_multiple "" $test {
    -re "$cmd\007$" {
	pass $test
    }
}

send_gdb "\t"
set test "ask message"
gdb_test_multiple "" $test {
    -re "^\r\nDisplay all 5 possibilities\\? \\(y or n\\)$" {
	pass $test
    }
    -re "$gdb_prompt " {
	fail $test
	return 0
    }
}

send_gdb "y"
set test "ask message for 01 and 02"
gdb_test_multiple "" $test {
    -re "^\r\nsymbol_01_length_40_____________________\r\nsymbol_02_length_40_____________________\r\n--More--$" {
	pass $test
    }
}

# There get some VT100 characters printed.
# See the "$gdb_prompt " match like in "more finish for 04".

send_gdb "n"
set test "ask message no"
gdb_test_multiple "" $test {
    -re "\r$gdb_prompt " {
	pass $test
    }
}

gdb_test "foo" {No symbol "symbol_foo" in current context\.} "abort ask message"
