# Copyright (C) 2025 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 . # Check the the output of gdb.execute can be styled or not depending # on the value of the third argument passed to gdb.execute. require allow_python_tests load_lib gdb-python.exp # Use gdb.execute() to run CMD passing different argument values. The # output should match either STYLED_RE or UNSTYLED_RE depending on # whether the 'styling' argument is True or False. proc do_gdb_execute { cmd styled_re unstyled_re } { gdb_test "python gdb.execute('$cmd')" $styled_re foreach from_tty { True False } { gdb_test \ "python gdb.execute('$cmd', $from_tty)" \ $styled_re gdb_test \ "python gdb.execute('$cmd', $from_tty, False)" \ $styled_re gdb_test \ "python gdb.execute('$cmd', $from_tty, False, True)" \ $styled_re gdb_test \ "python gdb.execute('$cmd', $from_tty, False, False)" \ $unstyled_re gdb_test \ "python print(gdb.execute('$cmd', $from_tty, True), end='')" \ $unstyled_re gdb_test \ "python print(gdb.execute('$cmd', $from_tty, True, False), end='')" \ $unstyled_re gdb_test \ "python print(gdb.execute('$cmd', $from_tty, True, True), end='')" \ $styled_re } } # Test that the output from gdb.execute is styled or not based on the # arguments passed in. proc test_gdb_execute_styling {} { clean_restart # Two possible outputs, BASIC_RE, the unstyled output text, or # STYLED_RE, the same things, but with styling applied. set text "\"version\" style" set styled_text \ [style "\"" version][style "version" version][style "\" style" version] set basic_re "The $text foreground color is: \[^\r\n\]+" set styled_re "The $styled_text foreground color is: \[^\r\n\]+" # The command we'll run. It's output matches the above regexp. set show_style_version_cmd "show style version foreground" # Another command we'll run. The output of this command is never # styled, but we run this to check that the output doesn't change # even when gdb.execute() asks for styled, or unstyled output. set show_style_enabled_cmd "show style enabled" with_test_prefix "with style enabled on" { do_gdb_execute $show_style_version_cmd $styled_re $basic_re # This time, print the value of 'show style enabled'. This # output is unstyled, so there's only one regexp. The # interesting thing here is that we don't expect the output to # change, even when gdb.execute() is printing unstyled output. # The "styling=False" argument to gdb.execute() is separate to # the 'set style enabled on|off' setting. set re "CLI output styling is enabled\\." do_gdb_execute $show_style_enabled_cmd $re $re } gdb_test_no_output "set style enabled off" with_test_prefix "with style enabled off" { # With 'set style enabled off' in use, even a request to # gdb.execute() to produce styled output should produce # unstyled output. The assumption is that 'set style enabled # off' is done by the user, while the gdb.execute() is likely # from some Python extension. The users request for no # styling overrules the extensions request for styled output. do_gdb_execute $show_style_version_cmd $basic_re $basic_re # Now check that even when we request styled output, the 'show # style enabled' value is always reported as disabled. set re "CLI output styling is disabled\\." do_gdb_execute $show_style_enabled_cmd $re $re } } # Run the tests. with_ansi_styling_terminal { test_gdb_execute_styling }