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

# 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}}"


