# Copyright (C) 2009, 2010, 2011 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.

if $tracelevel then {
    strace $tracelevel
}

load_lib gdb-python.exp

# Start with a fresh gdb.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

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

# Test a simple command.

gdb_py_test_multiple "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_py_test_multiple "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_py_test_multiple "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_py_test_multiple "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_py_test_multiple "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_py_test_multiple "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_py_test_multiple "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')"
