# Copyright (C) 2009-2021 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
# for defining new GDB commands in Python.

load_lib gdb-python.exp

standard_testfile

if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
    return -1
}

# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

if ![runto_main] then {
    return 0
}

# Test a simple command.

gdb_test_multiline "input simple command" \
  "python" "" \
  "class test_cmd (gdb.Command):" "" \
  "  def __init__ (self):" "" \
  "    super (test_cmd, self).__init__ (\"test_cmd\", gdb.COMMAND_OBSCURE)" "" \
  "  def invoke (self, arg, from_tty):" "" \
  "    print (\"test_cmd output, arg = %s\" % arg)" "" \
  "test_cmd ()" "" \
  "end" ""

gdb_test "test_cmd ugh" "test_cmd output, arg = ugh" "call simple command"

# Test a prefix command, and a subcommand within it.

gdb_test_multiline "input prefix command" \
  "python" "" \
  "class prefix_cmd (gdb.Command):" "" \
  "  def __init__ (self):" "" \
  "    super (prefix_cmd, self).__init__ (\"prefix_cmd\", gdb.COMMAND_OBSCURE, gdb.COMPLETE_NONE, True)" "" \
  "  def invoke (self, arg, from_tty):" "" \
  "    print (\"prefix_cmd output, arg = %s\" % arg)" "" \
  "prefix_cmd ()" "" \
  "end" ""

gdb_test "prefix_cmd ugh" "prefix_cmd output, arg = ugh" "call prefix command"

gdb_test_multiline "input subcommand" \
  "python" "" \
  "class subcmd (gdb.Command):" "" \
  "  def __init__ (self):" "" \
  "    super (subcmd, self).__init__ (\"prefix_cmd subcmd\", gdb.COMMAND_OBSCURE)" "" \
  "  def invoke (self, arg, from_tty):" "" \
  "    print (\"subcmd output, arg = %s\" % arg)" "" \
  "subcmd ()" "" \
  "end" ""

gdb_test "prefix_cmd subcmd ugh" "subcmd output, arg = ugh" "call subcmd"

# Test prefix command using keyword arguments.

gdb_test_multiline "input prefix command, keyword arguments" \
  "python" "" \
  "class prefix_cmd2 (gdb.Command):" "" \
  "  def __init__ (self):" "" \
  "    super (prefix_cmd2, self).__init__ (\"prefix_cmd2\", gdb.COMMAND_OBSCURE, prefix = True, completer_class = gdb.COMPLETE_FILENAME)" "" \
  "  def invoke (self, arg, from_tty):" "" \
  "    print (\"prefix_cmd2 output, arg = %s\" % arg)" "" \
  "prefix_cmd2 ()" "" \
  "end" ""

gdb_test "prefix_cmd2 argh" "prefix_cmd2 output, arg = argh" "call prefix command, keyword arguments"

gdb_test_multiline "input subcommand under prefix_cmd2" \
  "python" "" \
  "class subcmd (gdb.Command):" "" \
  "  def __init__ (self):" "" \
  "    super (subcmd, self).__init__ (\"prefix_cmd2 subcmd\", gdb.COMMAND_OBSCURE)" "" \
  "  def invoke (self, arg, from_tty):" "" \
  "    print (\"subcmd output, arg = %s\" % arg)" "" \
  "subcmd ()" "" \
  "end" ""

gdb_test "prefix_cmd2 subcmd ugh" "subcmd output, arg = ugh" "call subcmd under prefix_cmd2"

# Test a subcommand in an existing GDB prefix.

gdb_test_multiline "input new subcommand" \
  "python" "" \
  "class newsubcmd (gdb.Command):" "" \
  "  def __init__ (self):" "" \
  "    super (newsubcmd, self).__init__ (\"info newsubcmd\", gdb.COMMAND_OBSCURE)" "" \
  "  def invoke (self, arg, from_tty):" "" \
  "    print (\"newsubcmd output, arg = %s\" % arg)" "" \
  "newsubcmd ()" "" \
  "end" ""

gdb_test "info newsubcmd ugh" "newsubcmd output, arg = ugh" "call newsubcmd"

# Test a command that throws gdb.GdbError.

gdb_test_multiline "input command to throw error" \
  "python" "" \
  "class test_error_cmd (gdb.Command):" "" \
  "  def __init__ (self):" "" \
  "    super (test_error_cmd, self).__init__ (\"test_error_cmd\", gdb.COMMAND_OBSCURE)" "" \
  "  def invoke (self, arg, from_tty):" "" \
  "    raise gdb.GdbError ('you lose!')" "" \
  "test_error_cmd ()" "" \
  "end" ""

gdb_test "test_error_cmd ugh" "you lose!" "call error command"

# Test gdb.string_to_argv.

gdb_test "python print (gdb.string_to_argv (\"1 2 3\"))" \
  {\['1', '2', '3'\]} \
  "string_to_argv (\"1 2 3\")"

gdb_test "python print (gdb.string_to_argv (\"'1 2' 3\"))" \
  {\['1 2', '3'\]} \
  "string_to_argv (\"'1 2' 3\")"

gdb_test "python print (gdb.string_to_argv ('\"1 2\" 3'))" \
  {\['1 2', '3'\]} \
  "string_to_argv ('\"1 2\" 3')"

gdb_test "python print (gdb.string_to_argv ('1\\ 2 3'))" \
  {\['1 2', '3'\]} \
    "string_to_argv ('1\\ 2 3')"

# Test user-defined python commands.
gdb_test_multiline "input simple user-defined command" \
  "python" "" \
  "class test_help (gdb.Command):" "" \
  "  \"\"\"Docstring\"\"\"" "" \
  "  def __init__ (self):" "" \
  "    super (test_help, self).__init__ (\"test_help\", gdb.COMMAND_USER)" "" \
  "  def invoke (self, arg, from_tty):" "" \
  "    print (\"test_cmd output, arg = %s\" % arg)" "" \
  "test_help ()" "" \
  "end" ""

gdb_test "test_help ugh" "test_cmd output, arg = ugh" "call simple user-defined command"

# Make sure the command shows up in `help user-defined`.
test_user_defined_class_help {"test_help -- Docstring[\r\n]"}

# Make sure the command does not show up in `show user`.
gdb_test "show user test_help" "Not a user command\." \
    "don't show user-defined python command in `show user command`"

# Test expression completion on fields
gdb_test_multiline "expression completion command" \
  "python" "" \
  "class expr_test (gdb.Command):" "" \
  "  def __init__ (self):" "" \
  "    super (expr_test, self).__init__ (\"expr_test\", gdb.COMMAND_USER, gdb.COMPLETE_EXPRESSION)" "" \
  "  def invoke (self, arg, from_tty):" "" \
  "    print (\"invoked on = %s\" % arg)" "" \
  "expr_test ()" "" \
  "end" ""


gdb_test "complete expr_test bar\." \
    "expr_test bar\.bc.*expr_test bar\.ij.*" \
    "test completion through complete command"

# Test that the "python" command is correctly recognized as
# inline/multi-line when entering a sequence of commands.
#
# This proc tests PR cli/21688.  The PR is not language-specific, but
# the easiest way is just to test with Python.
proc test_python_inline_or_multiline { } {
    global gdb_prompt
    set end "\r\n$gdb_prompt $"

    set define_cmd_not_inline [ list \
	[ list "if 1"                 " >$"            "multi-line if 1" ] \
	[ list "python"               " >$"            "multi-line python command" ] \
	[ list "print ('hello')"      "  >$"           "multi-line print" ] \
	[ list "end"                  " >$"            "multi-line first end" ] \
	[ list "end"                  "hello$end"      "multi-line last end" ] ]

    # This also tests trailing whitespace on the command.
    set define_cmd_alias_not_inline [ list \
	[ list "if 1"                 " >$"            "multi-line if 1 alias" ] \
	[ list "py    "               " >$"            "multi-line python command alias" ] \
	[ list "print ('hello')"      "  >$"           "multi-line print alias" ] \
	[ list "end"                  " >$"            "multi-line first end alias" ] \
	[ list "end"                  "hello$end"      "multi-line last end alias" ] ]

    set define_cmd_alias_foo_not_inline [ list \
	[ list "alias foo=python"     "$end"           "multi-line alias foo" ] \
	[ list "if 1"                 " >$"            "multi-line if 1 alias foo" ] \
	[ list "foo    "              " >$"            "multi-line python command alias foo" ] \
	[ list "print ('hello')"      "  >$"           "multi-line print alias foo" ] \
	[ list "end"                  " >$"            "multi-line first end alias foo" ] \
	[ list "end"                  "hello$end"      "multi-line last end alias foo" ] ]

    set define_cmd_inline [ list \
	[ list "if 1"                      " >$"          "inline if 1" ] \
	[ list "python print ('hello')"    " >$"          "inline python command" ] \
	[ list "end"                       "hello$end"    "inline end" ] ]

    set define_cmd_alias_inline [ list \
	[ list "if 1"                      " >$"          "inline if 1 alias" ] \
	[ list "py print ('hello')"        " >$"          "inline python command alias" ] \
	[ list "end"                       "hello$end"    "inline end alias" ] ]

    set define_cmd_alias_foo_inline [ list \
	[ list "if 1"                      " >$"          "inline if 1 alias foo" ] \
	[ list "foo print ('hello')"       " >$"          "inline python command alias foo" ] \
	[ list "end"                       "hello$end"    "inline end alias foo" ] ]

    foreach t [list $define_cmd_not_inline \
	       $define_cmd_alias_not_inline \
	       $define_cmd_alias_foo_not_inline \
	       $define_cmd_inline \
	       $define_cmd_alias_inline \
	       $define_cmd_alias_foo_inline] {
	foreach l $t {
	    lassign $l command regex testmsg
	    gdb_test_multiple "$command" "$testmsg" {
		-re "$regex" {
		    pass "$testmsg"
		}
	    }
	}
    }
}

test_python_inline_or_multiline

if { [readline_is_used] } {
    set test "complete 'expr_test bar.i'"
    send_gdb "expr_test bar\.i\t\t"
    gdb_test_multiple "" "$test" {
	-re "expr_test bar\.ij \\\x07$" {
	    send_gdb "\n"
	    gdb_test_multiple "" $test {
		-re "invoked on = bar.ij.*$gdb_prompt $" {
		    pass "$test"
		}
	    }
	}
    }
}


# Test that interrupting pagination throws a gdb quit.
gdb_test_no_output "set height 10"

gdb_test_multiline "input multi-line-output command" \
  "python" "" \
  "class test_mline (gdb.Command):" "" \
  "  \"\"\"Docstring\"\"\"" "" \
  "  def __init__ (self):" "" \
  "    super (test_mline, self).__init__ (\"test_multiline\", gdb.COMMAND_USER)" "" \
  "  def invoke (self, arg, from_tty):" "" \
  "    for f in range(20):" "" \
  "      print (\"test_multiline output\")" "" \
  "test_mline ()" "" \
  "end" ""

set test "verify pagination from test_multiline"
gdb_test_multiple "test_multiline" $test {
    -re "--Type <RET>" {
	exp_continue
    }
    -re " for more, q to quit" {
	exp_continue
    }
    -re ", c to continue without paging--$" {
	pass $test
    }
}

send_gdb "q\n"
set test "verify pagination from test_multiline: q"
gdb_test_multiple "test_multiline" $test {
    -re "Error occurred in Python" {
	fail $test
    }
    -re "Quit" {
	pass $test
    }
}
