# Copyright (C) 2008-2026 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 tests Python-based
# pretty-printing for the CLI.

load_lib gdb-python.exp

require allow_python_tests

standard_testfile

# Start with a fresh gdb.
gdb_exit
gdb_start

proc run_lang_tests {exefile lang} {
    global srcdir subdir srcfile testfile hex
    if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${exefile}" executable "debug $lang"] != "" } {
	untested "failed to compile in $lang mode"
	return -1
    }

    set nl "\[\r\n\]+"

    # Start with a fresh gdb.
    clean_restart
    gdb_load $exefile

    if {![runto_main]} {
	return
    }

    gdb_test_no_output "set print pretty on"

    gdb_breakpoint [gdb_get_line_number "break to inspect" ${testfile}.c]
    gdb_continue_to_breakpoint "break to inspect" ".*break to inspect.*"


    set remote_python_file [gdb_remote_download host \
				${srcdir}/${subdir}/${testfile}.py]

    gdb_test_no_output "source ${remote_python_file}" "load python file"

    gdb_test "print ss" " = a=< a=<1> b=<$hex>> b=< a=<2> b=<$hex>>"
    gdb_test "print ssa\[1\]" " = a=< a=<5> b=<$hex>> b=< a=<6> b=<$hex>>"
    gdb_test "print ssa" " = {a=< a=<3> b=<$hex>> b=< a=<4> b=<$hex>>, a=< a=<5> b=<$hex>> b=< a=<6> b=<$hex>>}"

    gdb_test "print arraystruct" " = {$nl *y = 7, *$nl *x = { a=<23> b=<$hex>,  a=<24> b=<$hex>} *$nl *}"

    # Test that when a pretty-printer returns a gdb.Value in its to_string, we
    # call the pretty-printer of that value too.
    gdb_test "print tsrvw" " = Inner to_string 1989"

    if {$lang == "c++"} {
	gdb_test "print cps" "=  a=<8> b=<$hex>"
	gdb_test "print cpss" " = {$nl *zss = 9, *$nl *s =  a=<10> b=<$hex>$nl}"
	gdb_test "print cpssa\[0\]" " = {$nl *zss = 11, *$nl *s =  a=<12> b=<$hex>$nl}"
	gdb_test "print cpssa\[1\]" " = {$nl *zss = 13, *$nl *s =  a=<14> b=<$hex>$nl}"
	gdb_test "print cpssa" " = {{$nl *zss = 11, *$nl *s =  a=<12> b=<$hex>$nl *}, {$nl *zss = 13, *$nl *s =  a=<14> b=<$hex>$nl *}}"
	gdb_test "print sss" "= a=<15> b=< a=<8> b=<$hex>>"
	gdb_test "print ref" "= a=<15> b=< a=<8> b=<$hex>>"
	gdb_test "print derived" \
	    " = \{.*<Vbase1> = pp class name: Vbase1.*<Vbase2> = \{.*<VirtualTest> = pp value variable is: 1,.*members of Vbase2:.*_vptr.Vbase2 = $hex.*<Vbase3> = \{.*members of Vbase3.*members of Derived:.*value = 2.*"
	gdb_test "print ns " "\"embedded\\\\000null\\\\000string\"" \
	    "print ns with default element limit"
	gdb_test_no_output "set print elements 3"
	gdb_test "print ns" "emb\.\.\.." \
	    "print ns with element limit of 3"
	gdb_test_no_output "set print elements 10"
	gdb_test "print ns" "embedded\\\\000n\.\.\.." \
	    "print ns with element limit of 10"
	gdb_test_no_output "set print elements 200"

	gdb_test "print has_member" \
	    "=  a=<23> b=<$hex <has_static_member::global>>.*"
	gdb_test "print has_static_member::global" \
	    "=  a=<23> b=<$hex <has_static_member::global>>"
    }

    if { ![is_address_zero_readable] } {
	gdb_test "print ns2" \
	    ".error reading variable: Cannot access memory at address 0x0."
    }

    gdb_test "print x" " = \"this is x\""
    gdb_test "print cstring" " = \"const string\""

    gdb_test "print estring" " = \"embedded x\\\\201\\\\202\\\\203\\\\204\""
    if { ![is_address_zero_readable] } {
	    gdb_test "print estring3" \
		" = <error reading variable: Cannot create a lazy string with address 0x0, and a non-zero length.>"
    }

    gdb_test_no_output "python pp_ls_encoding = 'UTF-8'"
    gdb_test "print estring2" "\"embedded \", <incomplete sequence \\\\302>"

    gdb_test_no_output "set python print-stack full"
    gdb_test "print hint_error" "Exception: hint failed\r\nhint_error_val"

    gdb_test "print c" " = container \"container\" with 2 elements = {$nl *.0. = 23,$nl *.1. = 72$nl}" \
	"print c, pretty printing on, default display hint"

    gdb_test_no_output "set variable c.is_array_p=1"
    gdb_test "print c" " = container \"container\" with 2 elements = \\{23, 72\\}" \
	"print c, pretty printing on, display hint is now array"

    # Setting is_map_p while _is_array_p is also set will cause the
    # display_hint method to raise an exception (see py-prettyprint.py).
    gdb_test_no_output "set variable c.is_map_p=1"

    # This test checks what happens when the display hint throws an
    # error.  GDB just treats this as though the display hint was
    # None.
    set py_exception \
	[multi_line \
	     "Traceback\[^\r\n\]+" \
	     "\\s+File \"\[^\r\n\]+/py-prettyprint.py\", line \[0-9\]+, in display_hint" \
	     "\\s+raise Exception\[^\r\n\]+" \
	     "Exception: invalid object state found in display_hint"]
    gdb_test "print c" \
	[multi_line \
	     " = ${py_exception}" \
	     "container \"container\" with 2 elements = {" \
	     "\\s+\\\[0\\\] = 23," \
	     "\\s+\\\[1\\\] = 72" \
	     "}"] \
	"print c, pretty printing on, exception raised from display_hint"

    # Unset is_array_p so that display_hint no longer raises an
    # exception.
    gdb_test_no_output "set variable c.is_array_p=0"

    gdb_test "print c" " = container \"container\" with 2 elements = \{$nl  \\\[23\\\] = 72$nl\}" \
	"print c, pretty printing on, display hint is now map"

    gdb_test "print nstype" " = {$nl *.0. = 7,$nl *.1. = 42$nl}"

    gdb_test_no_output "set print pretty off"
    gdb_test "print nstype" " = {.0. = 7, .1. = 42}" \
	"print nstype on one line"

    # Now we have pretty printing turned off, try printing 'c' again.
    gdb_test "print c" " = container \"container\" with 2 elements = \{\\\[23\\\] = 72\}" \
	"print c, pretty printing off, display hint is now map"

    gdb_test_no_output "set variable c.is_map_p=0"
    gdb_test "print c" " = container \"container\" with 2 elements = \{\\\[0\\\] = 23, \\\[1\\\] = 72\}" \
	"print c, pretty printing off, default display hint"

    # Check that GDB doesn't lose typedefs when looking for a printer.
    gdb_test "print an_int" " = -1"
    gdb_test "print (int) an_int" " = -1"
    gdb_test "print (int_type) an_int" " = type=int_type, val=-1"

    gdb_test "print an_int_type" " = type=int_type, val=1"
    gdb_test "print (int_type) an_int_type" " = type=int_type, val=1"

    gdb_test "print an_int_type2" " = type=int_type2, val=2"
    gdb_test "print (int) an_int_type2" " = 2"
    gdb_test "print (int_type) an_int_type2" " = type=int_type, val=2"
    gdb_test "print (int_type2) an_int_type2" " = type=int_type2, val=2"

    # PR python/16047: it is ok for a pretty printer not to have a
    # to_string method.
    gdb_test "print (int_type3) an_int_type2" " = {s = 27}"

    gdb_continue_to_end
}

with_test_prefix c {
    if { [run_lang_tests "${binfile}" "c"] == -1 } {
	return
    }
}
with_test_prefix c++ {
    if { [run_lang_tests "${binfile}-cxx" "c++"] == -1 } {
	return
    }
}

# Run various other tests.

clean_restart $::testfile

if {![runto_main]} {
    return
}

set remote_python_file [gdb_remote_download host \
			    ${srcdir}/${subdir}/${testfile}.py]

gdb_test_no_output "source ${remote_python_file}" "load python file"

gdb_breakpoint [gdb_get_line_number "eval-break"]
gdb_continue_to_breakpoint "eval-break" ".* eval-break .*"

gdb_test "info locals" "eval9 = eval=<123456789>"

gdb_breakpoint [gdb_get_line_number "break to inspect" ${testfile}.c ]
gdb_continue_to_breakpoint "break to inspect" ".*break to inspect.*"

gdb_test "print ss" " = a=< a=<1> b=<$hex>> b=< a=<2> b=<$hex>>" \
    "print ss enabled #1"

gdb_test_no_output "python disable_lookup_function ()"

gdb_test "print ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \
    "print ss disabled"

gdb_test_no_output "python enable_lookup_function ()"

gdb_test "print ss" " = a=< a=<1> b=<$hex>> b=< a=<2> b=<$hex>>" \
    "print ss enabled #2"

gdb_test "print -raw-values -- ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \
    "print -raw-values -- ss"

gdb_test "print -raw-values on -- ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \
    "print -raw-values on -- ss"

gdb_test "with print raw-values -- print ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}" \
    "with print raw-values -- print ss"

# Test interaction between /r format and raw-values option:
#   When /r is not present, raw-values option tells to bypass (or not) the pretty printers.
#     (these cases are tested above).
#   When /r is present, it must override the option raw-values off.
gdb_test "print /r ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}"

gdb_test "with print raw-values off -- print /r ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}"

gdb_test "print -raw-values off -- /r ss" " = {a = {a = 1, b = $hex}, b = {a = 2, b = $hex}}"
