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

if $tracelevel then {
    strace $tracelevel
}

set testfile "py-value"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
    untested "Couldn't compile ${srcfile}"
    return -1
}

# Usage: gdb_py_test_multiple NAME INPUT RESULT {INPUT RESULT}...
# Run a test named NAME, consisting of multiple lines of input.
# After each input line INPUT, search for result line RESULT.
# Succeed if all results are seen; fail otherwise.
proc gdb_py_test_multiple {name args} {
    global gdb_prompt
    foreach {input result} $args {
	if {[gdb_test_multiple $input "$name - $input" {
	    -re "\[\r\n\]*($result)\[\r\n\]+($gdb_prompt | *>)$" {
		pass "$name - $input"
	    }
	}]} {
	    return 1
	}
    }
    return 0
}

# Run a command in GDB, and report a failure if a Python exception is thrown.
# If report_pass is true, report a pass if no exception is thrown.
proc gdb_py_test_silent_cmd {cmd name report_pass} {
  global gdb_prompt

  gdb_test_multiple $cmd $name {
      -re "Traceback.*$gdb_prompt $"  { fail $name }
      -re "$gdb_prompt $"	      { if $report_pass { pass $name } }
  }
}

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 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"
}


# 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"

    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 {lang} {

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

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

 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"
 }

 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\]" "RuntimeError: 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\]" "RuntimeError: 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"
}


# 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_lazy_strings
test_value_after_death

# The following test recompiles the binary to test either C or C++
# values. 
test_subscript_regression "c++"
test_subscript_regression "c"
