# Copyright 1992, 1994, 1996-1998, 2001, 2003, 2007-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/>.

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


set testfile "setshow"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable {debug}] != "" } {
     untested setshow.exp
     return -1
}

# Start with a fresh gdb

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

# make sure $pc is sane, in case we're talking to a board.
if { ![runto_main] } {
    gdb_suppress_tests;
}

#
# 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.*"  "set annotate 1" 
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_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\"..*" "show 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
gdb_test "set check range on" ".*" "set 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)" 
#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)"

# Test set check type on
gdb_test "set check type on" ".*" "set check type on"

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

# Test set check type off with trailing space
gdb_test_no_output "set check type off " "set check type off"

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

#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.*"  "show environment FOOBARBAZ" 
#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..*" "show height" 
# back to infinite height to avoid pagers
gdb_test_no_output "set height 0" ""
#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" 
#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 \"foobar.baz\"..*"  "show history filename (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)" 
#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 "set language asm" ".*" "set language asm" 
#test show language asm
gdb_test "show language" "The current source language is \"asm\"..*" "show language (asm)" 
#test set language java, with a trailing space
gdb_test_no_output "set language java " "set language java"
#test show language java
gdb_test "show language" "The current source language is \"java\"..*" "show language (java)" 
#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..*"  "set radix 11" 
#test set radix 16
gdb_test "set radix 16" "Input and output radices now set to decimal 16, hex 10, octal 20..*"  "set radix 16" 
#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)" 
