# Copyright (C) 2008, 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
# exposing values to Python.

if $tracelevel then {
    strace $tracelevel
}

load_lib gdb-python.exp

set testfile "py-value"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

# Build inferior to language specification.
proc build_inferior {exefile lang} {
  global srcdir subdir srcfile testfile hex

  if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${exefile}" executable "debug $lang"] != "" } {
      untested "Couldn't compile ${srcfile} in $lang mode"
      return -1
  }
}

proc test_value_creation {} {
  global gdb_prompt

  gdb_py_test_silent_cmd "python i = gdb.Value (True)" "create boolean value" 1
  gdb_py_test_silent_cmd "python i = gdb.Value (5)" "create integer value" 1
  gdb_py_test_silent_cmd "python i = gdb.Value (5L)" "create long value" 1
  gdb_py_test_silent_cmd "python f = gdb.Value (1.25)" "create double value" 1
  gdb_py_test_silent_cmd "python a = gdb.Value ('string test')" "create 8-bit string value" 1
  gdb_test "python print a" "\"string test\"" "print 8-bit string"
  gdb_test "python print a.__class__" "<type 'gdb.Value'>" "verify type of 8-bit string"
  gdb_py_test_silent_cmd "python a = gdb.Value (u'unicode test')" "create unicode value" 1
  gdb_test "python print a" "\"unicode test\"" "print Unicode string"
  gdb_test "python print a.__class__" "<type 'gdb.Value'>" "verify type of unicode string"

  # Test address attribute is None in a non-addressable value
  gdb_test "python print 'result =', i.address" "= None" "Test address attribute in non-addressable value"
}

proc test_value_numeric_ops {} {
  global gdb_prompt

  gdb_py_test_silent_cmd "python i = gdb.Value (5)" "create first integer value" 0
  gdb_py_test_silent_cmd "python j = gdb.Value (2)" "create second integer value" 0
  gdb_py_test_silent_cmd "python f = gdb.Value (1.25)" "create first double value" 0
  gdb_py_test_silent_cmd "python g = gdb.Value (2.5)" "create second double value" 0
  gdb_test "python print 'result = ' + str(i+j)" " = 7" "add two integer values"
  gdb_test "python print (i+j).__class__" "<type 'gdb.Value'>" "verify type of integer add result"

  gdb_test "python print 'result = ' + str(f+g)" " = 3.75" "add two double values"
  gdb_test "python print 'result = ' + str(i-j)" " = 3" "subtract two integer values"
  gdb_test "python print 'result = ' + str(f-g)" " = -1.25" "subtract two double values"
  gdb_test "python print 'result = ' + str(i*j)" " = 10" "multiply two integer values"
  gdb_test "python print 'result = ' + str(f*g)" " = 3.125" "multiply two double values"
  gdb_test "python print 'result = ' + str(i/j)" " = 2" "divide two integer values"
  gdb_test "python print 'result = ' + str(f/g)" " = 0.5" "divide two double values"
  gdb_test "python print 'result = ' + str(i%j)" " = 1" "take remainder of two integer values"
  # Remainder of float is implemented in Python but not in GDB's value system.

  gdb_test "python print 'result = ' + str(i**j)" " = 25" "integer value raised to the power of another integer value"
  gdb_test "python print 'result = ' + str(g**j)" " = 6.25" "double value raised to the power of integer value"

  gdb_test "python print 'result = ' + str(-i)" " = -5" "negated integer value"
  gdb_test "python print 'result = ' + str(+i)" " = 5" "positive integer value"
  gdb_test "python print 'result = ' + str(-f)" " = -1.25" "negated double value"
  gdb_test "python print 'result = ' + str(+f)" " = 1.25" "positive double value"
  gdb_test "python print 'result = ' + str(abs(j-i))" " = 3" "absolute of integer value"
  gdb_test "python print 'result = ' + str(abs(f-g))" " = 1.25" "absolute of double value"

  # Test gdb.Value mixed with Python types.

  gdb_test "python print 'result = ' + str(i-1)" " = 4" "subtract integer value from python integer"
  gdb_test "python print (i-1).__class__" "<type 'gdb.Value'>" "verify type of mixed integer subtraction result"
  gdb_test "python print 'result = ' + str(f+1.5)" " = 2.75" "add double value with python float"

  gdb_test "python print 'result = ' + str(1-i)" " = -4" "subtract python integer from integer value"
  gdb_test "python print 'result = ' + str(1.5+f)" " = 2.75" "add python float with double value"

  # Conversion test.
  gdb_test "print evalue" " = TWO"
  gdb_test_no_output "python evalue = gdb.history (0)"
  gdb_test "python print int (evalue)" "2"

  # Test pointer arithmethic

  # First, obtain the pointers
  gdb_test "print (void *) 2" ".*" ""
  gdb_test_no_output "python a = gdb.history (0)" ""
  gdb_test "print (void *) 5" ".*" ""
  gdb_test_no_output "python b = gdb.history (0)" ""

  gdb_test "python print 'result = ' + str(a+5)" " = 0x7" "add pointer value with python integer"
  gdb_test "python print 'result = ' + str(b-2)" " = 0x3" "subtract python integer from pointer value"
  gdb_test "python print 'result = ' + str(b-a)" " = 3" "subtract two pointer values"

  # Test some invalid operations.

  gdb_test_multiple "python print 'result = ' + str(i+'foo')" "catch error in python type conversion" {
      -re "Argument to arithmetic operation not a number or boolean.*$gdb_prompt $"   {pass "catch error in python type conversion"}
      -re "result = .*$gdb_prompt $"		      {fail "catch error in python type conversion"}
      -re "$gdb_prompt $"			      {fail "catch error in python type conversion"}
  }

  gdb_test_multiple "python print 'result = ' + str(i+gdb.Value('foo'))" "catch throw of GDB error" {
      -re "Traceback.*$gdb_prompt $"  {pass "catch throw of GDB error"}
      -re "result = .*$gdb_prompt $"  {fail "catch throw of GDB error"}
      -re "$gdb_prompt $"	      {fail "catch throw of GDB error"}
  }
}

proc test_value_boolean {} {
  # First, define a useful function to test booleans.
  gdb_py_test_multiple "define function to test booleans" \
    "python" "" \
    "def test_bool (val):" "" \
    "  if val:" "" \
    "    print 'yay'" "" \
    "  else:" "" \
    "    print 'nay'" "" \
    "end" ""

  gdb_test "py test_bool (gdb.Value (True))" "yay" "check evaluation of true boolean value in expression"

  gdb_test "py test_bool (gdb.Value (False))" "nay" "check evaluation of false boolean value in expression"

  gdb_test "py test_bool (gdb.Value (5))" "yay" "check evaluation of true integer value in expression"

  gdb_test "py test_bool (gdb.Value (0))" "nay" "check evaluation of false integer value in expression"

  gdb_test "py test_bool (gdb.Value (5.2))" "yay" "check evaluation of true integer value in expression"

  gdb_test "py test_bool (gdb.Value (0.0))" "nay" "check evaluation of false integer value in expression"
}

proc test_value_compare {} {
  gdb_test "py print gdb.Value (1) < gdb.Value (1)" "False" "less than, equal"
  gdb_test "py print gdb.Value (1) < gdb.Value (2)" "True" "less than, less"
  gdb_test "py print gdb.Value (2) < gdb.Value (1)" "False" "less than, greater"
  gdb_test "py print gdb.Value (2) < None" "False" "less than, None"

  gdb_test "py print gdb.Value (1) <= gdb.Value (1)" "True" "less or equal, equal"
  gdb_test "py print gdb.Value (1) <= gdb.Value (2)" "True" "less or equal, less"
  gdb_test "py print gdb.Value (2) <= gdb.Value (1)" "False" "less or equal, greater"
  gdb_test "py print gdb.Value (2) <= None" "False" "less or equal, None"

  gdb_test "py print gdb.Value (1) == gdb.Value (1)" "True" "equality of gdb.Values"
  gdb_test "py print gdb.Value (1) == gdb.Value (2)" "False" "inequality of gdb.Values"
  gdb_test "py print gdb.Value (1) == 1.0" "True" "equality of gdb.Value with Python value"
  gdb_test "py print gdb.Value (1) == 2" "False" "inequality of gdb.Value with Python value"
  gdb_test "py print gdb.Value (1) == None" "False" "inequality of gdb.Value with None"

  gdb_test "py print gdb.Value (1) != gdb.Value (1)" "False" "inequality, false"
  gdb_test "py print gdb.Value (1) != gdb.Value (2)" "True" "inequality, true"
  gdb_test "py print gdb.Value (1) != None" "True" "inequality, None"

  gdb_test "py print gdb.Value (1) > gdb.Value (1)" "False" "greater than, equal"
  gdb_test "py print gdb.Value (1) > gdb.Value (2)" "False" "greater than, less"
  gdb_test "py print gdb.Value (2) > gdb.Value (1)" "True" "greater than, greater"
  gdb_test "py print gdb.Value (2) > None" "True" "greater than, None"

  gdb_test "py print gdb.Value (1) >= gdb.Value (1)" "True" "greater or equal, equal"
  gdb_test "py print gdb.Value (1) >= gdb.Value (2)" "False" "greater or equal, less"
  gdb_test "py print gdb.Value (2) >= gdb.Value (1)" "True" "greater or equal, greater"
  gdb_test "py print gdb.Value (2) >= None" "True" "greater or equal, None"
}

proc test_value_in_inferior {} {
  global gdb_prompt
  global testfile

  gdb_breakpoint [gdb_get_line_number "break to inspect struct and union"]

  gdb_continue_to_breakpoint "break to inspect struct and union"

  # Just get inferior variable s in the value history, available to python.
  gdb_test "print s" " = {a = 3, b = 5}" ""

  gdb_py_test_silent_cmd "python s = gdb.history (0)" "get value from history" 1

  gdb_test "python print 'result = ' + str(s\['a'\])" " = 3" "access element inside struct using 8-bit string name"
  gdb_test "python print 'result = ' + str(s\[u'a'\])" " = 3" "access element inside struct using unicode name"

  # Test dereferencing the argv pointer

  # Just get inferior variable argv the value history, available to python.
  gdb_test "print argv" " = \\(char \\*\\*\\) 0x.*" ""

  gdb_py_test_silent_cmd "python argv = gdb.history (0)" "" 0
  gdb_py_test_silent_cmd "python arg0 = argv.dereference ()" "dereference value" 1

  # Check that the dereferenced value is sane
  if { ! [target_info exists noargs] } {
    gdb_test "python print arg0" "0x.*$testfile\"" "verify dereferenced value"
  }

  # Smoke-test is_optimized_out attribute
  gdb_test "python print 'result =', arg0.is_optimized_out" "= False" "Test is_optimized_out attribute"

  # Test address attribute
  gdb_test "python print 'result =', arg0.address" "= 0x\[\[:xdigit:\]\]+" "Test address attribute"

  # Test displaying a variable that is temporarily at a bad address.
  # But if we can examine what's at memory address 0, then we'll also be
  # able to display it without error.  Don't run the test in that case.
  set can_read_0 0
  gdb_test_multiple "x 0" "memory at address 0" {
      -re "0x0:\[ \t\]*Cannot access memory at address 0x0\r\n$gdb_prompt $" { }
      -re "0x0:\[ \t\]*Error accessing memory address 0x0\r\n$gdb_prompt $" { }
      -re "\r\n$gdb_prompt $" {
	  set can_read_0 1
      }
  }

  # Test memory error.
  set test "parse_and_eval with memory error"
  if {$can_read_0} {
    untested $test
  } else {
    gdb_test "python print gdb.parse_and_eval('*(int*)0')" "gdb.MemoryError: Cannot access memory at address 0x0.*" $test
  }

  # Test Python lazy value handling
  set test "memory error and lazy values"
  if {$can_read_0} {
    untested $test
  } else {
    gdb_test "python inval = gdb.parse_and_eval('*(int*)0')"
    gdb_test "python print inval.is_lazy" "True"
    gdb_test "python inval2 = inval+1" "gdb.MemoryError: Cannot access memory at address 0x0.*" $test
    gdb_test "python inval.fetch_lazy ()" "gdb.MemoryError: Cannot access memory at address 0x0.*" $test
  }
  gdb_test "python argc_lazy = gdb.parse_and_eval('argc')"
  gdb_test "python argc_notlazy = gdb.parse_and_eval('argc')"
  gdb_test "python argc_notlazy.fetch_lazy()"
  gdb_test "python print argc_lazy.is_lazy" "True"
  gdb_test "python print argc_notlazy.is_lazy" "False"
  gdb_test "print argc" " = 1" "sanity check argc"
  gdb_test "python print argc_lazy.is_lazy" "\r\nTrue"
  gdb_test_no_output "set argc=2"
  gdb_test "python print argc_notlazy" "\r\n1"
  gdb_test "python print argc_lazy" "\r\n2"
  gdb_test "python print argc_lazy.is_lazy" "False"

  # Test string fetches,  both partial and whole.
  gdb_test "print st" "\"divide et impera\""
  gdb_py_test_silent_cmd "python st = gdb.history (0)" "get value from history" 1
  gdb_test "python print st.string ()"  "divide et impera"  "Test string with no length"
  gdb_test "python print st.string (length = -1)" "divide et impera" "Test string (length = -1) is all of the string"
  gdb_test "python print st.string (length = 6)" "divide"
  gdb_test "python print \"---\"+st.string (length = 0)+\"---\"" "------" "Test string (length = 0) is empty"
  gdb_test "python print len(st.string (length = 0))" "0" "Test length is 0"


  # Fetch a string that has embedded nulls.
  gdb_test "print nullst" "\"divide\\\\000et\\\\000impera\".*"
  gdb_py_test_silent_cmd "python nullst = gdb.history (0)" "get value from history" 1
  gdb_test "python print nullst.string ()" "divide" "Test string to first null"
  # Python cannot print strings that contain the null (\0) character.
  # For the purposes of this test, use repr()
  gdb_py_test_silent_cmd "python nullst = nullst.string (length = 9)" "get string beyond null" 1
  gdb_test "python print repr(nullst)" "u'divide\\\\x00et'"
}

proc test_lazy_strings {} {

  global hex

  gdb_test "print sptr" "\"pointer\""
  gdb_py_test_silent_cmd "python sptr = gdb.history (0)" "Get value from history" 1

  gdb_py_test_silent_cmd "python lstr = sptr.lazy_string()" "Aquire lazy string" 1
  gdb_test "python print lstr.type" "const char \*." "Test type name equality"
  gdb_test "python print sptr.type" "const char \*." "Test type name equality"
  gdb_test "print sn" "0x0"
  gdb_py_test_silent_cmd "python snptr = gdb.history (0)" "Get value from history" 1
  gdb_test "python snstr = snptr.lazy_string(length=5)" ".*Cannot create a lazy string with address.*" "Test lazy string"
  gdb_py_test_silent_cmd "python snstr = snptr.lazy_string(length=0)" "Succesfully create a lazy string" 1
  gdb_test "python print snstr.length" "0" "Test lazy string length"
  gdb_test "python print snstr.address" "0" "Test lazy string address"
}


proc test_inferior_function_call {} {
    global gdb_prompt hex decimal

    # Correct inferior call without arguments.
    gdb_test "p/x fp1" " = $hex.*"
    gdb_py_test_silent_cmd "python fp1 = gdb.history (0)" "get value from history" 1
    gdb_test "python fp1 = fp1.dereference()" ""
    gdb_test "python result = fp1()" ""
    gdb_test "python print result" "void"

    # Correct inferior call with arguments.
    gdb_test "p/x fp2" " = $hex.*"
    gdb_py_test_silent_cmd "python fp2 = gdb.history (0)" "get value from history" 1
    gdb_test "python fp2 = fp2.dereference()" ""
    gdb_test "python result2 = fp2(10,20)" ""
    gdb_test "python print result2" "30"

    # Incorrect to call an int value.
    gdb_test "p i" " = $decimal.*"
    gdb_py_test_silent_cmd "python i = gdb.history (0)" "get value from history" 1
    gdb_test "python result3 = i()" ".*Value is not callable.*"

    # Incorrect number of arguments.
    gdb_test "p/x fp2" " = $hex.*"
    gdb_py_test_silent_cmd "python fp3 = gdb.history (0)" "get value from history" 1
    gdb_test "python fp3 = fp3.dereference()" ""
    gdb_test "python result2 = fp3(10)" ".*Too few arguments in function call.*"
}

# A few objfile tests.
proc test_objfiles {} {
    gdb_test "python\nok=False\nfor file in gdb.objfiles():\n  if 'py-value' in file.filename:\n    ok=True\nprint ok\nend" "True" \
	     "py-value in file.filename"

    gdb_test "python print gdb.objfiles()\[0\].pretty_printers" "\\\[\\\]"

    gdb_test "python gdb.objfiles()\[0\].pretty_printers = 0" \
      "pretty_printers attribute must be a list.*Error while executing Python code."
}

proc test_value_after_death {} {
  # Construct a type while the inferior is still running.
  gdb_py_test_silent_cmd "python ptrtype = gdb.lookup_type('PTR')" \
    "create PTR type" 1

  # Kill the inferior and remove the symbols.
  gdb_test "kill" "" "kill the inferior" \
    "Kill the program being debugged. .y or n. $" \
    "y"
  gdb_test "file" "" "Discard the symbols" \
    "Discard symbol table from.*y or n. $" \
    "y"

  # Now create a value using that type.  Relies on arg0, created by
  # test_value_in_inferior.
  gdb_py_test_silent_cmd "python castval = arg0.cast(ptrtype.pointer())" \
    "cast arg0 to PTR" 1

  # Make sure the type is deleted.
  gdb_py_test_silent_cmd "python ptrtype = None" \
    "delete PTR type" 1

  # Now see if the value's type is still valid.
  gdb_test "python print castval.type" "PTR ." \
    "print value's type"
}

# Regression test for invalid subscript operations.  The bug was that
# the type of the value was not being checked before allowing a
# subscript operation to proceed.

proc test_subscript_regression {exefile lang} {

 global srcdir subdir

 # Start with a fresh gdb.
 gdb_exit
 gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${exefile}

 if ![runto_main ] then {
     perror "couldn't run to breakpoint"
     return
 }

 if {$lang == "c++"} {
     gdb_breakpoint [gdb_get_line_number "break to inspect pointer by reference"]
     gdb_continue_to_breakpoint "break to inspect pointer by reference"

     gdb_py_test_silent_cmd "print rptr_int" \
	 "Obtain address" 1
     gdb_py_test_silent_cmd "python rptr = gdb.history(0)" \
	 "Obtains value from GDB" 1
     gdb_test "python print rptr\[0\]" "2" "Check pointer passed as reference"

     # Just the most basic test of dynamic_cast -- it is checked in
     # the C++ tests.
     gdb_test "python print bool(gdb.parse_and_eval('base').dynamic_cast(gdb.lookup_type('Derived').pointer()))" \
	 True

     # Likewise.
     gdb_test "python print gdb.parse_and_eval('base').dynamic_type" \
	 "Derived \[*\]"
     # A static type case.
     gdb_test "python print gdb.parse_and_eval('5').dynamic_type" \
	 "int"
 }

 gdb_breakpoint [gdb_get_line_number "break to inspect struct and union"]
 gdb_continue_to_breakpoint "break to inspect struct and union"

 gdb_py_test_silent_cmd "python intv = gdb.Value(1)" \
     "Create a value for subscript test" 1
 gdb_py_test_silent_cmd "python stringv = gdb.Value(\"foo\")" \
     "Create a value for subscript test" 1

 # Try to access an int with a subscript.  This should fail.
 gdb_test "python print intv" "1" "Baseline print of a Python value"
 gdb_test "python print intv\[0\]" "gdb.error: Cannot subscript requested type.*" \
     "Attempt to access an integer with a subscript"

 # Try to access a string with a subscript.  This should pass.
 gdb_test "python print stringv" "foo." "Baseline print of a Python value"
 gdb_test "python print stringv\[0\]" "f." "Attempt to access a string with a subscript"

 # Try to access an int array via a pointer with a subscript.  This should pass.
 gdb_py_test_silent_cmd "print p" "Build pointer to array" 1
 gdb_py_test_silent_cmd "python pointer = gdb.history(0)" "" 1
 gdb_test "python print pointer\[0\]" "1" "Access array via pointer with int subscript"
 gdb_test "python print pointer\[intv\]" "2" "Access array via pointer with value subscript"

 # Try to access a single dimension array with a subscript to the
 # result.  This should fail.
 gdb_test "python print pointer\[intv\]\[0\]" "gdb.error: Cannot subscript requested type.*" \
     "Attempt to access an integer with a subscript"

 # Lastly, test subscript access to an array with multiple
 # dimensions.  This should pass.
 gdb_py_test_silent_cmd "print {\"fu \",\"foo\",\"bar\"}" "Build array" 1
 gdb_py_test_silent_cmd "python marray = gdb.history(0)" "" 1
 gdb_test "python print marray\[1\]\[2\]" "o." "Test multiple subscript"
}

# A few tests of gdb.parse_and_eval.
proc test_parse_and_eval {} {
  gdb_test "python print gdb.parse_and_eval ('23')" "23" \
    "parse_and_eval constant test"
  gdb_test "python print gdb.parse_and_eval ('5 + 7')" "12" \
    "parse_and_eval simple expression test"
  gdb_test "python print type(gdb.parse_and_eval ('5 + 7'))" \
    ".type 'gdb.Value'."\
    "parse_and_eval type test"
}

# Test that values are hashable.
proc test_value_hash {} {
  gdb_py_test_multiple "Simple Python value dictionary" \
    "python" "" \
    "one = gdb.Value(1)" "" \
    "two = gdb.Value(2)" "" \
    "three = gdb.Value(3)" "" \
    "vdict = {one:\"one str\",two:\"two str\",three:\"three str\"}" "" \
    "end"
    gdb_test "python print vdict\[one\]" "one str" "Test dictionary hash"
    gdb_test "python print vdict\[two\]" "two str" "Test dictionary hash"
    gdb_test "python print vdict\[three\]" "three str" "Test dictionary hash"
    gdb_test "python print one.__hash__() == hash(one)" "True" "Test inbuilt hash"
}

# Build C and C++ versions of executable
build_inferior "${binfile}" "c"
build_inferior "${binfile}-cxx" "c++"

# Start with a fresh gdb.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

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

test_value_creation
test_value_numeric_ops
test_value_boolean
test_value_compare
test_objfiles
test_parse_and_eval
test_value_hash

# The following tests require execution.

if ![runto_main] then {
    fail "Can't run to main"
    return 0
}

test_value_in_inferior
test_inferior_function_call
test_lazy_strings
test_value_after_death

# Test either C or C++ values. 
test_subscript_regression "${binfile}" "c"
test_subscript_regression "${binfile}-cxx" "c++"
