# Copyright 1992-2021 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# This file was written by Michael Snyder (msnyder@cygnus.com)


standard_testfile .c

if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable {debug}] != "" } {
     untested "failed to compile"
     return -1
}

# Start with a fresh gdb

clean_restart ${binfile}

# make sure $pc is sane, in case we're talking to a board.
if ![runto_main] then {
    fail "can't run to main"
    return 0
}

#
# Test gdb set and show commands.
# Add tests here for show and set that don't fit neatly elsewhere.
# FIXME: many rudimentary tests for set and show commands have been
#        added below, but most do nothing more than check that a 
#        variable has been set successfully, ie. they do not test
#        whether setting the variable has had the desired effect.
#

#test default annotation_level is 0
gdb_test "show annotate" "Annotation_level is 0..*"  "default annotation_level is zero"

#test set annotate 2

# Here we need to fiddle with prompts.
set old_gdb_prompt $gdb_prompt
set gdb_prompt "\r\n\032\032pre-prompt\r\n$gdb_prompt \r\n\032\032prompt\r\n"

gdb_test_multiple "set annotate 2" "set annotate 2" {
    -re "\r\n$gdb_prompt$" {
	pass "set annotate 2"
    }
}

gdb_test_multiple "show annotate" "show annotate 2" {
    -re ".*\032\032post-prompt.*Annotation_level is 2..*\032\032pre-prompt.*$old_gdb_prompt .*\032\032prompt.*$" {
	pass "show annotate 2"
    }
}

#test annotation_level 2
gdb_test_multiple "info line 1" "annotation_level 2" {
    -re ".*\032\032post-prompt.*Line 1 of .* is at address .* but contains no code.*:1:0:beg:0x.*\032\032pre-prompt.*$old_gdb_prompt .*\032\032prompt.*$" {
	pass "annotation_level 2" 
    }
}

# Restore the original prompt for the rest of the testsuite.
set gdb_prompt $old_gdb_prompt

#test set annotate 1
gdb_test "set annotate 1" ".*post-prompt.*"
gdb_test "show annotate" "Annotation_level is 1..*"  "show annotate (1)" 
#test annotation_level 1
gdb_test "info line 1" "Line 1 of .* is at address .* but contains no code.*:1:0:beg:0x.*"  "annotation_level 1" 
#test set annotate 0
gdb_test_no_output "set annotate 0" "set annotate 0" 
gdb_test "show annotate" "Annotation_level is 0..*"  "show annotate (0)" 
#test annotation_level 0
gdb_test "info line 1" "Line 1 of .* is at address .* but contains no code.*"  "annotation_level 0" 

gdb_test "show args" "Argument list to give program being debugged when it is started is \"\"\."
gdb_test "p \$_gdb_setting_str(\"args\")" " = \"\""

gdb_test_no_output "set args ~"
gdb_test "show args" "Argument list to give program being debugged when it is started is \"~\"..*" \
    "show args ~"
#test set args
gdb_test_no_output "set args foo bar blup baz bubble" "set args" 
#test show args
gdb_test "show args" "Argument list to give program being debugged when it is started is \"foo bar blup baz bubble\"..*"
gdb_test "p \$_gdb_setting(\"args\")" " = \"foo bar blup baz bubble\"" \
    "_gdb_setting args"


# Don't test if we can't pass args or if we're using a stub.
if { !$use_gdb_stub && ![target_info exists noargs] } {
    #test passing args
    gdb_test "cont" "Continuing.*" "continuing"
    delete_breakpoints
    gdb_test "run" "Starting program:.*foo bar blup baz bubble.*" "passing args"
}
#test set check range on
# Note: the below might produce a warning, so match anything. 
gdb_test "set check range on" ""

gdb_test "p \$_gdb_setting(\"check range\")" " = \"on\"" \
    "_gdb_setting check range on"
#test show check range on
gdb_test "show check range" "Range checking is \"on\"\..*" "show check range (on)" 
#test set check range off with trailing space
gdb_test_no_output "set check range off " "set check range off" 
#test show check range off
gdb_test "show check range" "Range checking is \"off\"\..*" "show check range (off)" 
gdb_test "p \$_gdb_setting(\"check range\")" " = \"off\"" \
    "_gdb_setting check range off"
#test set check range auto
gdb_test_no_output "set check range auto" "set check range auto" 
#test show check range auto
gdb_test "show check range" "Range checking is \"auto; currently .*" "show check range (auto)"
gdb_test "p \$_gdb_setting(\"check range\")" " = \"auto\"" \
    "_gdb_setting check range auto"

# Test set check type on
gdb_test_no_output "set check type on"

# Test show check type on
gdb_test "show check type" "Strict type checking is on\..*" \
    "show check type (on)"
gdb_test "p \$_gdb_setting_str(\"check type\")" " = \"on\"" \
    "_gdb_setting_str check type on"
gdb_test "p \$_gdb_setting(\"check type\")" " = 1" \
    "_gdb_setting check type on 1"

# Test set check type off with trailing space
gdb_test_no_output "set check type off " "set check type off"
gdb_test "p \$_gdb_setting_str(\"check type\")" " = \"off\"" \
    "_gdb_setting_str check type off"
gdb_test "p \$_gdb_setting(\"check type\")" " = 0" \
    "_gdb_setting check type off 0"

# Test show check type off
gdb_test "show check type" "Strict type checking is off\..*" \
    "show check type (off)"

#test set breakpoint pending

#test set breakpoint pending on
gdb_test_no_output "set breakpoint pending on"
gdb_test "p \$_gdb_setting_str(\"breakpoint pending\")" " = \"on\"" \
    "_gdb_setting_str breakpoint pending on"
gdb_test "p \$_gdb_setting(\"breakpoint pending\")" " = 1" \
    "_gdb_setting breakpoint pending 1"

#test show breakpoint pending on
gdb_test "show breakpoint pending" " is on\..*" "show breakpoint pending on"

#test show breakpoint pending off
gdb_test_no_output "set breakpoint pending off"
gdb_test "show breakpoint pending" " is off\..*" "show breakpoint pending off"
gdb_test "p \$_gdb_setting_str(\"breakpoint pending\")" " = \"off\"" \
    "_gdb_setting_str breakpoint pending off"
gdb_test "p \$_gdb_setting(\"breakpoint pending\")" " = 0" \
    "_gdb_setting breakpoint pending 0"

#test set breakpoint pending auto
gdb_test_no_output "set breakpoint pending auto"

#test show breakpoint pending auto
gdb_test "show breakpoint pending" " is auto.*" "show breakpoint pending auto"
gdb_test "p \$_gdb_setting_str(\"breakpoint pending\")" " = \"auto\"" \
    "_gdb_setting_str breakpoint pending auto"
gdb_test "p \$_gdb_setting(\"breakpoint pending\")" " = -1" \
    "_gdb_setting breakpoint pending -1"



#test set complaints 100
gdb_test_no_output "set complaints 100" "set complaints 100" 
#test show complaints 100
gdb_test "show complaints" "Max number of complaints about incorrect symbols is 100..*" "show complaints (100)" 
#test set complaints 0
gdb_test_no_output "set complaints 0" "set complaints 0" 
#test show complaints 0
gdb_test "show complaints" "Max number of complaints about incorrect symbols is 0..*" "show complaints (0)" 
#test set confirm off
gdb_test_no_output "set confirm off" "set confirm off" 
#test show confirm off
gdb_test "show confirm" "Whether to confirm potentially dangerous operations is off..*" "show confirm (off)" 
#test set confirm on
gdb_test_no_output "set confirm on" "set confirm on" 
#test show confirm on
gdb_test "show confirm" "Whether to confirm potentially dangerous operations is on..*" "show confirm (on)" 
#test set editing off
gdb_test_no_output "set editing off" "set editing off" 
#test show editing off
gdb_test "show editing" "Editing of command lines as they are typed is off..*" "show editing (off)" 
#test set editing on
#gdb_test_no_output "set editing on" "set editing on" 
#test show editing on
#gdb_test "show editing" "Editing of command lines as they are typed is on..*" "show editing (on)" 
#test set environment FOOBARBAZ
gdb_test_no_output "set environment FOOBARBAZ = grbxgrbxgrbx" \
    "set environment FOOBARBAZ" 
#test show environment FOOBARBAZ
gdb_test "show environment FOOBARBAZ" "FOOBARBAZ = grbxgrbxgrbx.*"
#test set height 100
gdb_test_no_output "set height 100" "set height 100" 
#test show height 100
gdb_test "show height" "Number of lines gdb thinks are in a page is 100..*"
gdb_test "p \$_gdb_setting_str(\"height\")" " = \"100\"" \
    "_gdb_setting_str height 100"
gdb_test "p \$_gdb_setting(\"height\")" " = 100" \
    "_gdb_setting height 100"
# Back to infinite height to avoid pagers.  While at it, check that
# literal "unlimited" works just as well as 0.
gdb_test_no_output "set height unlimited"
gdb_test "p \$_gdb_setting_str(\"height\")" " = \"unlimited\"" \
    "_gdb_setting_str height unlimited"
gdb_test "p \$_gdb_setting(\"height\")" " = 0" \
    "_gdb_setting height unlimited"
#test set history expansion on
gdb_test_no_output "set history expansion on" "set history expansion on" 
#test show history expansion on
gdb_test "show history expansion on" "History expansion on command input is on.*" "show history expansion" 
#get home directory path
set HOME ""
set test "show environment HOME"
gdb_test_multiple $test $test {
    -re "\nHOME = (\[^\r\n\]*)\[\r\n\]+$gdb_prompt $" {
        set HOME $expect_out(1,string)
        pass $test
    }
}
#test set history filename ~/foobar.baz
gdb_test_no_output "set history filename ~/foobar.baz" \
    "set history filename ~/foobar.baz"
#test show history filename ~/foobar.baz
gdb_test "show history filename" \
    "The filename in which to record the command history is \"[string_to_regexp $HOME]/foobar.baz\"..*" \
    "show history filename (~/foobar.baz)"
gdb_test "p \$_gdb_setting(\"history filename\")" \
    " = \"[string_to_regexp $HOME]/foobar.baz\"..*" \
    "_gdb_setting history filename"
gdb_test "p \$_gdb_setting_str(\"history filename\")" \
    " = \"[string_to_regexp $HOME]/foobar.baz\"..*" \
    "_gdb_setting_str history filename"
#get current working directory
set PWD ""
set test "show working directory"
gdb_test_multiple "pwd" $test {
    -re "\nWorking directory (\[^\r\n\]*)\\.\[\r\n\]+$gdb_prompt $" {
        set PWD $expect_out(1,string)
        pass $test
    }
}
#test set history filename foobar.baz
gdb_test_no_output "set history filename foobar.baz" \
    "set history filename foobar.baz"
#test show history filename foobar.baz
gdb_test "show history filename" \
    "The filename in which to record the command history is \"[string_to_regexp $PWD]/foobar.baz\"..*" \
    "show history filename (current_directory/foobar.baz)"
#test set history save on
gdb_test_no_output "set history save on" "set history save on" 
#test show history save on
gdb_test "show history save" "Saving of the history record on exit is on..*"  "show history save (on)" 
#history saving should stay disabled
gdb_test_no_output "set history save off" "set history save off" 
#test set history size 100
gdb_test_no_output "set history size 100" "set history size 100" 
#test show history size 100
gdb_test "show history size" "The size of the command history is 100..*" "show history size (100)" 
#test set language asm
gdb_test_no_output "set language asm"
#test show language asm
gdb_test "show language" "The current source language is \"asm\"..*" "show language (asm)" 
#test set language rust, with a trailing space
gdb_test_no_output "set language rust " "set language rust"
#test show language rust
gdb_test "show language" "The current source language is \"rust\"..*" "show language (rust)" 
#test completion for set language.
gdb_test "complete set language min" "set language minimal" \
  "complete set language minimal"
#test set language auto
gdb_test_no_output "set language auto" "set language auto" 
#test show language
gdb_test "show language" "The current source language is \"auto.*\"..*" "show language (auto)" 
#test set listsize 100
gdb_test_no_output "set listsize 100" "set listsize 100" 
#test show listsize 100
gdb_test "show listsize" "Number of source lines gdb will list by default is 100..*" "show listsize (100)" 

if ![board_info target exists gdb_prompt] {
    #test set prompt (FooBarBaz) 
    set newprompt "\\(FooBarBaz\\)"

    gdb_test_multiple "set prompt (FooBarBaz) " "set prompt FooBarBaz" {
	-re "\[\r\n\]$newprompt $" {
	    pass "set prompt FooBarBaz"
	}
    }

    #test show prompt (FooBarBaz) 

    gdb_test_multiple "show prompt" "show prompt FooBarBaz" {
	-re "Gdb's prompt is \"$newprompt \"..* $" {
	    pass "show prompt FooBarBaz"
	}
    }

    #test set prompt (gdb) 

    gdb_test_multiple "set prompt (gdb) " "set prompt gdb" {
	-re "\[\r\n\]$gdb_prompt $" {
	    pass "set prompt gdb"
	}
    }
}

#test set radix 11
gdb_test "set radix 11" "Unsupported output radix ``decimal 11''; output radix unchanged..*"
#test set radix 16
gdb_test "set radix 16" "Input and output radices now set to decimal 16, hex 10, octal 20..*"
#test show radix 16
gdb_test "show radix" "Input and output radices set to decimal 16, hex 10, octal 20..*"  "show radix (16)" 
#test set radix 10
gdb_test "set radix" "Input and output radices now set to decimal 10, hex a, octal 12..*"  "set radix 10" 
#test show radix 10
gdb_test "show radix" "Input and output radices set to decimal 10, hex a, octal 12..*" "show radix (10)" 
#test set width 90
gdb_test_no_output "set width 90" "set width 90"
#test show width 90
gdb_test "show width" "Number of characters gdb thinks are in a line is 90..*" "show width (90)" 
#test set write on
# This is only supported on targets which use exec.o.
gdb_test_no_output "set write on" "set write on" 
#test show write on
# This is only supported on targets which use exec.o.
gdb_test "show write" "Writing into executable and core files is on..*" "show write (on)" 
#test show user
gdb_test_no_output "show user" "show user" 
#test set verbose on
gdb_test_no_output "set verbose on" "set verbose on" 
#test show verbose on
gdb_test "show verbose" "Verbose printing of informational messages is on..*" "show verbose (on)" 
#test set verbose off
gdb_test_no_output "set verbose off" "set verbose off" 
#test show verbose off
gdb_test "show verbose" "Verbosity is off..*" "show verbose (off)" 
#test argument must be preceded by space
foreach x {"history file" "solib-search-path" "data-directory"} {
    foreach y {"/home/" "~/home" "=home"} {
        gdb_test "set $x$y" "Argument must be preceded by space." \
            "$x is not set to $y"
    }
}
