#   Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999,
#   2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010
#   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/>.

# Start with a fresh gdb

gdb_exit
gdb_start

set prev_timeout $timeout
set timeout 60

#
# test default actions of gdb commands
#

#load_lib gdb.exp

gdb_test "add-symbol-file" "add-symbol-file takes a file name and an address" "add-symbol-file"

# test append
gdb_test "append" "\"append\" must be followed by a subcommand\.\[\r\n\]+List of append subcommands:.*" 
gdb_test "append binary" "\"append binary\" must be followed by a subcommand\.\[\r\n\]+List of append binary subcommands:.*" 
gdb_test "append memory" "Missing filename\." 
gdb_test "append value"  "Missing filename\." 
gdb_test "append binary memory" "Missing filename\." 
gdb_test "append binary value"  "Missing filename\." 

setup_xfail "mips-idt-*"
gdb_test_multiple "attach" "attach" {
    -re "Argument required .(process-id|program) to attach.*$gdb_prompt $"\
	{ pass "attach" }
    -re "You can't do that when your target is `None'.*$gdb_prompt $"\
	{ pass "attach" }
    -re "You can't do that without a process to debug.*$gdb_prompt $"\
	{ pass "attach" }
    -re "Don't know how to attach.  Try \"help target\"..*$gdb_prompt $"\
	{ pass "attach" }
    -re "Kill it. .y or n." {
	send_gdb "y\n"
	exp_continue
    }
}

if ![target_info exists use_gdb_stub] {
    gdb_test "break" "No default breakpoint address now." "break"
    foreach i "b br bre brea" {
	gdb_test $i "No default breakpoint address now." "break \"$i\" abbreviation"
    }

    
    setup_xfail "mips-idt-*"
    gdb_test "backtrace" "No stack."

    # ba and bac are no longer unique command prefixes. So these tests
    # elict an error from GDB.
    # GDB needs to be fixed to map unique alias here for ba bac.
    #
    foreach i "bt ba bac" {
	setup_xfail "mips-idt-*"
	gdb_test $i "No stack." "backtrace \"$i\" abbreviation"
    }
} else {
    warning "Skipping backtrace and break tests because of GDB stub."
}

# This works on the MIPS IDT board, but confuses future tests.
if ![istarget "mips-idt-*"] then {
    gdb_test "continue" "The program is not being run." "continue"
    gdb_test "c" "The program is not being run." "continue \"c\" abbreviation"
}

#test call
gdb_test "call" "The history is empty..*" "call"


#test catch
gdb_test "catch" "Catch requires an event name..*" "catch"

#test cd
gdb_test "cd" "Argument required .new working directory.*" "cd"

#test clear
gdb_test "clear" "No source file specified..*" "clear"

#test commands
gdb_test "commands" "Argument required .one or more breakpoint numbers...*" "commands"

#test condition
gdb_test "condition" "Argument required .breakpoint number.*" "condition"

#test core-file
gdb_test "core-file" "No core file now.|GDB can't read core files on this machine." "core-file"
#test delete "d" abbreviation
gdb_test_no_output "d" "delete \"d\" abbreviation"
#test delete
gdb_test_no_output "delete" "delete"
#test define
gdb_test "define" "Argument required \[(\]name of command to define\[)\]." "define"
#test delete breakpoints
gdb_test_no_output "delete breakpoints" "delete breakpoints"
#test delete display
# FIXME -- need to dump full output to detailed log

gdb_test "delete display" \
    "" \
    "delete display prompt" \
    "Delete all auto-display expressions.*y or n. $" \
    "y"


#test detach
gdb_test "detach" ".*" "detach"

if [istarget "h8300-*-hms"] then {
    gdb_exit
    gdb_start
}

#test directory
# FIXME -- need to dump full output to detailed log

gdb_test "directory" \
    "Source directories searched: .cdir\[:;\].cwd.*" \
    "directory prompt" \
    "Reinitialize source path to empty.*y or n. $" \
    "y"

#test disable "dis" abbreviation
gdb_test_no_output "dis" "disable \"dis\" abbreviation"
#test disable "disa" abbreviation
gdb_test_no_output "disa" "disable \"disa\" abbreviation"
#test disable
gdb_test_no_output "disable" "disable"
#test disable breakpoints
gdb_test_no_output "disable breakpoints" "disable breakpoints"
#test disable display
gdb_test_no_output "disable display" "disable display"
#test disassemble
gdb_test "disassemble" "No frame selected." "disassemble"
#test display
gdb_test_no_output "display" "display"
#test do
gdb_test "do" "No stack." "do"
#test document
gdb_test "document" "Argument required .name of command to define.*" "document"
#test down
gdb_test "down" "No stack.*" "down"
#test down-silently
gdb_test "down-silently" "No stack." "down-silently"
# test dump
gdb_test "dump" "\"dump\" must be followed by a subcommand\.\[\r\n\]+List of dump subcommands:.*" 
gdb_test "dump binary" "\"dump binary\" must be followed by a subcommand\.\[\r\n\]+List of dump binary subcommands:.*" 
gdb_test "dump ihex" "\"dump ihex\" must be followed by a subcommand\.\[\r\n\]+List of dump ihex subcommands:.*" 
gdb_test "dump memory" "Missing filename\." 
gdb_test "dump srec" "\"dump srec\" must be followed by a subcommand\.\[\r\n\]+List of dump srec subcommands:.*" 
gdb_test "dump tekhex" "\"dump tekhex\" must be followed by a subcommand\.\[\r\n\]+List of dump tekhex subcommands:.*" 
gdb_test "dump value" "Missing filename\." 
gdb_test "dump binary memory" "Missing filename\." 
gdb_test "dump binary value"  "Missing filename\." 
gdb_test "dump ihex memory" "Missing filename\." 
gdb_test "dump ihex value"  "Missing filename\." 
gdb_test "dump srec memory" "Missing filename\." 
gdb_test "dump srec value"  "Missing filename\." 
gdb_test "dump tekhex memory" "Missing filename\." 
gdb_test "dump tekhex value"  "Missing filename\." 
#test echo
gdb_test_no_output "echo" "echo"
#test enable breakpoints delete
gdb_test "enable breakpoints delete" "Argument required .one or more breakpoint numbers.*" "enable breakpoints delete"
#test enable breakpoints once
gdb_test "enable breakpoints once" "Argument required .one or more breakpoint numbers.*" "enable breakpoints once"
#test enable breakpoints
gdb_test_no_output "enable breakpoints" "enable breakpoints"
#test enable delete
gdb_test "enable delete" "Argument required .one or more breakpoint numbers.*" "enable delete"
#test enable display
gdb_test_no_output "enable display" "enable display"
#test enable once
gdb_test "enable once" "Argument required .one or more breakpoint numbers.*" "enable once"
#test enable
gdb_test_no_output "enable" "enable"
#test exec-file
send_gdb "exec-file\n"
gdb_expect {
    -re "No executable file now..*$gdb_prompt $" {
	pass "exec-file"
    }
    -re "exec-file.*A program is being debugged already.  Kill it. .y or n.*$" {
	send_gdb "n\n"
	if $verbose>1 then {
	    send_user "\tDidn't kill program being debugged\n"
	}
	gdb_expect -re "$gdb_prompt $" { }
	pass "exec-file"
    }
    -re "$gdb_prompt $"	{ fail "exec-file" }
    timeout		{ fail "(timeout) exec-file" }
}

#test frame "f" abbreviation
gdb_test "f" "No stack." "frame \"f\" abbreviation"
#test frame
gdb_test "frame" "No stack." "frame"
#test fg
gdb_test "fg" "The program is not being run." "fg"
# FIXME: fg kills the udi connection
#test file
send_gdb "file\n"
gdb_expect {
    -re "No executable file now..*$gdb_prompt $"\
	    { pass "file" }
    -re ".*A program is being debugged already.  Kill it. .y or n.*$" {
	send_gdb "n\n"
	if $verbose>1 then {
	    send_user "\t\tDidn't kill program being debugged\n"
	}
	gdb_expect -re "$gdb_prompt $" { }
	pass "file"
    }
    -re ".*$gdb_prompt $"	{ fail "file" }
    timeout		{ fail "(timeout) file" }
}

#test finish
gdb_test "finish" "The program is not being run." "finish"
#test forward-search
# The message here comes from the regexp library, not gdb, and so can
# vary on different systems.
gdb_test "forward-search" "No previous regular expression.*|There is no previous regular expression.*" "forward-search"
#test gcore

gdb_test_multiple "gcore" "gcore" {
    -re "You can\'t do that without a process to debug.*$gdb_prompt $" {
	pass "gcore"
    }
    -re "Undefined command: .*$gdb_prompt $" {
	pass "gcore"
    }
}

gdb_test_multiple "generate-core-file" "generate-core-file" {
    -re "You can\'t do that without a process to debug.*$gdb_prompt $" {
	pass "generate-core-file"
    }
    -re "Undefined command: .*$gdb_prompt $" {
	pass "generate-core-file"
    }
}

#test help "h" abbreviation
gdb_test "h" "List of classes of commands:(\[^\r\n\]*\[\r\n\])+aliases -- Aliases of other commands(\[^\r\n\]*\[\r\n\])+breakpoints -- Making program stop at certain points(\[^\r\n\]*\[\r\n\])+data -- Examining data(\[^\r\n\]*\[\r\n\])+files -- Specifying and examining files(\[^\r\n\]*\[\r\n\])+obscure -- Obscure features(\[^\r\n\]*\[\r\n\])+running -- Running the program(\[^\r\n\]*\[\r\n\])+stack -- Examining the stack(\[^\r\n\]*\[\r\n\])+status -- Status inquiries(\[^\r\n\]*\[\r\n\])+support -- Support facilities(\[^\r\n\]*\[\r\n\])+user-defined -- User-defined commands(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by a class name for a list of commands in that class.(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by command name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "help \"h\" abbreviation"
#test help
gdb_test "help" "List of classes of commands:(\[^\r\n\]*\[\r\n\])+aliases -- Aliases of other commands(\[^\r\n\]*\[\r\n\])+breakpoints -- Making program stop at certain points(\[^\r\n\]*\[\r\n\])+data -- Examining data(\[^\r\n\]*\[\r\n\])+files -- Specifying and examining files(\[^\r\n\]*\[\r\n\])+obscure -- Obscure features(\[^\r\n\]*\[\r\n\])+running -- Running the program(\[^\r\n\]*\[\r\n\])+stack -- Examining the stack(\[^\r\n\]*\[\r\n\])+status -- Status inquiries(\[^\r\n\]*\[\r\n\])+support -- Support facilities(\[^\r\n\]*\[\r\n\])+user-defined -- User-defined commands(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by a class name for a list of commands in that class.(\[^\r\n\]*\[\r\n\])+Type \"help\" followed by command name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "help"
#test handle
gdb_test "handle" "Argument required .signal to handle.*" "handle"
#test info "i" abbreviation 
gdb_test "i" "\"info\" must be followed by the name of an info command.(\[^\r\n\]*\[\r\n\])+List of info subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help info\" followed by info subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "info \"i\" abbreviation"
#test info
gdb_test "info" "\"info\" must be followed by the name of an info command.(\[^\r\n\]*\[\r\n\])+List of info subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help info\" followed by info subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "info"
#test ignore
gdb_test "ignore" "Argument required .a breakpoint number.*" "ignore"
#test info address
gdb_test "info address" "Argument required." "info address"
#test info all-registers
gdb_test "info all-registers" "The program has no registers now." "info all-registers"
#test info args
gdb_test "info args" "No frame selected." "info args"
#test info bogus-gdb-command
gdb_test "info bogus-gdb-command" "Undefined info command: \"bogus-gdb-command\".  Try \"help info\".*" "info bogus-gdb-command"
#test info breakpoints
gdb_test "info breakpoints" "No breakpoints or watchpoints." "info breakpoints"
#test info catch
gdb_test "info catch" "No frame selected." "info catch"
#test info copying
# FIXME -- doesn't work worth a shit
#send_gdb "info copying"
#	-re "GNU GENERAL PUBLIC LICENSE.*#of preserving the free status of all derivatives of our free software and.*#of promoting the sharing and reuse of software generally."# 
gdb_test "info copying"
#	}
#
#
#test info display
gdb_test "info display" "There are no auto-display expressions now." "info display"
#test info frame "f" abbreviation
gdb_test "info f" "No stack.*|No selected frame.*" "info frame \"f\" abbreviation"
#test info frame
gdb_test "info frame" "No stack.|No selected frame." "info frame"
#test info files
gdb_test_no_output "info files" "info files"
#test info float
gdb_test "info float" "The program has no registers now." "info float"
#test info functions
gdb_test "info functions" "All defined functions:" "info functions"
#test info locals
gdb_test "info locals" "No frame selected." "info locals"
#test info program
gdb_test "info program" "The program being debugged is not being run." "info program"
#test info registers
gdb_test "info registers" "The program has no registers now." "info registers"
#test info stack "s" abbreviation
gdb_test "info s" "No stack." "info stack \"s\" abbreviation"
#test info stack
gdb_test "info stack" "No stack." "info stack"
#test info set
# Test improved to check three parts:
# 1) confirm
# 2) prompt
# 3) write
# And only succeed if all three are matched.
# This should fix an old problem on native solaris 2.8,
# where this test fails due to this line:
#  prompt:  Gdb's prompt is "(gdb) ".^M
set set_confirm_seen 0
set set_prompt_seen 0
gdb_test_multiple "info set" "info set" {
    -re "confirm:  Whether to confirm potentially dangerous operations is o\[a-z\]*.(\[^\r\n\]*\[\r\n\])+history filename:  The filename in which to record the command history is (\[^\r\n\]*\[\r\n\])+listsize:  Number of source lines gdb will list by default is 10" {
	verbose "Confirm dislayed"
	set set_confirm_seen 1
	exp_continue
    }
    -re "Gdb's prompt is \"$gdb_prompt \"" {
	verbose "GDB prompt displayed"
	set set_prompt_seen 1
	exp_continue
    }
    -re "Writing into executable.*$gdb_prompt $" {
	verbose "write displayed"
	if { $set_prompt_seen && $set_confirm_seen } {
	    pass "info set"
	} else {
	    verbose "prompt $set_prompt_seen confirm $set_confirm_seen"
	    fail "info set (incomplete output)"
	}
    }
}
gdb_test "info symbol" "Argument required .address.."
#test info source
gdb_test  "info source" "No current source file..*" "info source"
#test info sources
gdb_test "info sources" "No symbol table is loaded.  Use the \"file\" command.*" "info sources"
#test info target
gdb_test_no_output "info target" "info target"
#test info terminal
gdb_test "info terminal" "No saved terminal information." "info terminal"
#test info types
gdb_test "info types" "All defined types:" "info types"
#test info variables
gdb_test "info variables" "All defined variables:" "info variables"
#test info vector
gdb_test "info vector" "The program has no registers now." "info vector"
#test info warranty
gdb_test "info warranty" "15. *Disclaimer of Warranty.*" "info warranty"
#test info watchpoints
gdb_test "info watchpoints" "No watchpoints." "info watchpoints"
#test inspect
gdb_test "inspect" "The history is empty." "inspect"
#test jump
gdb_test "jump" "The program is not being run." "jump"
#test kill
gdb_test "kill" "The program is not being run." "kill"
#test list "l" abbreviation
gdb_test "l" "No symbol table is loaded.  Use the \"file\" command.*" "list \"l\" abbreviation"
#test list
gdb_test "list" "No symbol table is loaded.  Use the \"file\" command.*" "list"
#test load
# The ``takes a file name'' case is for vxgdb.
# The ``Use the "file" command'' case is for newer GDB versions which try
# to deduce the filename from the exec file.
gdb_test "load" "You can't do that when your target is `None'.*|The load command takes a file name.*|Must specify at least a file name with the load command.*|.*Use the .file. or .exec-file. command.*" "load"
#test next "n" abbreviation
gdb_test "n" "The program is not being run." "next \"n\" abbreviation"
#test next
gdb_test "next" "The program is not being run." "next"
#test nexti "ni" abbreviation
gdb_test "ni" "The program is not being run." "nexti \"ni\" abbreviation"
#test nexti
gdb_test "nexti" "The program is not being run." "nexti"
#test output
gdb_test "output" "Argument required .expression to compute.*" "output"

#test overlay
gdb_test "overlay" "\"overlay\" must be followed by the name of .*"
#test a non-existant overlay subcommand
gdb_test "overlay on"     "Undefined overlay command.* Try \"help overlay\"."
gdb_test_no_output "overlay manual" "overlay manual #1"
gdb_test_no_output "overlay auto"
gdb_test_no_output "overlay off"
gdb_test "overlay list"   "No sections are mapped."
gdb_test "overlay map"    "Overlay debugging not enabled.*" "overlay map #1"
gdb_test "overlay unmap"  "Overlay debugging not enabled.*" "overlay unmap #1"
gdb_test_no_output "overlay manual" "overlay manual #2"
gdb_test "overlay map"    "Argument required: name of an overlay section." "overlay map #2"
gdb_test "overlay unmap"  "Argument required: name of an overlay section." "overlay unmap #2"

#test print "p" abbreviation
gdb_test "p" "The history is empty." "print \"p\" abbreviation"
#test print
gdb_test "print" "The history is empty." "print"
#test printf
gdb_test "printf" "Argument required .format-control string and values to print.*" "printf"
#test ptype
gdb_test "ptype" "The history is empty." "ptype"
#test pwd
gdb_test "pwd" "Working directory .*" "pwd"

#test run "r" abbreviation
if [istarget "*-*-vxworks*"] then {
    gdb_test "set args" ".*" "" 

    gdb_test "r" "Starting program: .*
You must specify a function name to run, and arguments if any"\
		"run \"r\" abbreviation"
    gdb_test "set args main" ".*" "" 

} else {
    gdb_test_multiple "r" "run \"r\" abbreviation" {
	-re "Starting program:  .*You can't do that when your target is `None'.*$gdb_prompt $"\
	    { pass "run \"r\" abbreviation" }
	-re "Starting program:  .*No executable file specified.*Use the \"file\" or \"exec-file\" command.*$gdb_prompt $"\
	    { pass "run \"r\" abbreviation" }
	-re "Starting program:  .*No executable specified, use .target exec.\\..*$gdb_prompt $"\
	    { pass "run \"r\" abbreviation" }
	-re "Starting program:  .*No image loaded into target.*$gdb_prompt $"\
	    { pass "run \"r\" abbreviation" }
	-re "Starting program:  .*No program loaded.*$gdb_prompt $"\
	    { pass "run \"r\" abbreviation" }
	-re "Don't know how to run.  Try \"help target\"..*$gdb_prompt $"\
	    { pass "run \"r\" abbreviation" }
    }
}

#test run
if [istarget "*-*-vxworks*"] then {
    gdb_test "set args" ".*" "" 

    gdb_test "run" "Starting program: .*
You must specify a function name to run, and arguments if any"
    gdb_test "set args main" ".*" "" 

} else {
    gdb_test_multiple "run" "run" {
	-re "Starting program:.*You can't do that when your target is `None'.*$gdb_prompt $"\
	    { pass "run" }
	-re "Starting program:  .*No executable file specified.*Use the \"file\" or \"exec-file\" command.*$gdb_prompt $"\
	    { pass "run" }
	-re "Starting program:  .*No executable specified, use .target exec.\\..*$gdb_prompt $"\
	    { pass "run" }
	-re "Starting program:  .*No image loaded into target.*$gdb_prompt $"\
	    { pass "run" }
	-re "Starting program:  .*No program loaded.*$gdb_prompt $"\
	    { pass "run" }
	-re "Don't know how to run.  Try \"help target\"..*$gdb_prompt $"\
	    { pass "run" }
    }
}

#test rbreak
gdb_test "rbreak" "rbreak"

# test restore
gdb_test "restore" "You can't do that without a process to debug\."

#test return
# The middle case accomodated the obsolete a29k, where doing the "ni"
# above causes an initial stack to be created.
gdb_test "return" "No selected frame..*" "return"  "Make .* return now.*y or n. $" "y"


#test reverse-search
gdb_test "reverse-search" "No previous regular expression.*|There is no previous regular expression.*" "reverse-search"
#test step "s" abbreviation
gdb_test "s" "The program is not being run." "step \"s\" abbreviation #1"
#test step
gdb_test "step" "The program is not being run." "step #1"
#test search
gdb_test "search" "No previous regular expression.*|There is no previous regular expression.*" "search"
#test section
gdb_test "section" "Must specify section name and its virtual address.*" "section"
#test set annotate
gdb_test "set annotate" "Argument required .integer to set it to.*" "set annotate"
#test set args
gdb_test_no_output "set args" "set args"
#test set check "c" abbreviation
gdb_test "set c" "\"set check\" must be followed by the name of a check subcommand.(\[^\r\n\]*\[\r\n\])+List of set check subcommands:(\[^\r\n\]*\[\r\n\])+set check range -- Set range checking(\[^\r\n\]*\[\r\n\])+set check type -- Set type checking(\[^\r\n\]*\[\r\n\])+Type \"help set check\" followed by set check subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set check \"c\" abbreviation"
#test set check "ch" abbreviation
gdb_test "set ch" "\"set check\" must be followed by the name of a check subcommand.(\[^\r\n\]*\[\r\n\])+List of set check subcommands:(\[^\r\n\]*\[\r\n\])+set check range -- Set range checking(\[^\r\n\]*\[\r\n\])+set check type -- Set type checking(\[^\r\n\]*\[\r\n\])+Type \"help set check\" followed by set check subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set check \"ch\" abbreviation"
#test set check
gdb_test "set check" "\"set check\" must be followed by the name of a check subcommand.(\[^\r\n\]*\[\r\n\])+List of set check subcommands:(\[^\r\n\]*\[\r\n\])+set check range -- Set range checking(\[^\r\n\]*\[\r\n\])+set check type -- Set type checking(\[^\r\n\]*\[\r\n\])+Type \"help set check\" followed by set check subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set check"
#test set check range
gdb_test "set check range" ".*" "set check range"
#test set check type
gdb_test "set check type" ".*" "set check type"
#test set complaints
gdb_test "set complaints" "Argument required .integer to set it to.*" "set complaints"
#test set confirm
gdb_test_no_output "set confirm" "set confirm"
# Don't test set editing. What if we're talking to a gdb that
# won't do editing correctly while we're talking to it?
# gdb_test "set editing" "" "set editing"

#test set environment
gdb_test "set environment" "Argument required .environment variable and value.*" "set environment"
#test set height
gdb_test "set height" "Argument required .integer to set it to.*" "set height"
#test set history expansion
gdb_test_no_output "set history expansion" "set history expansion"
#test set history filename
gdb_test "set history filename" "Argument required .filename to set it to.*" "set history filename"
#test set history save
gdb_test_no_output "set history save" "set history save"
#test set history size
gdb_test "set history size" "Argument required .integer to set it to.*" "set history size"
#test set history
gdb_test "set history" "\"set history\" must be followed by the name of a history subcommand.(\[^\r\n\]*\[\r\n\])+List of set history subcommands:(\[^\r\n\]*\[\r\n\])+set history expansion -- Set history expansion on command input(\[^\r\n\]*\[\r\n\])+set history filename -- Set the filename in which to record the command history(\[^\r\n\]*\[\r\n\])+set history save -- Set saving of the history record on exit(\[^\r\n\]*\[\r\n\])+set history size -- Set the size of the command history(\[^\r\n\]*\[\r\n\])+Type \"help set history\" followed by set history subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set history"
#test set language
gdb_test "set language" "Requires an argument. Valid arguments are auto, local, unknown, ada, c, c.., asm, minimal, d, fortran, objective-c, java, modula-2, opencl, pascal." "set language"
#test set listsize
gdb_test "set listsize" "Argument required .integer to set it to.*" "set listsize"
#test set print "p" abbreviation
gdb_test "set p" "\"set print\" must be followed by the name of a print subcommand.(\[^\r\n\]*\[\r\n\])+List of set print subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help set print\" followed by set print subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set print \"p\" abbreviation"
#test set print "pr" abbreviation
gdb_test "set pr" "\"set print\" must be followed by the name of a print subcommand.(\[^\r\n\]*\[\r\n\])+List of set print subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help set print\" followed by set print subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set print \"pr\" abbreviation"
#test set print
gdb_test "set print" "\"set print\" must be followed by the name of a print subcommand.(\[^\r\n\]*\[\r\n\])+List of set print subcommands:(\[^\r\n\]*\[\r\n\])+Type \"help set print\" followed by set print subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set print"
#test set print address
gdb_test_no_output "set print address" "set print address"
#test set print array
gdb_test_no_output "set print array" "set print array"
#test set print asm-demangle
gdb_test_no_output "set print asm-demangle" "set print asm-demangle"
#test set print demangle
gdb_test_no_output "set print demangle" "set print demangle"
#test set print elements
gdb_test "set print elements" "Argument required .integer to set it to.*" "set print elements"
#test set print object
gdb_test_no_output "set print object" "set print object"
#test set print pretty
gdb_test_no_output "set print pretty" "set print pretty"
#test set print sevenbit-strings
gdb_test_no_output "set print sevenbit-strings" "set print sevenbit-strings"
#test set print union
gdb_test_no_output "set print union" "set print union"
#test set print vtbl
gdb_test_no_output "set print vtbl" "set print vtbl"
# FIXME -- need a test for "set prompt"
#test set radix
gdb_test "set radix" "Input and output radices now set to decimal 10, hex a, octal 12.*" "set radix"
#test set symbol-reloading
gdb_test_no_output "set symbol-reloading" "set symbol-reloading"
#test set variable
gdb_test "set variable" "Argument required .expression to compute.*" "set variable"
#test set verbose
gdb_test_no_output "set verbose" "set verbose"
#test set width
gdb_test "set width" "Argument required .integer to set it to.*" "set width"
#test set write
# This is only supported on targets which use exec.o.
gdb_test_no_output "set write" "set write"
#test set
gdb_test "set" "Argument required .expression to compute.*" "set"
#test shell echo Hi dad!
gdb_test "shell echo Hi dad!" "Hi dad!" "shell echo Hi dad!"
#test show annotate
gdb_test "show annotate" "Annotation_level is 0." 	 "show annotate"
#test show args
gdb_test "show args" "Argument list to give program being debugged when it is started is \"\"." "show args"
#test show check "c" abbreviation
gdb_test "show c" "range:  *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+type:  *Type checking is \"auto; currently off\".*" "show check \"c\" abbreviation"
#test show check "ch" abbreviation
gdb_test "show ch" "range: *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+type:  *Type checking is \"auto; currently off\"." "show check \"ch\" abbreviation"
#test show check
gdb_test "show check" "range:  *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+type:  *Type checking is \"auto; currently off\"." "show check"
#test show check range
gdb_test "show check range" "Range checking is \"auto; currently off\"." "show check range"
#test show check type
gdb_test "show check type" "Type checking is \"auto; currently off\"." "show check type"
#test show commands
gdb_test "show commands" ".*" "show commands"
#test show complaints
gdb_test "show complaints" "Max number of complaints about incorrect symbols is 0." "show complaints"
#test show confirm
gdb_test "show confirm" "Whether to confirm potentially dangerous operations is o\[a-z\]*." "show confirm"

#test show convenience
# This is tricker as there are multiple internal convenience vars and we
# can't assume any particular order.
gdb_test_list_exact "show convenience" "show convenience" \
    {[^\r\n]+[\r\n]+} \
    {[^\r\n]+} \
    { \
	{$_sdata = void} \
	{$_siginfo = void} \
	{$_thread = 0} \
    }

#test show directories
gdb_test "show directories" "Source directories searched: .cdir\[:;\].cwd" "show directories"
#test show editing
gdb_test "show editing" "Editing of command lines as they are typed is o\[a-z\]*." "show editing"
#test show height
gdb_test "show height" "Number of lines gdb thinks are in a page is.*" "show height"
#test show history expansion
gdb_test "show history expansion" "History expansion on command input is o\[a-z\]*.*" "show history expansion"
#test show history filename
gdb_test "show history filename" "The filename in which to record the command history is.*.gdb_history.*" "show history filename"
#test show history save
gdb_test "show history save" "Saving of the history record on exit is on." "show history save"
#test show history size
gdb_test "show history size" "The size of the command history is.*" "show history size"
#test show history
gdb_test "show history" "expansion:  *History expansion on command input is o(\[^\r\n\]*\[\r\n\])+filename:  *The filename in which to record the command history is.*.gdb_history(\[^\r\n\]*\[\r\n\])+save: *Saving of the history record on exit is o(\[^\r\n\]*\[\r\n\])+size: * The size of the command history is.*" "show history"
#test show language
gdb_test "show language" "The current source language is \"auto; currently c\"." "show language"
#test show listsize
gdb_test "show listsize" "Number of source lines gdb will list by default is 10." "show listsize"
#test show print "p" abbreviation
gdb_test "show p" ".*" "show p"
#test show print "pr" abbreviation
gdb_test "show pr" ".*" "show pr"
#test show print
gdb_test "show print" ".*" "show print"
#test show paths
gdb_test "show paths" "Executable and object file path:.*" "show paths"
#test show print address
gdb_test "show print address" "Printing of addresses is on." "show print address"
#test show print array
gdb_test "show print array" "Prettyprinting of arrays is on." "show print array"
#test show print asm-demangle
gdb_test "show print asm-demangle" "Demangling of C\[+\]+/ObjC names in disassembly listings is on." "show print asm-demangle"
#test show print demangle
gdb_test "show print demangle" "Demangling of encoded C\[+\]+/ObjC names when displaying symbols is on." "show print demangle"
#test show print elements
gdb_test "show print elements" "Limit on string chars or array elements to print is 200." "show print elements"
#test show print object
gdb_test "show print object" "Printing of object's derived type based on vtable info is on." "show print object"
#test show print pretty
gdb_test "show print pretty" "Prettyprinting of structures is on." "show print pretty"
#test show print sevenbit-strings
gdb_test "show print sevenbit-strings" "Printing of 8-bit characters in strings as .nnn is on." "show print sevenbit-strings"
#test show print union
gdb_test "show print union" "Printing of unions interior to structures is on." "show print union"
#test show print vtbl
gdb_test "show print vtbl" "Printing of C\[+\]+ virtual function tables is on." "show print vtbl"
#test show prompt
# In the FAIL case, can't just look for $gdb_prompt because that will match
# the output, rather than the prompt. So look for $gdb_prompt at the start
# of a line.
gdb_test "show prompt" "Gdb's prompt is \"$gdb_prompt \".*" "show prompt"
#test show radix
gdb_test "show radix" "Input and output radices set to decimal 10, hex a, octal 12." "show radix"
#test show symbol-reloading
gdb_test "show symbol-reloading" "Dynamic symbol table reloading multiple times in one run is on." "show symbol-reloading"
#test show user
gdb_test_no_output "show user" "show user"
#test show values
gdb_test_no_output "show values" "show values"
#test show verbose
gdb_test "show verbose" "Verbose printing of informational messages is o.*|Verbosity is off.*" "show verbose"
#test show version
gdb_test "show version" "GNU gdb \[0-9\.\]*(\[^\r\n\]*\[\r\n\])+Copyright \\(C\\) \[0-9\]* Free Software Foundation, Inc(\[^\r\n\]*\[\r\n\])+License GPLv3\\+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>(\[^\r\n\]*\[\r\n\])+This is free software: you are free to change and redistribute it.(\[^\r\n\]*\[\r\n\])+There is NO WARRANTY, to the extent permitted by law.  Type \"show copying\"(\[^\r\n\]*\[\r\n\])+and \"show warranty\" for details..*" "show version" 
#test show width
gdb_test "show width" "Number of characters gdb thinks are in a line is.*" "show width"
#test show write
# This is only supported on targets which use exec.o.
gdb_test "show write" "Writing into executable and core files is o.*" "show write"
#test show
set show_confirm_seen 0
set show_prompt_seen 0
gdb_test_multiple "show" "show" {
    -re "confirm:  *Whether to confirm potentially dangerous operations is on.(\[^\r\n\]*\[\r\n\])+history filename:  *The filename in which to record the command history is (\[^\r\n\]*\[\r\n\])+history save:  *Saving of the history record on exit is on.(\[^\r\n\]*\[\r\n\])+history size:  *The size of the command history is(\[^\r\n\]*\[\r\n\])+listsize:  *Number of source lines gdb will list by default is 10(\[^\r\n]*\[\r\n\])+print elements:  *Limit on string chars or array elements to print is 200." {
	verbose "Confirm dislayed"
	set show_confirm_seen 1
	exp_continue
    }
    -re "Gdb's prompt is \"$gdb_prompt \"" {
	verbose "GDB prompt displayed"
	set show_prompt_seen 1
	exp_continue
    }
    -re "Writing into executable.*$gdb_prompt $" {
	verbose "write displayed"
	if { $show_prompt_seen && $show_confirm_seen } {
	    pass "show"
	} else {
	    verbose "prompt $show_prompt_seen confirm $show_confirm_seen"
	    fail "show (incomplete output)"
	}
    }
}
#test stepi "si" abbreviation
gdb_test  "si" "The program is not being run." "stepi \"si\" abbreviation"
#test stepi
gdb_test "stepi" "The program is not being run." "stepi"
#test signal
gdb_test "signal" "The program is not being run." "signal"
#test source
gdb_test "source" "source command requires file name of file to source..*|No such file or directory.*" "source"
#test step "s" abbreviation
gdb_test "s" "The program is not being run." "step \"s\" abbreviation #2"
#test step
gdb_test "step" "The program is not being run." "step #2"
#test symbol-file
gdb_test "symbol-file" ".*" "symbol-file"

#test target child
gdb_test "target child" "Use the \"run\" command to start a Unix child process.*|Undefined target command: \"child\".  *Try \"help target\".*" "target child"

#test target procfs
gdb_test "target procfs" "Use the \"run\" command to start a Unix child process.*|Undefined target command: \"procfs\".  *Try \"help target\".*" "target procfs"

#test target core
send_gdb "target core\n"
gdb_expect {
    -re "No core file specified..*$gdb_prompt $" { pass "target core" }
    -re ".*A program is being debugged already.  Kill it. .y or n.*$" {
	send_gdb "n\n"
	if $verbose>1 then {
	    send_user "\t\tDidn't kill program being debugged\n"
	}
	gdb_expect -re "$gdb_prompt $" { }
	pass "target core"
    }
    -re "Undefined target command: \"core\".  Try \"help target\"..*$gdb_prompt $" { pass "target core" }
    -re ".*$gdb_prompt $"	{ fail "target core" }
    timeout		{ fail "(timeout) target core" }
}

#test target exec
send_gdb "target exec\n"
gdb_expect {
	-re "No executable file now..*$gdb_prompt $"\
			{ pass "target exec" }
	-re ".*A program is being debugged already.  Kill it. .y or n.*$" {
	    send_gdb "n\n"
	    if $verbose>1 then {
		send_user "\t\tDidn't kill program being debugged\n"
	    }
	    gdb_expect -re "$gdb_prompt $" { }
	    pass "target exec"
	}
	-re ".*$gdb_prompt $"	{ fail "target exec" }
	timeout		{ fail "(timeout) target exec" }
	}

#test target remote
if ![istarget "*-*-udi*"] then {
    send_gdb "target remote\n"
    gdb_expect {
	-re "To open a remote debug connection, you need to specify what.*serial.*device is attached to the remote system.*.e.g. .*$gdb_prompt $"\
			{ pass "target remote" }
	-re ".*A program is being debugged already.  Kill it. .y or n.*$" {
	    send_gdb "n\n"
	    if $verbose>1 then {
		send_user "\t\tDidn't kill program being debugged\n"
	    }
	    gdb_expect -re "$gdb_prompt $" { }
	    pass "target remote"
	}
	-re ".*$gdb_prompt $"	{ fail "target remote" }
	timeout		{ fail "(timeout) target remote" }
    }
}

#test target
gdb_test "target" "Argument required .target name.*" "target"
#test tbreak
gdb_test "tbreak" "No default breakpoint address now." "tbreak"
#test tty
gdb_test "tty" "Argument required .filename to set it to\..*" "tty"
#test until "u" abbreviation
gdb_test "u" "The program is not being run." "until \"u\" abbreviation"
#test until
gdb_test "until" "The program is not being run." "until"
#test undisplay
# FIXME -- need to dump full output to detailed log

gdb_test "undisplay" \
    "" \
    "undisplay prompt" \
    "Delete all auto-display expressions.*y or n. $" \
    "y"

#test unset environment

gdb_test "unset environment" \
    "" \
    "unset environment prompt" \
    "Delete all environment variables?.*y or n. $" \
    "y"

#test unset
gdb_test "unset" "\"unset\" must be followed by the name of an unset subcommand.(\[^\r\n\]*\[\r\n\])+List of unset subcommands:(\[^\r\n\]*\[\r\n\])+unset environment -- Cancel environment variable VAR for the program(\[^\r\n\]*\[\r\n\])+Type \"help unset\" followed by unset subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "unset"
#test up
#test up-silently
gdb_test "up-silently" "No stack." "up-silently"
#test watch
gdb_test "watch" "Argument required .expression to compute.*" "watch"
#test whatis
gdb_test "whatis" "The history is empty." "whatis"
#test where
gdb_test "where" "No stack." "where"
#test x
gdb_test "x" "Argument required .starting display address.*" "x"

gdb_exit

set timeout $prev_timeout
