#   Copyright 1988, 1990-1992, 1994-2003, 2005-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/>.

# 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\." 

if !$use_gdb_stub {
    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
	}
    }

    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"
    }

    
    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" {
	gdb_test $i "No stack." "backtrace \"$i\" abbreviation"
    }
} else {
    warning "Skipping backtrace and break tests because of GDB stub."
}

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" "Working directory \[^\r\n\]*\\."

#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." "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 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 threads
gdb_test "info threads" "No threads." "info threads"
#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 $use_gdb_stub {
    # Only extended-remote supports "run".
} elseif [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" }
	-re "Starting program:  .*Running the default executable on the remote target failed; try \"set remote exec-file\"?.*$gdb_prompt $"\
	    { pass "run \"r\" abbreviation" }
    }
}

#test run
if $use_gdb_stub {
    # Only extended-remote supports "run".
} elseif [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" }
	-re "Starting program:  .*Running the default executable on the remote target failed; try \"set remote exec-file\"?.*$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 abbreviations
foreach x {"c" "ch" "check"} {
    gdb_test "set $x" "\"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 strict 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 \"$x\" abbreviation"
}

#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, go, 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 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 abbreviations
foreach x {"c" "ch" "check"} {
    gdb_test "show $x" "range:  *Range checking is \"auto; currently off\".(\[^\r\n\]*\[\r\n\])+type:  *Strict type checking is on\..*" \
	"show check \"$x\" abbreviation"
}

#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" "Strict type checking is on\." "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 trickier as there are multiple internal convenience vars and
# functions and we can't assume any particular order.
# And we have to handle the extra convenience funs provided by Python.
set show_conv_list \
    { \
	{$_sdata = void} \
	{$_siginfo = void} \
	{$_thread = 0} \
	{$_probe_argc = <error: No frame selected>} \
	{$_probe_arg0 = <error: No frame selected>} \
	{$_probe_arg1 = <error: No frame selected>} \
	{$_probe_arg2 = <error: No frame selected>} \
	{$_probe_arg3 = <error: No frame selected>} \
	{$_probe_arg4 = <error: No frame selected>} \
	{$_probe_arg5 = <error: No frame selected>} \
	{$_probe_arg6 = <error: No frame selected>} \
	{$_probe_arg7 = <error: No frame selected>} \
	{$_probe_arg8 = <error: No frame selected>} \
	{$_probe_arg9 = <error: No frame selected>} \
	{$_probe_arg10 = <error: No frame selected>} \
	{$_probe_arg11 = <error: No frame selected>} \
    }
if ![skip_python_tests] {
    append show_conv_list \
	{
	    {$_memeq = <internal function _memeq>} \
	    {$_regex = <internal function _regex>} \
	    {$_streq = <internal function _streq>} \
	    {$_strlen = <internal function _strlen>} \
	}
}
gdb_test_list_exact "show convenience" "show convenience" \
    "\[^\r\n\]+\[\r\n\]+" \
    "\[^\r\n\]+" \
    $show_conv_list

#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 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 thread
gdb_test "thread" "No thread selected" "thread"
#test thread apply
gdb_test "thread apply" "Please specify a thread ID list" "thread apply"
#test thread find
gdb_test "thread find" "Command requires an argument." "thread find"
#test thread name
gdb_test "thread name" "No thread selected" "thread name"
#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
