# 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 "python"
set srcfile  ${testfile}.c
set srcfile1  ${testfile}-1.c
set binfile  ${objdir}/${subdir}/${testfile}

if { [gdb_compile "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile1}" \
	  ${binfile} executable {debug}] != "" } {
    untested "Could not compile $binfile."
    return -1
}

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

gdb_test_multiple "python print 23" "verify python support" {
    -re "not supported.*$gdb_prompt $"	{
      unsupported "python support is disabled"

      # If Python is not supported, verify that sourcing a python script
      # causes an error.
      gdb_test "source $srcdir/$subdir/source2.py" \
	  "Error in sourced command file:.*" \
	  "source source2.py when python disabled"
      return -1
    }
    -re "$gdb_prompt $"	{}
}

gdb_py_test_multiple "multi-line python command" \
  "python" "" \
  "print 23" "" \
  "end" "23"

gdb_py_test_multiple "show python command" \
  "define zzq" "Type commands for definition of .* just \"end\"\\.*" \
  "python" "" \
  "print 23" "" \
  "end" "" \
  "end" "" \
  "show user zzq" "User command \"zzq\":.*  python.*print 23.*  end"

gdb_py_test_multiple "indented multi-line python command" \
  "python" "" \
  "def foo ():" "" \
  "  print 'hello, world!'" "" \
  "foo ()" "" \
  "end" "hello, world!"

gdb_test "source $srcdir/$subdir/source2.py" "yes" "source source2.py"

gdb_test "source -s source2.py" "yes" "source -s source2.py"

gdb_test "python print gdb.current_objfile()" "None"
gdb_test "python print gdb.objfiles()" "\\\[\\\]"

# Test http://bugs.python.org/issue4434 workaround in configure.ac
gdb_test "python import itertools; print 'IMPOR'+'TED'" "IMPORTED" "pythonX.Y/lib-dynload/*.so"

gdb_test_no_output \
    "python x = gdb.execute('printf \"%d\", 23', to_string = True)"
gdb_test "python print x" "23"

# Test post_event.
gdb_py_test_multiple "post event insertion" \
  "python" "" \
  "someVal = 0" "" \
  "class Foo(object):" "" \
  "  def __call__(self):" "" \
  "    global someVal" "" \
  "    someVal += 1" "" \
  "gdb.post_event(Foo())" "" \
  "end" ""

gdb_test "python print someVal" "1" "test post event execution"
gdb_test "python gdb.post_event(str(1))" "RuntimeError: Posted event is not callable.*" "Test non callable class"

# Test (no) pagination of the executed command.
gdb_test "show height" {Number of lines gdb thinks are in a page is unlimited\.}
set lines 10
gdb_test_no_output "set height $lines"

set test "verify pagination beforehand"
gdb_test_multiple "python print \"\\n\" * $lines" $test {
    -re "---Type <return>" {
	exp_continue
    }
    -re " to continue, or q <return>" {
	exp_continue
    }
    -re " to quit---$" {
	pass $test
    }
}
gdb_test "q" "Quit" "verify pagination beforehand: q"

gdb_test "python if gdb.execute('python print \"\\\\n\" * $lines', to_string=True) == \"\\n\" * [expr $lines + 1]: print \"yes\"" "yes" "gdb.execute does not page"

set test "verify pagination afterwards"
gdb_test_multiple "python print \"\\n\" * $lines" $test {
    -re "---Type <return>" {
	exp_continue
    }
    -re " to continue, or q <return>" {
	exp_continue
    }
    -re " to quit---$" {
	pass $test
    }
}
gdb_test "q" "Quit" "verify pagination afterwards: q"

gdb_test_no_output "set height 0"

gdb_test_no_output "python a = gdb.execute('help', to_string=True)" "collect help from uiout"

gdb_test "python print a" ".*aliases -- Aliases of other commands.*" "verify help to uiout"

# Test PR 12212, using InfThread.selected_thread() when no inferior is
# loaded.
gdb_py_test_silent_cmd "python nothread = gdb.selected_thread()" "Attempt to aquire thread with no inferior" 1
gdb_test "python print nothread == None" "True" "Ensure that no threads are returned"

# Start with a fresh gdb.
clean_restart ${testfile}

# The following tests require execution.

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

runto [gdb_get_line_number "Break to end."]

# Test gdb.decode_line.
gdb_test "python gdb.decode_line(\"main.c:43\")" \
    "gdb.error: No source file named main.c.*" "test decode_line no source named main"

gdb_py_test_silent_cmd "python symtab = gdb.decode_line()" "test decode_line current location" 1
gdb_test "python print len(symtab)" "2" "Test decode_line current location"
gdb_test "python print symtab\[0\]" "None" "Test decode_line expression parse"
gdb_test "python print len(symtab\[1\])" "1" "Test decode_line current location"
gdb_test "python print symtab\[1\]\[0\].symtab" ".*gdb.python/python.c.*" "Test decode_line current locationn filename"
gdb_test "python print symtab\[1\]\[0\].line" "22" "Test decode_line current location line number"

gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"python.c:26 if foo\")" "test decode_line python.c:26" 1
gdb_test "python print len(symtab)" "2" "Test decode_line python.c:26 length"
gdb_test "python print symtab\[0\]" "if foo" "Test decode_line expression parse"
gdb_test "python print len(symtab\[1\])" "1" "Test decode_line python.c:26 length"
gdb_test "python print symtab\[1\]\[0\].symtab" ".*gdb.python/python.c.*" "Test decode_line python.c:26 filename"
gdb_test "python print symtab\[1\]\[0\].line" "26" "Test decode_line python.c:26 line number"

gdb_test "python gdb.decode_line(\"randomfunc\")" \
    "gdb.error: Function \"randomfunc\" not defined.*" "test decode_line randomfunc"
gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"func1\")" "test decode_line func1()" 1
gdb_test "python print len(symtab)" "2" "Test decode_line func1 length"
gdb_test "python print len(symtab\[1\])" "1" "Test decode_line func1 length"
gdb_test "python print symtab\[1\]\[0\].symtab" ".*gdb.python/python-1.c.*" "Test decode_line func1 filename"
gdb_test "python print symtab\[1\]\[0\].line" "19" "Test decode_line func1 line number"

# gdb.write
gdb_test "python print sys.stderr" ".*__main__.GdbOutputErrorFile instance at.*" "Test stderr location"
gdb_test "python print sys.stdout" ".*__main__.GdbOutputFile instance at.*" "Test stdout location"
gdb_test "python gdb.write(\"Foo\\n\")" "Foo" "Test default write"
gdb_test "python gdb.write(\"Error stream\\n\", stream=gdb.STDERR)" "Error stream" "Test stderr write"
gdb_test "python gdb.write(\"Normal stream\\n\", stream=gdb.STDOUT)" "Normal stream" "Test stdout write"
gdb_test "python gdb.write(\"Log stream\\n\", stream=gdb.STDLOG)" "Log stream" "Test stdlog write"

# Deprecate maint set/show python print-stack
gdb_test "maint show python print-stack" \
    "Warning: command 'maintenance show python print-stack' is deprecated.*Use 'show python print-stack'.*" \
    "Test deprecation maint show warning."
gdb_test "maint set python print-stack off" \
    "Warning: command 'maintenance set python print-stack' is deprecated.*Use 'set python print-stack'.*" \
    "Test deprecation maint set warning."
gdb_test "show python print-stack" \
    "Whether Python stack will be printed on error is off.*" \
    "Test print-backtrace show setting. Default off."
gdb_py_test_silent_cmd "set python print-stack on" \
    "Test print-backtrace set setting" 1
gdb_test "show python print-stack" \
    "Whether Python stack will be printed on error is on.*" \

# Test prompt substituion

gdb_py_test_multiple "prompt substitution" \
  "python" "" \
  "someCounter = 0" "" \
  "def prompt(current):" "" \
  "   global someCounter" "" \
  "   if (current == \"testfake \"):" "" \
  "      return None" "" \
  "   someCounter = someCounter + 1" "" \
  "   return \"py prompt \" + str (someCounter) + \" \"" "" \
  "end" ""

gdb_py_test_multiple "prompt substitution readline" \
  "python" "" \
  "pCounter = 0" "" \
  "def program_prompt(current):" "" \
  "   global pCounter" "" \
  "   if (current == \">\"):" "" \
  "      pCounter = pCounter + 1" "" \
  "      return \"python line \" + str (pCounter) + \": \"" "" \
  "   return None" "" \
  "end" ""

set newprompt "py prompt 1"
set newprompt2 "py prompt 2"
set testfake "testfake"

gdb_test_multiple "python gdb.prompt_hook = prompt" "set the hook" {
    -re "\[\r\n\]$newprompt $" {
	pass "set hook"
    }
}

gdb_test_multiple "set prompt testfake " "set testfake prompt in GDB" {
    -re "\[\r\n\]$testfake $" {
	pass "set prompt testfake"
    }
}

gdb_test_multiple "show prompt" "show testfake prompt" {
    -re "Gdb's prompt is \"$testfake \"..* $" {
	pass "show prompt shows guarded prompt"
    }
}

gdb_test_multiple "set prompt blah " "set blah in GDB" {
    -re "\[\r\n\]$newprompt2 $" {
	pass "set prompt blah overriden"
    }
}

gdb_test_multiple "python gdb.prompt_hook = None" "Delete hook" {
    -re "\[\r\n\]$newprompt2 $" {
	pass "Delete old hook"
    }
}

gdb_test_multiple "set prompt $gdb_prompt " "set default prompt" {
    -re "\[\r\n\]$gdb_prompt $" {
	pass "set default prompt"
    }
}

gdb_test_multiple "python gdb.prompt_hook = program_prompt" "set the hook" {
    -re "\[\r\n\]$gdb_prompt $" {
	pass "set programming hook"
    }
}

gdb_test_multiple "python" "test we ignore substituion for seconday prompts" {
    -re "\r\n>$" {
	pass "readline secondary are not substituted"
    }
}

gdb_test_multiple "end" "end programming" {
    -re "\[\r\n\]$gdb_prompt $" {
	pass "end programming"
    }
}

gdb_py_test_multiple "prompt substitution readline" \
  "python" "" \
  "import gdb.command.prompt" "" \
  "end" ""

gdb_test_multiple "set extended-prompt one two three " \
    "set basic extended prompt" {
    -re "\[\r\n\]one two three $" {
	pass "set basic extended prompt"
    }
}

gdb_test_multiple "set extended-prompt \\w " \
    "set extended prompt working directory" {
    -re "\[\r\n\].*gdb.*testsuite.* $" {
	pass "set extended prompt working directory"
    }
}

gdb_test_multiple "set extended-prompt some param \\p{python print-stack} " \
    "set extended prompt parameter" {
    -re "\[\r\n\]some param True $" {
	pass "set extended prompt parameter"
    }
}
