# Copyright 2015 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 . # This file is part of the gdb testsuite. # Test the setting of "history size" via $HOME/.gdbinit # Check that the history size is properly set to SIZE when reading the .gdbinit # file located in HOME. proc test_gdbinit_history_setting { home size } { global env global INTERNAL_GDBFLAGS global srcdir global subdir array set old_env [array get env] set env(HOME) "$srcdir/$subdir/$home" # The GDBHISTSIZE environment variable takes precedence over whatever # history size is set in .gdbinit. Make sure the former is not # set. unset -nocomplain env(GDBHISTSIZE) set saved_internal_gdbflags $INTERNAL_GDBFLAGS set INTERNAL_GDBFLAGS [string map {"-nx" ""} $INTERNAL_GDBFLAGS] with_test_prefix "home=$home" { 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" } } set INTERNAL_GDBFLAGS $saved_internal_gdbflags array set env [array get old_env] } # 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 array set old_env [array get env] # The GDBHISTSIZE environment variable takes precedence over whatever # history size is set in .gdbinit. Make sure the former is not # set. unset -nocomplain env(GDBHISTSIZE) set saved_internal_gdbflags $INTERNAL_GDBFLAGS 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.*" } } set INTERNAL_GDBFLAGS $saved_internal_gdbflags array set env [array get old_env] } test_gdbinit_history_setting "gdbinit-history/unlimited" "unlimited" test_gdbinit_history_setting "gdbinit-history/zero" "0" test_no_truncation_of_unlimited_history_file