# Copyright 2019-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 <http://www.gnu.org/licenses/>.

# Test that logging does not style.

# Do not run if gdb debug is enabled as it will interfere with log redirect.
require !gdb_debug_enabled

require {!is_remote host}

standard_testfile style.c

with_ansi_styling_terminal {
    if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
	return -1
    }

    if {![runto_main]} {
	return
    }

    gdb_test_no_output "set style enabled on"

    set log_name [standard_output_file log.txt]
    gdb_test_no_output "set logging file $log_name" \
	"set logging filename"
    gdb_test_no_output "set logging overwrite on"
    gdb_test "set logging enabled on" "Copying output to .*"

    set main_expr [style main function]
    set base_file_expr [style ".*style\\.c" file]
    set line_expr [style $decimal line-number]
    set file_expr "$base_file_expr:$line_expr"
    set arg_expr [style "arg." variable]
    gdb_test "frame" \
	"$main_expr.*$arg_expr.*$arg_expr.*$file_expr.*"

    gdb_test "set logging enabled off" "Done logging to .*"

    set fd [open $log_name]
    set data [read -nonewline $fd]
    close $fd

    set testname "log is escape-free"
    if {[regexp "\033" $data]} {
	fail $testname
    } else {
	pass $testname
    }
}
