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

# 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"
# Make sure the history ends up in the right place.
gdb_test_no_output "set history filename [standard_output_file .gdb_history]" \
    "set the 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} \
	{$_exception = <error: No frame selected>} \
	{$_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)"
	}
    }
}
#history saving should stay disabled
gdb_test_no_output "set history save off" "set history save off"
#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
