# Copyright 1992, 1994-1995, 1999, 2002, 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 Fred Fish. (fnf@cygnus.com)

gdb_exit
gdb_start

gdb_test_no_output "set pagination off"
gdb_test "show pagination" "State of pagination is off.*" "pagination is off"
gdb_test_sequence "help" "unpaged help" {
    "List of classes of commands:"
    ""
    "aliases -- Aliases of other commands"
    "breakpoints -- Making program stop at certain points"
    "data -- Examining data"
    "files -- Specifying and examining files"
    "internals -- Maintenance commands"
    "obscure -- Obscure features"
    "running -- Running the program"
    "stack -- Examining the stack"
    "status -- Status inquiries"
    "support -- Support facilities"
    "tracepoints -- Tracing of program execution without stopping the program"
    "user-defined -- User-defined commands"
    ""
    "Type .help. followed by a class name for a list of commands in that class."
    "Type .help. followed by command name for full documentation."
    "Command name abbreviations are allowed if unambiguous."
}


gdb_test_no_output "set pagination on"
gdb_test "show pagination" "State of pagination is on.*" "pagination is on"
gdb_test_no_output "set height 10"
send_gdb "help\n"
gdb_expect_list "paged help" \
	".*---Type <return> to continue, or q <return> to quit---" {
    "List of classes of commands:"
    ""
    "aliases -- Aliases of other commands"
    "breakpoints -- Making program stop at certain points"
    "data -- Examining data"
    "files -- Specifying and examining files"
    "internals -- Maintenance commands"
    "obscure -- Obscure features"
    "running -- Running the program"
}
gdb_test "q"


gdb_exit
return 0

