# Copyright (C) 2022-2023 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/>.

# This file is part of the GDB testsuite.  It checks for memory leaks
# associated with allocating and deallocation gdb.Inferior objects.

load_lib gdb-python.exp

standard_testfile

save_vars { env(TERM) } {
    # We need an ANSI-capable terminal to get the output, additionally
    # we need to set LC_ALL so GDB knows the terminal is UTF-8
    # capable, otherwise we'll get a UnicodeEncodeError trying to
    # encode the output.
    setenv TERM ansi

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

    if { ![allow_python_tests] } { continue }

    if { ![gdb_py_module_available "pygments"] } {
	unsupported "pygments module not available"
	return -1
    }

    if ![runto_main] {
	return
    }

    gdb_test_no_output "maint set gnu-source-highlight enabled off"

    gdb_test "maint flush source-cache" "Source cache flushed\\."

    set seen_style_escape false
    set line_number [gdb_get_line_number "List this line."]
    gdb_test_multiple "list ${line_number}" "" {
	-re "Python Exception.*" {
	    fail $gdb_test_name
	}
	-re "\033" {
	    set seen_style_escape true
	    exp_continue
	}
	-re "$gdb_prompt $" {
	    gdb_assert { $seen_style_escape }
	    pass $gdb_test_name
	}
    }
}
