# Copyright (C) 2014-2023 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 . set testfile "py-completion" load_lib gdb-python.exp set pyfile [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py] set discard 0 gdb_exit gdb_start # Skip all tests if Python scripting is not enabled. if { [skip_python_tests] } { continue } # Tab completion tests require readline support, and this set of tests # doesn't work on a remote host either. if { [readline_is_used] && ![is_remote host] } { gdb_test_no_output "source ${pyfile}" "load python file" # Create a temporary directory set testdir "[standard_output_file "py-completion-testdir"]/" set testdir_regex [string_to_regexp $testdir] set testdir_complete [standard_output_file "py-completion-test"] file mkdir $testdir # This one should always pass. send_gdb "completefileinit ${testdir_complete}\t" gdb_test_multiple "" "completefileinit completion" { -re "^completefileinit ${testdir_regex}$" { pass "completefileinit completion" } } # Just discarding whatever we typed. gdb_test " " ".*" "discard #[incr discard]" # This is the problematic one. send_gdb "completefilemethod ${testdir_complete}\t" gdb_test_multiple "" "completefilemethod completion" { -re "^completefilemethod ${testdir_regex} $" { fail "completefilemethod completion (completed filename as wrong command arg)" } -re "^completefilemethod ${testdir_regex}$" { pass "completefilemethod completion" } } # Discarding again gdb_test " " ".*" "discard #[incr discard]" # Another problematic set completion_regex "[string_to_regexp [standard_output_file "py-completion-t"]]" send_gdb "completefilecommandcond [standard_output_file "py-completion-t\t"]" gdb_test_multiple "" "completefilecommandcond completion" { -re "^completefilecommandcond ${testdir}$" { fail "completefilecommandcond completion (completed filename instead of command)" } -re "^completefilecommandcond ${completion_regex}\007$" { pass "completefilecommandcond completion" } } } # Start gdb over again to clear out current state. This can interfere # with the expected output of the below tests in a buggy gdb. gdb_exit gdb_start gdb_test_no_output "source ${pyfile}" "load python file again" gdb_test_sequence "complete completel" \ "list all completions of 'complete completel'" { "completelimit1" "completelimit2" "completelimit3" "completelimit4" "completelimit5" "completelimit6" "completelimit7" } # Discarding again gdb_test " " ".*" "discard #[incr discard]" gdb_test_sequence "complete completelimit1 c" \ "list all completions of 'complete completelimit1 c'" { "completelimit1 cl11" "completelimit1 cl12" "completelimit1 cl13" } # Discarding again gdb_test " " ".*" "discard #[incr discard]" # If using readline, we can TAB-complete. This used to trigger a bug # because the cached result from the completer was being reused for # a different python command. if {[readline_is_used]} { set testname "tab-complete 'completelimit1 c'" send_gdb "completelimit1 c\t" gdb_test_multiple "" $testname { -re "^completelimit1 c\\\x07l1$" { pass $testname # Discard the command line gdb_test " " ".*" "discard #[incr discard]" } } gdb_test_sequence "complete completelimit2 c" \ "list all completions of 'complete completelimit2 c'" { "completelimit2 cl21" "completelimit2 cl210" "completelimit2 cl22" "completelimit2 cl23" "completelimit2 cl24" "completelimit2 cl25" "completelimit2 cl26" "completelimit2 cl27" "completelimit2 cl28" "completelimit2 cl29" } }