# 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 . # 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 {} metadata]\\}" gdb_test "show logging file" \ "The current logfile is \"[style .*? file]\"\\..*" # Check warnings are styled by setting a rubbish data directory. gdb_test "set data-directory Makefile" \ "warning: [style .*? file] is not a directory\\..*" gdb_test "show data-directory" \ "GDB's data directory is \"[style .*? file]\"\\..*" }