# 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 the mechanism
# exposing values to Python.

load_lib gdb-python.exp

standard_testfile python.c python-1.c

if {[build_executable $testfile.exp $testfile \
	 [list $srcfile $srcfile2] debug] == -1} {
    return -1
}

clean_restart

set remote_source2_py [gdb_remote_download host \
			   ${srcdir}/${subdir}/source2.py]

# Do this instead of the skip_python_check.
# We want to do some tests when Python is not present.
gdb_test_multiple "python print (23)" "verify python support" {
    -re "not supported.*$gdb_prompt $"	{
      unsupported "python support is disabled"

      # If Python is not supported, verify that sourcing a python script
      # causes an error.
      gdb_test "source $remote_source2_py" \
	  "Error in sourced command file:.*" \
	  "source source2.py when python disabled"

      # Verify multi-line python commands cause an error.
      gdb_test_multiline "multi-line python command" \
	  "python" "" \
	  "print (23)" "" \
	  "end" "not supported.*"

      return -1
    }
    -re "$gdb_prompt $"	{}
}

gdb_test_multiline "multi-line python command" \
  "python" "" \
  "print (23)" "" \
  "end" "23"

# Spawn interactive Python help from a multi-line command, thus, after
# a secondary prompt.

with_test_prefix "python interactive help" {
    set test "python; help(); end"
    gdb_test_multiple "python\nhelp()\nend" $test {
	-re ".*help utility.*help> $" {
	    pass $test

	    # The "quit" must be seen on the output.  A buggy GDB
	    # would not display it.
	    gdb_test "quit" "^\r\nYou are now leaving help.*" "quit help"
	}
    }
}

gdb_test_multiline "show python command" \
  "define zzq" "Type commands for definition of .* just \"end\"\\.*" \
  "python" "" \
  "print (23)" "" \
  "end" "" \
  "end" "" \
  "show user zzq" "User command \"zzq\":.*  python.*print \\(23\\).*  end\r\n"

gdb_test_multiline "indented multi-line python command" \
  "python" "" \
  "def foo ():" "" \
  "  print ('hello, world!')" "" \
  "foo ()" "" \
  "end" "hello, world!"

gdb_test "source $remote_source2_py" "yes" "source source2.py"

gdb_test "source -s source2.py" "yes"

set remote_source2_symlink_notpy \
    [gdb_remote_download host ${srcdir}/${subdir}/source2.py \
	 [standard_output_file "source2-symlink.notpy"]]
set remote_source2_symlink_py [standard_output_file "source2-symlink.py"]
remote_file host delete $remote_source2_symlink_py
set status [remote_exec host "ln -sf $remote_source2_symlink_notpy $remote_source2_symlink_py"]
set test "source -s source2-symlink.py"
if {[lindex $status 0] == 0} {
    gdb_test "source -s $remote_source2_symlink_py" "yes" $test
} else {
    unsupported "$test (host does not support symbolic links)"
}

gdb_test "python print (gdb.current_objfile())" "None"
gdb_test "python print (gdb.objfiles())" "\\\[\\\]"

# Test http://bugs.python.org/issue4434 workaround in configure.ac
gdb_test "python import itertools; print ('IMPOR'+'TED')" "IMPORTED" "pythonX.Y/lib-dynload/*.so"

gdb_test_no_output \
    "python x = gdb.execute('printf \"%d\", 23', to_string = True)"
gdb_test "python print (x)" "23"

gdb_test "python gdb.execute('echo 2\\necho 3\\\\n\\n')" "23" \
    "multi-line execute"
gdb_test " " "23" "gdb.execute does not affect repeat history"

# Test post_event.
gdb_test_multiline "post event insertion" \
  "python" "" \
  "someVal = 0" "" \
  "class Foo(object):" "" \
  "  def __call__(self):" "" \
  "    global someVal" "" \
  "    someVal += 1" "" \
  "gdb.post_event(Foo())" "" \
  "end" ""

gdb_test "python print (someVal)" "1" "test post event execution"
gdb_test "python gdb.post_event(str(1))" "RuntimeError.*: Posted event is not callable.*" \
    "test non callable class"

send_gdb "python gdb.post_event(lambda: invalid())\n"
gdb_expect {
    -re "name 'invalid' is not defined" {
	pass "test post_event error on receipt"
    }
    default {
	fail "test post_event error on receipt"
    }
}

# Test (no) pagination of the executed command.
gdb_test "show height" {Number of lines gdb thinks are in a page is unlimited\.}
set lines 10
gdb_test_no_output "set height $lines"

set test "verify pagination beforehand"
gdb_test_multiple "python print (\"\\n\" * $lines)" $test {
    -re "$pagination_prompt$" {
	pass $test
    }
}
gdb_test "q" "Quit.*" "verify pagination beforehand: q"

gdb_test "python if gdb.execute('python print (\"\\\\n\" * $lines)', to_string=True) == \"\\n\" * [expr $lines + 1]: print (\"yes\")" "yes" "gdb.execute does not page"

set test "verify pagination afterwards"
gdb_test_multiple "python print (\"\\n\" * $lines)" $test {
    -re "$pagination_prompt$" {
	pass $test
    }
}
gdb_test "q" "Quit.*" "verify pagination afterwards: q"

gdb_test_no_output "set height 0"

gdb_test_no_output "python a = gdb.execute('help', to_string=True)" "collect help from uiout"

gdb_test "python print (a)" ".*aliases -- User-defined aliases of other commands.*" "verify help to uiout"

# Test PR 12212, using InfThread.selected_thread() when no inferior is
# loaded.
gdb_py_test_silent_cmd "python nothread = gdb.selected_thread()" "Attempt to acquire thread with no inferior" 1
gdb_test "python print (nothread is None)" "True" "ensure that no threads are returned"

gdb_test_multiline "register atexit function" \
    "python" "" \
    "import atexit" "" \
    "def printit(arg):" "" \
    "  print (arg)" "" \
    "atexit.register(printit, 'good bye world')" "" \
    "end" ""

send_gdb "quit\n"
gdb_expect {
    -re "good bye world" {
	pass "atexit handling"
    }
    default {
	fail "atexit handling"
    }
}

# Start with a fresh gdb.
clean_restart ${testfile}

# The following tests require execution.

if {![runto_main]} {
    return 0
}

set lineno [gdb_get_line_number "Break to end."]
runto $lineno

# Test gdb.decode_line.
gdb_test "python gdb.decode_line(\"main.c:43\")" \
    "gdb.error.*: No source file named main.c.*" "test decode_line no source named main"

with_test_prefix "test decode_line current location" {
    gdb_py_test_silent_cmd "python symtab = gdb.decode_line()" "decode current line" 1
    gdb_test "python print (len(symtab))" "2" "length of result"
    gdb_test "python print (symtab\[0\])" "None" "no unparsed text"
    gdb_test "python print (len(symtab\[1\]))" "1" "length of result locations"
}

# Test that decode_line with an empty string argument does not crash.
gdb_py_test_silent_cmd "python symtab2 = gdb.decode_line('')" \
    "test decode_line with empty string" 1

if { [is_remote host] } {
    set python_c [string_to_regexp "python.c"]
} else {
    set python_c [string_to_regexp "gdb.python/python.c"]
}
with_test_prefix "test decode_line" {
    gdb_test "python print (symtab\[1\]\[0\].symtab)" ".*${python_c}" "current location filename"
    gdb_test "python print (symtab\[1\]\[0\].line)" "$lineno" "current location line number"

    gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"python.c:26 if foo\")" "python.c:26 decode" 1
    gdb_test "python print (len(symtab))" "2" "python.c:26 length 2"
    gdb_test "python print (symtab\[0\])" "if foo" "expression parse"
    gdb_test "python print (len(symtab\[1\]))" "1" "python.c:26 length 1"
    gdb_test "python print (symtab\[1\]\[0\].symtab)" ".*${python_c}" "python.c:26 filename"
    gdb_test "python print (symtab\[1\]\[0\].line)" "26" "python.c:26 line number"

    gdb_test "python gdb.decode_line(\"randomfunc\")" \
	"gdb.error.*: Function \"randomfunc\" not defined.*" "randomfunc"
    gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"func1\")" "func1()" 1
    gdb_test "python print (len(symtab))" "2" "func1 length 2"
    gdb_test "python print (len(symtab\[1\]))" "1" "func1 length 1"
}

if { [is_remote host] } {
    set python_1_c [string_to_regexp "python-1.c"]
} else {
    set python_1_c [string_to_regexp "gdb.python/python-1.c"]
}
gdb_test "python print (symtab\[1\]\[0\].symtab)" ".*${python_1_c}" "test decode_line func1 filename"

# Set a default value for func1_lineno in case we fail to fetch the line number
# below.
set func1_lineno "noline"

# Fetch the line GDB thinks func1 starts at.  This may change depending
# on the architecture and on how GDB handles the prologue of the function.
gdb_test_multiple "info line func1" "info line func1" {
    -re "Line ($decimal) of .* starts at address $hex <func1> and ends at $hex <func1\\+$decimal>\.\[\r\n\]+$gdb_prompt $" {
	# Fetch the line number.
	set func1_lineno $expect_out(1,string)
    }
}

gdb_test "python print (symtab\[1\]\[0\].line)" "$func1_lineno" "test decode_line func1 line number"
gdb_py_test_silent_cmd {python symtab = gdb.decode_line ("func1,func2")} \
    "test decode_line func1,func2" 1
gdb_test {python print (symtab[0])} ",func2" "stop at comma in linespec"

with_test_prefix "test decode_line" {
    gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"*0\")" "*0" 1
    gdb_test "python print (len(symtab))" "2" "*0 result length"
    gdb_test "python print (symtab\[0\])" "None" "*0 unparsed"
    gdb_test "python print (len(symtab\[1\]))" "1" "*0 locations length"
    gdb_test "python print (symtab\[1\]\[0\].symtab)" "None" "*0 filename"
    gdb_test "python print (symtab\[1\]\[0\].pc)" "0" "*0 pc"
}

# gdb.write
gdb_test "python print (sys.stderr)" ".*gdb._GdbFile (instance|object) at.*" "test stderr location"
gdb_test "python print (sys.stdout)" ".*gdb._GdbFile (instance|object) at.*" "test stdout location"
gdb_test "python gdb.write(\"Foo\\n\")" "Foo" "test default write"
gdb_test "python gdb.write(\"Error stream\\n\", stream=gdb.STDERR)" "Error stream" "test stderr write"
gdb_test "python gdb.write(\"Normal stream\\n\", stream=gdb.STDOUT)" "Normal stream" "test stdout write"

if ![gdb_debug_enabled] {
  gdb_test "python gdb.write(\"Log stream\\n\", stream=gdb.STDLOG)" "Log stream" "test stdlog write"
}

# Turn on full stack printing for subsequent tests.
gdb_py_test_silent_cmd "set python print-stack full" \
    "Set print-stack full for prompt tests" 1

# Test prompt substituion

gdb_test_multiline "prompt substitution" \
  "python" "" \
  "someCounter = 0" "" \
  "def prompt(current):" "" \
  "   global someCounter" "" \
  "   if (current == \"testfake \"):" "" \
  "      return None" "" \
  "   someCounter = someCounter + 1" "" \
  "   return \"py prompt \" + str (someCounter) + \" \"" "" \
  "end" ""

gdb_test_multiline "prompt substitution readline" \
  "python" "" \
  "pCounter = 0" "" \
  "def program_prompt(current):" "" \
  "   global pCounter" "" \
  "   if (current == \">\"):" "" \
  "      pCounter = pCounter + 1" "" \
  "      return \"python line \" + str (pCounter) + \": \"" "" \
  "   return None" "" \
  "end" ""

set newprompt "py prompt 1"
set newprompt2 "py prompt 2"
set testfake "testfake"

gdb_test_multiple "python gdb.prompt_hook = prompt" "set the hook = prompt" {
    -re "\[\r\n\]$newprompt $" {
	pass $gdb_test_name
    }
}

gdb_test_multiple "set prompt testfake " "set testfake prompt in GDB" {
    -re "\[\r\n\]$testfake $" {
	pass $gdb_test_name
    }
}

gdb_test_multiple "show prompt" "show testfake prompt" {
    -re "Gdb's prompt is \"$testfake \"..* $" {
	pass $gdb_test_name
    }
}

gdb_test_multiple "set prompt blah " "set blah in GDB" {
    -re "\[\r\n\]$newprompt2 $" {
	pass $gdb_test_name
    }
}

gdb_test_multiple "python gdb.prompt_hook = None" "delete hook" {
    -re "\[\r\n\]$newprompt2 $" {
	pass $gdb_test_name
    }
}

gdb_test_multiple "set prompt $gdb_prompt " "set default prompt" {
    -re "\[\r\n\]$gdb_prompt $" {
	pass $gdb_test_name
    }
}

set working_dir ""
gdb_test_multiple "pwd" "pwd" {
    -re "Working directory (.*)\\.\[\r\n\]+$gdb_prompt $" {
	set working_dir $expect_out(1,string)
    }
}

gdb_test_multiple "python gdb.prompt_hook = program_prompt" "set the programming hook" {
    -re "\[\r\n\]$gdb_prompt $" {
	pass $gdb_test_name
    }
}

gdb_test_multiple "python" "test we ignore substitution for seconday prompts" {
    -re "\r\n>$" {
	pass $gdb_test_name
    }
}

gdb_test_multiple "end" "end programming" {
    -re "\[\r\n\]$gdb_prompt $" {
	pass $gdb_test_name
    }
}

gdb_test_multiline "prompt substitution readline import" \
  "python" "" \
  "import gdb.command.prompt" "" \
  "end" ""

gdb_test_multiple "set extended-prompt one two three " \
    "set basic extended prompt" {
    -re "\[\r\n\]one two three $" {
	pass $gdb_test_name
    }
}

gdb_test_multiple "set extended-prompt \\w " \
    "set extended prompt working directory" {
    -re "\[\r\n\][string_to_regexp $working_dir] $" {
	pass $gdb_test_name
    }
}

gdb_test_multiple "set extended-prompt some param \\p{python print-stack} " \
    "set extended prompt parameter" {
    -re "\[\r\n\]some param full $" {
	pass $gdb_test_name
    }
}

# Start with a fresh gdb.
clean_restart ${testfile}

# The following tests require execution.

if {![runto_main]} {
    return 0
}

# print-stack settings
gdb_test "show python print-stack" \
    "The mode of Python stack printing on error is \"message\".*" \
    "Test print-stack show setting. Default is message."
gdb_py_test_silent_cmd "set python print-stack full" \
    "Test print-stack set setting to full" 1
gdb_test "show python print-stack" \
    "The mode of Python stack printing on error is \"full\".*" \
    "Test print-stack show setting to full"
gdb_py_test_silent_cmd "set python print-stack none" \
    "Test print-stack set setting to none" 1
gdb_test "show python print-stack" \
    "The mode of Python stack printing on error is \"none\".*" \
    "test print-stack show setting to none"

gdb_py_test_silent_cmd "set python print-stack message" \
    "Test print-stack set setting to message" 1

gdb_test_multiline "prompt substitution readline error_prompt" \
  "python" "" \
  "pCounter = 0" "" \
  "def error_prompt(current):" "" \
  "   raise RuntimeError(\"Python exception called\")" "" \
  "end" ""

gdb_test_multiple "python gdb.prompt_hook = error_prompt" "set the hook error_prompt" {
    -re "Python Exception (exceptions.RuntimeError|<(type 'exceptions.|class ')RuntimeError'>): Python exception called\r\n$gdb_prompt $" {
	pass $gdb_test_name
    }
}

gdb_py_test_silent_cmd "python gdb.prompt_hook = None" \
    "set the hook to default 1" 1

gdb_py_test_silent_cmd "set python print-stack full" \
    "set print-stack full for prompt error test" 1

gdb_test_multiple "python gdb.prompt_hook = error_prompt" "set the hook error_prompt traceback" {
    -re "Traceback.*File.*line.*RuntimeError.*Python exception called.*$gdb_prompt $" {
	pass $gdb_test_name
    }
}

gdb_py_test_silent_cmd "python gdb.prompt_hook = None" \
    "set the hook to default 2" 1

# Start with a fresh gdb.
clean_restart ${testfile}

# The following tests require execution.

if {![runto_main]} {
    return 0
}

runto [gdb_get_line_number "Break at func2 call site."]

gdb_py_test_silent_cmd "python line = gdb.selected_frame().find_sal().line" "Get line number of func2 call site" 1

gdb_py_test_silent_cmd "python pc_call = gdb.selected_frame().pc()" \
    "Get pc of func2 call site" 1

gdb_test "python print (gdb.find_pc_line(gdb.selected_frame().pc()).line == line)" "True" "test find_pc_line at func2 call site"

gdb_py_test_silent_cmd "step" "Step into func2" 1
gdb_py_test_silent_cmd "up" "Step out of func2" 1

# The point of the following test is to see if gdb has advanced past the
# location where the branch to a function was made.
set test_name "test find_pc_line with resume address"

gdb_py_test_silent_cmd "python pc_rtn = gdb.selected_frame().pc()" \
    "Get pc at func2 return site" 1

gdb_test "python print (pc_rtn > pc_call)" "True" \
    "test resume address greater then call address"

gdb_test "python print (gdb.find_pc_line(pc_rtn).line >= line)" "True" \
    "test find_pc_line with resume address"
gdb_test "python print (gdb.find_pc_line(pc_rtn).line == gdb.find_pc_line(gdb.Value(pc_rtn)).line)" \
    "True" \
    "test find_pc_line using Value"

gdb_test_no_output "set variable \$cvar1 = 23" "set convenience variable"
gdb_test "python print(gdb.convenience_variable('cvar1'))" "23"
gdb_test "python print(gdb.convenience_variable('cvar2'))" "None"
gdb_test_no_output "python gdb.set_convenience_variable('cvar1', 89)" \
    "change convenience variable from python"
gdb_test "python print(gdb.convenience_variable('cvar1'))" "89" \
    "print new value of convenience variable from python"
gdb_test "print \$cvar1" " = 89" \
    "print new value of convenience variable from CLI"
gdb_test_no_output "python gdb.set_convenience_variable('cvar3', -5)" \
    "make convenience variable from python"
gdb_test "python print(gdb.convenience_variable('cvar3'))" "-5" \
    "print value of new convenience variable from python"
gdb_test_no_output "python gdb.set_convenience_variable('cvar3', None)" \
    "reset convenience variable from python"
gdb_test "python print(gdb.convenience_variable('cvar3'))" "None" \
    "print reset convenience variable from python"
gdb_test "print \$cvar3" "= void" \
    "print reset convenience variable from CLI"

# Test PR 23669, the following would invoke the "commands" command instead of
# "show commands".
gdb_test "python gdb.execute(\"show commands\")" "$decimal  print \\\$cvar3.*"

# Check if starti command is supported.
if { [use_gdb_stub] == 0 } {
    # Test that the from_tty argument to gdb.execute is effective. If
    # False, the user is not prompted for decisions such as restarting the
    # program, and "yes" is assumed. If True, the user is prompted.
    # Case 1, from_tty=False.
    gdb_test "python gdb.execute('starti', from_tty=False)" \
	"Program stopped.*" \
	"starti via gdb.execute, not from tty"

    # Case 2, from_tty=True.
    set test "starti via gdb.execute, from tty"
    set question \
	[multi_line \
	     {The program being debugged has been started already\.} \
	     {Start it from the beginning\? \(y or n\) $}]
    gdb_test_multiple "python gdb.execute('starti', from_tty=True)" $test {
	-re $question {
	    gdb_test "y" "Starting program:.*" $gdb_test_name
	}
    }
}

# Regression test for PR python/32163: several types were not
# previously registered with the module, so could not be inspected
# directly.
foreach type {Instruction LazyString Membuf Record RecordFunctionSegment \
		  RecordGap RecordInstruction TuiWindow} {
    if { $type == "TuiWindow" && ![allow_tui_tests] } {
	continue
    }

    gdb_test "python print(type(gdb.$type))" "<class 'type'>" \
	"gdb.$type is registered"
}
