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

# Test the setting of "history size" via $HOME/.gdbinit

# This test depends on being able to set $HOME and $GDBHISTSIZE.
# We cannot expect remote hosts to see environment variables set on the
# local machine.

# Do not run if gdb debug is enabled - it interferes with the command history.
if [gdb_debug_enabled] {
    untested "debug is enabled"
    return 0
}

if { [is_remote host] } {
    unsupported "can't set environment variables on remote host"
    return -1
}

# Check that the history size is properly set to SIZE when reading the .gdbinit
# file located in HOME with the environment variable GDBHISTSIZE optionally
# set to GDBHISTSIZE_VAL.

proc test_gdbinit_history_setting { home size { gdbhistsize_val "-" } } {
    global env
    global INTERNAL_GDBFLAGS
    global srcdir
    global subdir

    save_vars { INTERNAL_GDBFLAGS env(GDBHISTFILE) env(GDBHISTSIZE) env(HOME) } {
	set env(HOME) "$srcdir/$subdir/$home"

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

	if { $gdbhistsize_val != "-" } {
	    set env(GDBHISTSIZE) $gdbhistsize_val
	}

	set INTERNAL_GDBFLAGS [string map {"-nx" ""} $INTERNAL_GDBFLAGS]

	set prefix "home=$home"
	if { $gdbhistsize_val != "-" } {
	    append prefix " gdbhistsize=$gdbhistsize_val"
	}

	with_test_prefix $prefix {
	    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"
	    }
	}
    }
}

# Check that the history file does not get truncated to zero when a gdbinit
# file sets the history size to unlimited.

proc test_no_truncation_of_unlimited_history_file { } {
    global env
    global INTERNAL_GDBFLAGS

    save_vars { INTERNAL_GDBFLAGS env(GDBHISTFILE) env(GDBHISTSIZE) } {
	# 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)

	set temp_gdbinit [standard_output_file "gdbinit-history.gdbinit"]
	set temp_histfile [standard_output_file "gdbinit-history.gdb_history"]
	file delete $temp_gdbinit
	file delete $temp_histfile

	set fd [open $temp_gdbinit "w"]
	puts $fd "set history size unlimited\n"
	puts $fd "set history filename $temp_histfile\n"
	puts $fd "set history save\n"
	close $fd

	append INTERNAL_GDBFLAGS " -x $temp_gdbinit"

	# We have to start then exit GDB twice: the first time to test the creation
	# of the initial history file, and the second time to test appending to it.
	# In either case the initial "print 1" command should persist through the
	# history file.
	with_test_prefix "truncation" {
	    gdb_exit
	    gdb_start
	    gdb_test "print 1"

	    with_test_prefix "creating" {
		gdb_exit
		gdb_start
		gdb_test "server show commands" "    .  print 1.*"
	    }

	    with_test_prefix "appending" {
		gdb_exit
		gdb_start
		gdb_test "server show commands" "    .  print 1.*"
	    }
        }
    }
}

# Check that the current command history matches HIST, which is a list
# of commands, oldest fist.
proc check_history { hist } {

    # The show commands we issue here always appears last in the
    # commands list.
    lappend hist "show commands"

    # Number all of the entries in the HIST list and convert the list
    # into a pattern to match against GDB.
    set hist_lines [list]
    set idx 1
    foreach h $hist {
	lappend hist_lines "    $idx  $h"
	incr idx
    }
    if { [llength $hist_lines] == 1 } {
	set pattern [lindex $hist_lines 0]
    } else {
	set pattern [eval multi_line $hist_lines]
    }

    # Check the history.
    gdb_test "show commands" "$pattern.*"
}

# Run 'show history filename' and check the output contains the
# filename matching PATTERN, unless, PATTERN is the empty string, in
# which case match a different output that GDB will give if the
# history filename is the empty string.
#
# TESTNAME is the name for the test, which defaults to the command run
# in the test.
proc check_history_filename { pattern {testname ""} } {

    set cmd "show history filename"
    if { $testname == "" } {
	set testname $cmd
    }

    if { $pattern == "" } {
	gdb_test $cmd \
	    "There is no filename currently set for recording the command history in." \
	    $testname
    } else {
	gdb_test $cmd \
	    "The filename in which to record the command history is \"$pattern\"\." \
	    $testname
    }
}

# Tests for how GDB handles setting the history filename to the empty
# string.
proc test_empty_history_filename { } {
    global env
    global gdb_prompt

    set common_history [list "set height 0" "set width 0"]

    set test_dir [standard_output_file history_test]
    remote_exec host "mkdir -p $test_dir"
    foreach entry { { ".gdb_history" "xxxxx" } \
			{ "_gdb_history" "xxxxx" } \
			{ "alt_history" "yyyyy" } } {
	set fn [lindex $entry 0]
	set content [lindex $entry 1]
	set fd [open [standard_output_file "$test_dir/$fn"] w]
	puts $fd "$content"
	close $fd
    }

    with_cwd "$test_dir" {
	with_test_prefix "load default history file" {
	    # Start GDB and see that the history file was loaded
	    # correctly.
	    gdb_exit
	    gdb_start
	    check_history [concat "xxxxx" $common_history]
	    check_history_filename ".*/.gdb_history"
	}

	with_test_prefix "load GDBHISTFILE history file" {
	    # Now restart GDB with GDBHISTFILE set to see that the
	    # "other" history file is loaded.
	    save_vars { env(GDBHISTFILE) } {
		setenv GDBHISTFILE \
		    "$test_dir/alt_history"
		gdb_exit
		gdb_start
		check_history [concat "yyyyy" $common_history]
		check_history_filename ".*/alt_history"
	    }
	}

	with_test_prefix "GDBHISTFILE is empty" {
	    # Now restart GDB with GDBHISTFILE set to indicate don't
	    # load any history file, check none was loaded.
	    save_vars { env(GDBHISTFILE) } {
	    setenv GDBHISTFILE ""
		gdb_exit
		gdb_start
		check_history $common_history
		check_history_filename ""
	    }

	    # Check that 'show history save' does the right thing when
	    # the history filename is the empty string.
	    gdb_test_no_output "set history save off" \
		"ensure history save is off initially"
	    gdb_test "show history save" \
		"Saving of the history record on exit is off." \
		"Check history save is off"
	    gdb_test_no_output "set history save on"
	    gdb_test "show history save" \
		"Saving of the history is disabled due to the value of 'history filename'." \
		"Check history save is off due to filename"
	    gdb_test_no_output \
		"set history filename $test_dir/alt_history" \
		"set history filename at the command line"
	    check_history_filename ".*/alt_history" \
		"check filename after setting at the command line"
	    gdb_test "show history save" \
		"Saving of the history record on exit is on." \
		"Check history save is on"
	    gdb_test_no_output "set history filename"
	    gdb_test "show history save" \
		"Saving of the history is disabled due to the value of 'history filename'." \
		"Check history save is off due to filename again"
	    gdb_test_no_output "set history save off"
	}

	with_test_prefix "Use -ex to clear history file" {
	    # Now restart GDB with the command line '-ex' to indicate
	    # no history file should be loaded.
	    gdb_exit
	    if {[gdb_spawn_with_cmdline_opts \
		     "-ex \"set history filename\""] != 0} {
		fail "spawn"
		return
	    }
	    set test "initial prompt"
	    gdb_test_multiple "" $test {
		-re ".*$gdb_prompt $" {
		    pass "$test"
		}
	    }
	    check_history [list]
	    check_history_filename ""
	}
    }
}

test_gdbinit_history_setting "gdbinit-history/unlimited" "unlimited"
test_gdbinit_history_setting "gdbinit-history/zero" "0"

test_no_truncation_of_unlimited_history_file

# A valid GDBHISTSIZE value overrides the setting inside the .gdbinit file; an
# invalid GDBHISTSIZE value is ignored, falling back on the setting inside the
# .gdbinit file.
test_gdbinit_history_setting "gdbinit-history/unlimited" "1000" "1000"
test_gdbinit_history_setting "gdbinit-history/unlimited" "unlimited" "foo"

# Check handling of empty history filename.
test_empty_history_filename
