# Copyright (C) 2010 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 gdb.parameter and gdb.Parameter.

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 }

# We use "." here instead of ":" so that this works on win32 too.
gdb_test "python print gdb.parameter ('directories')" "$srcdir/$subdir.\\\$cdir.\\\$cwd"

# Test a simple boolean parameter.
gdb_py_test_multiple "Simple gdb booleanparameter" \
   "python" "" \
   "class TestParam (gdb.Parameter):" "" \
   "   \"\"\"When enabled, test param does something useful. When disabled, does nothing.\"\"\"" "" \
   "   show_doc = \"Show whether the state of the Test Parameter does something useful\"" ""\
   "   set_doc = \"Set whether the state of the Test Parameter does something useful\"" "" \
   "   def __init__ (self, name):" "" \
   "      super (TestParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)" "" \
   "      self.value = True" "" \
   "test_param = TestParam ('print test-param')" ""\
   "end"

gdb_test "python print test_param.value" "True" "Test parameter value"
gdb_test "show print test-param" "Whether the state of the Test Parameter does something useful is on.*" "Show parameter on"
gdb_py_test_silent_cmd "set print test-param off" "Turn off parameter" 1
gdb_test "show print test-param" "Whether the state of the Test Parameter does something useful is off.*" "Show parameter off"
gdb_test "python print test_param.value" "False" "Test parameter value"
gdb_test "help show print test-param" "Show whether the state of the Test Parameter does something useful.*" "Test show help"
gdb_test "help set print test-param" "Set whether the state of the Test Parameter does something useful.*" "Test set help"
gdb_test "help set print" "set print test-param -- Set whether the state of the Test Parameter.*" "Test general help"

# Test an enum parameter.
gdb_py_test_multiple "enum gdb parameter" \
   "python" "" \
   "class TestEnumParam (gdb.Parameter):" "" \
   "   \"\"\"When set, test param does something useful. When disabled, does nothing.\"\"\"" "" \
   "   show_doc = \"Show the state of the enum\"" ""\
   "   set_doc = \"Set the state of the enum\"" "" \
   "   def __init__ (self, name):" "" \
   "      super (TestEnumParam, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_ENUM, \[\"one\", \"two\"\])" "" \
   "      self.value = \"one\"" "" \
   "test_enum_param = TestEnumParam ('print test-enum-param')" ""\
   "end"

gdb_test "python print test_enum_param.value" "one" "Test enum parameter value"
gdb_test "show print test-enum-param" "The state of the enum is \"one\".*" "Show parameter is initial value"
gdb_py_test_silent_cmd "set print test-enum-param two" "Set parameter to enum value" 1
gdb_test "show print test-enum-param" "The state of the enum is \"two\".*" "Show parameter is new value"
gdb_test "python print test_enum_param.value" "two" "Test enum parameter value"
gdb_test "set print test-enum-param three" "Undefined item: \"three\".*" "Set invalid enum parameter" 

# Test a file parameter.
gdb_py_test_multiple "file gdb parameter" \
   "python" "" \
   "class TestFileParam (gdb.Parameter):" "" \
   "   \"\"\"When set, test param does something useful. When disabled, does nothing.\"\"\"" "" \
   "   show_doc = \"Show the name of the file\"" ""\
   "   set_doc = \"Set the name of the file\"" "" \
   "   def __init__ (self, name):" "" \
   "      super (TestFileParam, self).__init__ (name, gdb.COMMAND_FILES, gdb.PARAM_FILENAME)" "" \
   "      self.value = \"foo.txt\"" "" \
   "test_file_param = TestFileParam ('test-file-param')" ""\
   "end"

gdb_test "python print test_file_param.value" "foo.txt" "Test file parameter value"
gdb_test "show test-file-param" "The name of the file is \"foo.txt\".*" "Show initial file value"
gdb_py_test_silent_cmd "set test-file-param bar.txt" "Set new file parameter" 1
gdb_test "show test-file-param" "The name of the file is \"bar.txt\".*" "Show new file value"
gdb_test "python print test_file_param.value" "bar.txt" "Test new file parameter value"
gdb_test "set test-file-param" "Argument required.*" 

# Test a file parameter.
gdb_py_test_multiple "file gdb parameter" \
   "python" "" \
   "class TestFileParam (gdb.Parameter):" "" \
   "   \"\"\"When set, test param does something useful. When disabled, does nothing.\"\"\"" "" \
   "   show_doc = \"Show the name of the file\"" ""\
   "   set_doc = \"Set the name of the file\"" "" \
   "   def __init__ (self, name):" "" \
   "      super (TestFileParam, self).__init__ (name, gdb.COMMAND_FILES, gdb.PARAM_FILENAME)" "" \
   "      self.value = \"foo.txt\"" "" \
   "test_file_param = TestFileParam ('test-file-param')" ""\
   "end"

gdb_test "python print test_file_param.value" "foo.txt" "Test parameter value"
gdb_test "show test-file-param" "The name of the file is \"foo.txt\".*" "Show parameter on"
gdb_py_test_silent_cmd "set test-file-param bar.txt" "Turn off parameter" 1
gdb_test "show test-file-param" "The name of the file is \"bar.txt\".*" "Show parameter on"
gdb_test "python print test_file_param.value" "bar.txt" "Test parameter value"
gdb_test "set test-file-param" "Argument required.*" 
