| # Copyright 2018-2020 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/>. |
| |
| # Test CLI output styling. |
| |
| standard_testfile |
| |
| save_vars { env(TERM) } { |
| # We need an ANSI-capable terminal to get the output. |
| setenv TERM ansi |
| |
| set test_macros 0 |
| set options debug |
| get_compiler_info |
| if { [test_compiler_info "gcc-*"] || [test_compiler_info "clang-*"] } { |
| lappend options additional_flags=-g3 |
| set test_macros 1 |
| } |
| |
| if {[prepare_for_testing "failed to prepare" $testfile $srcfile \ |
| $options]} { |
| return -1 |
| } |
| |
| if {![runto_main]} { |
| fail "style tests failed" |
| return |
| } |
| |
| gdb_test_no_output "set style enabled on" |
| |
| set main_expr [style main function] |
| set base_file_expr [style ".*style\\.c" file] |
| set file_expr "$base_file_expr:\[0-9\]" |
| set arg_expr [style "arg." variable] |
| |
| gdb_test "frame" \ |
| "$main_expr.*$arg_expr.*$arg_expr.*$file_expr.*" |
| gdb_test "info breakpoints" "$main_expr at $file_expr.*" |
| |
| gdb_test_no_output "set style sources off" |
| gdb_test "frame" \ |
| "\r\n\[^\033\]*break here.*" \ |
| "frame without styling" |
| gdb_test_no_output "set style sources on" |
| |
| gdb_test "break main" "file $base_file_expr.*" |
| |
| gdb_test "print &main" " = .* [style $hex address] <$main_expr>" |
| |
| # Regression test for a bug where line-wrapping would occur at the |
| # wrong spot with styling. There were different bugs at different |
| # widths, so try two. |
| foreach width {20 30} { |
| gdb_test_no_output "set width $width" |
| # There was also a bug where the styling could be wrong in the |
| # line listing; this is why the words from the source code are |
| # spelled out in the final result line of the test. |
| gdb_test "frame" \ |
| [multi_line \ |
| "#0 *$main_expr.*$arg_expr.*" \ |
| ".*$arg_expr.*" \ |
| ".* at .*$file_expr.*" \ |
| "\[0-9\]+.*return.* break here .*" |
| ] \ |
| "frame when width=$width" |
| } |
| |
| if {$test_macros} { |
| gdb_test "info macro SOME_MACRO" \ |
| "Defined at $base_file_expr:16\r\n#define SOME_MACRO 23" |
| } |
| |
| set func [style some_called_function function] |
| # Somewhere should see the call to the function. |
| gdb_test "disassemble main" "[style $hex address].*$func.*" |
| |
| gdb_exit |
| gdb_spawn |
| |
| set vers [style "GNU gdb.*" "35;1"] |
| gdb_test "" "${vers}.*" \ |
| "version is styled" |
| |
| set address_style_expr [style ".*\".*address.*\".*style.*" address] |
| gdb_test "show style address foreground" \ |
| "The ${address_style_expr} foreground color is: blue" \ |
| "style name and style word styled using its own style in show style" |
| |
| set aliases_expr [style ".*aliases.*" title] |
| set breakpoints_expr [style ".*breakpoints.*" title] |
| gdb_test "help" \ |
| [multi_line \ |
| "List of classes of commands:" \ |
| "" \ |
| "${aliases_expr} -- Aliases of other commands\." \ |
| "${breakpoints_expr} -- Making program stop at certain points\." \ |
| ".*" \ |
| ] \ |
| "help classes of commands styled with title" |
| |
| set taas_expr [style ".*taas.*" title] |
| set tfaas_expr [style ".*tfaas.*" title] |
| set cut_for_thre_expr [style "cut for 'thre" highlight] |
| gdb_test "apropos -v cut for 'thre" \ |
| [multi_line \ |
| "" \ |
| "${taas_expr} --.*" \ |
| "Usage:.*" \ |
| "short${cut_for_thre_expr}ad apply.*" \ |
| "" \ |
| "${tfaas_expr} --.*" \ |
| "Usage:.*" \ |
| "short${cut_for_thre_expr}ad apply.*" \ |
| ] |
| |
| set quoted [string_to_regexp $binfile] |
| gdb_test "file $binfile" \ |
| "Reading symbols from [style $quoted file]..." \ |
| "filename is styled when loading symbol file" |
| |
| gdb_test "pwd" "Working directory [style .*? file].*" |
| |
| gdb_test_no_output "set print repeat 3" |
| gdb_test "print {0,0,0,0,0,0,0,0}" \ |
| " = \\{0 [style {<repeats.*8.*times>} metadata]\\}" |
| |
| gdb_test "show logging file" \ |
| "The current logfile is \"[style .*? file]\"\\..*" |
| } |