#   Copyright 1988-2016 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\]*\(\r\n \\(canonically \[^\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"

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

#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".
} 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".
} 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, rust." "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} \
	{$_gthread = 0} \
	{$_inferior = 1} \
	{$_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>} \
	{$_isvoid = <internal function _isvoid>} \
    }
if ![skip_python_tests] {
    append show_conv_list \
	{
	    {$_memeq = <internal function _memeq>} \
	    {$_regex = <internal function _regex>} \
	    {$_streq = <internal function _streq>} \
	    {$_strlen = <internal function _strlen>} \
	    {$_as_string = <internal function _as_string>} \
	    {$_caller_is = <internal function _caller_is>} \
	    {$_caller_matches = <internal function _caller_matches>} \
	    {$_any_caller_is = <internal function _any_caller_is>} \
	    {$_any_caller_matches = <internal function _any_caller_matches>} \
	}
}
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" "Pretty formatting 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" "Pretty formatting 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 native
gdb_test "target native" "Use the \"run\" command to start a process.*|Undefined target command: \"native\".  *Try \"help target\".*" "target native"

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