# Copyright (C) 2022 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
	}
    }
}
