# Copyright 2015-2024 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 is part of the gdb testsuite.

# Test the setting of "history size" via the GDBHISTSIZE environment variable


# We cannot expect remote hosts to see environment variables set on the
# local machine.
require {!is_remote host}

# Check that the history size is properly set to SIZE when the environment
# variable ENV_VAR is set to GDBHISTSIZE.

proc test_histsize_history_setting { histsize size { env_var "GDBHISTSIZE" } } {
    global env

    save_vars { env(GDBHISTFILE) env(GDBHISTSIZE) env($env_var) } {
	# These environment variables take precedence over whatever
	# history size is set in .gdbinit.  Make sure the former is not
	# set.
	unset -nocomplain env(GDBHISTFILE)
	unset -nocomplain env(GDBHISTSIZE)

	# Ensure we don't accidentally pick up a .gdb_history from the
	# testsuite directory.
	set env(GDBHISTFILE) [standard_output_file .gdb_history]

	set env($env_var) $histsize

	with_test_prefix "histsize=$histsize" {
	    gdb_exit
	    gdb_start

	    gdb_test "show history size" "The size of the command history is $size."

	    if { $size == "0" } {
		gdb_test_no_output "show commands"
	    } elseif { $size != "1" } {
		gdb_test "show commands" \
		         "    .  show history size\r\n    .  show commands"
	    }
        }
    }
}

test_histsize_history_setting "" "unlimited"
test_histsize_history_setting "0" "0"
test_histsize_history_setting "20" "20"
test_histsize_history_setting " 20 " "20"
test_histsize_history_setting "-5" "unlimited"

# Test defaulting to 256 upon encountering a non-numeric GDBHISTSIZE.
test_histsize_history_setting "not_an_integer" "256"
test_histsize_history_setting "10zab" "256"
test_histsize_history_setting "-5ab" "256"

# A huge number (hopefully larger than INT_MAX)
test_histsize_history_setting "99999999999999999999999999999999999" "unlimited"

# We no longer read HISTSIZE
test_histsize_history_setting "50" "256" "HISTSIZE"
