# Copyright (C) 2009-2020 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 {
    fail "cannot run to main."
    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
    }
}
