# 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 { [skip_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
	}
    }
}
