1 # Copyright 2015-2024 Free Software Foundation, Inc. 2 3 # This program is free software; you can redistribute it and/or modify 4 # it under the terms of the GNU General Public License as published by 5 # the Free Software Foundation; either version 3 of the License, or 6 # (at your option) any later version. 7 # 8 # This program is distributed in the hope that it will be useful, 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 # GNU General Public License for more details. 12 # 13 # You should have received a copy of the GNU General Public License 14 # along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16 # This file is part of the gdb testsuite. 17 18 # Test the operation of the "history remove-duplicates" option. 19 20 21 # Check that the previous history entry is ENTRY. 22 23 proc check_prev_history_entry { entry { test_suffix "" } } { 24 set test_name "history entry is $entry" 25 if { $test_suffix != "" } { 26 append test_name " $test_suffix" 27 } 28 29 # Send ^P followed by ^L. 30 send_gdb "\x10\x0c" 31 32 gdb_expect { 33 -re $entry { 34 pass $test_name 35 } 36 timeout { 37 fail $test_name 38 } 39 } 40 } 41 42 # Foreach element ELT in THINGS, run the command "print $ELT", making sure that 43 # each invocation of "print" has a unique test name. 44 45 proc run_print_on_each_thing { things } { 46 set index 0 47 48 foreach thing $things { 49 gdb_test "print $thing" "" "printing $thing (item #$index)" 50 incr index 51 } 52 } 53 54 gdb_exit 55 gdb_start 56 57 # These tests require readline support. 58 if { ![readline_is_used] } { 59 unsupported "readline isn't used." 60 return -1 61 } 62 63 # By default the option is set to 0. 64 gdb_test "show history remove-duplicates" "is 0\\." 65 66 # Test the "unlimited" setting. 67 with_test_prefix "remove-duplicates=unlimited" { 68 gdb_exit 69 gdb_start 70 gdb_test "set history remove-duplicates unlimited" 71 72 run_print_on_each_thing { 0 1 2 1 1 2 3 3 4 1 2 3 4 } 73 74 check_prev_history_entry "print 4" 75 check_prev_history_entry "print 3" 76 check_prev_history_entry "print 2" 77 check_prev_history_entry "print 1" 78 check_prev_history_entry "print 0" 79 } 80 81 82 # Test the "1" setting. 83 with_test_prefix "remove-duplicates=1" { 84 gdb_exit 85 gdb_start 86 gdb_test "set history remove-duplicates 1" 87 88 run_print_on_each_thing { 0 1 0 2 2 1 } 89 90 check_prev_history_entry "print 1" 91 check_prev_history_entry "print 2" 92 check_prev_history_entry "print 0" 93 check_prev_history_entry "print 1" "(again)" 94 check_prev_history_entry "print 0" "(again)" 95 } 96 97 98 # Test the "0" setting. 99 with_test_prefix "remove-duplicates=0" { 100 gdb_exit 101 gdb_start 102 gdb_test "set history remove-duplicates 0" 103 104 run_print_on_each_thing { 0 0 1 1 } 105 106 check_prev_history_entry "print 1" 107 check_prev_history_entry "print 1" "(again)" 108 check_prev_history_entry "print 0" 109 check_prev_history_entry "print 0" "(again)" 110 } 111 112 113 # Test the "2" setting. 114 with_test_prefix "remove-duplicates=2" { 115 gdb_exit 116 gdb_start 117 gdb_test "set history remove-duplicates 2" 118 119 run_print_on_each_thing { 1 2 0 2 0 } 120 121 check_prev_history_entry "print 0" 122 check_prev_history_entry "print 2" 123 check_prev_history_entry "print 1" 124 } 125