-# Copyright 2018 Free Software Foundation, Inc.
+# 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
# We need an ANSI-capable terminal to get the output.
setenv TERM ansi
- if {[prepare_for_testing "failed to prepare" $testfile $srcfile]} {
+ 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
}
+ set readnow [readnow]
+
if {![runto_main]} {
fail "style tests failed"
return
}
+ # Check that the source highlighter has not stripped away the leading
+ # newlines.
+ set main_line [gdb_get_line_number "break here"]
+ gdb_test "list $main_line,$main_line" "return.*some_called_function.*"
+
gdb_test_no_output "set style enabled on"
- set main_expr "\033\\\[33mmain\033\\\[m"
- set file_expr "\033\\\[32m.*style\\.c\033\\\[m:\[0-9\]"
+ 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.*$file_expr.*"
+ "$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} {
+ set macro_line [gdb_get_line_number "\#define SOME_MACRO"]
+ gdb_test "info macro SOME_MACRO" \
+ "Defined at $base_file_expr:$macro_line\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.*"
+
+ set ifield [style int_field variable]
+ set sfield [style string_field variable]
+ set efield [style e_field variable]
+ set evalue [style VALUE_TWO variable]
+ gdb_test "print struct_value" \
+ "\{$ifield = 23,.*$sfield = .*,.*$efield = $evalue.*"
+
+ 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} -- User-defined 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}" \
+ "Apply a command to all .*" \
+ "Usage:.*" \
+ "short${cut_for_thre_expr}ad apply.*" \
+ "" \
+ "${tfaas_expr}" \
+ "Apply a command to all .*" \
+ "Usage:.*" \
+ "short${cut_for_thre_expr}ad apply.*" \
+ ]
+
+ set quoted [string_to_regexp $binfile]
+ set pass_re "Reading symbols from [style $quoted file]\.\.\."
+ if { $readnow } {
+ set pass_re \
+ [multi_line \
+ $pass_re \
+ "Expanding full symbols from [style $quoted file]\.\.\."]
+ }
+ gdb_test "file $binfile" \
+ $pass_re \
+ "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]\"\\..*"
+
+ # 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]\"\\..*"
}