1 # Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 # This file is part of the GDB testsuite. It tests the mechanism
17 # exposing values to Python.
24 set srcfile ${testfile}.c
25 set srcfile1 ${testfile}-1.c
26 set binfile ${objdir}/${subdir}/${testfile}
28 if { [gdb_compile "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile1}" \
29 ${binfile} executable {debug}] != "" } {
30 untested "Could not compile $binfile."
34 # Start with a fresh gdb.
37 gdb_reinitialize_dir $srcdir/$subdir
39 # Skip all tests if Python scripting is not enabled.
40 if { [skip_python_tests] } { continue }
42 # Run a command in GDB, and report a failure if a Python exception is thrown.
43 # If report_pass is true, report a pass if no exception is thrown.
44 proc gdb_py_test_silent_cmd {cmd name report_pass} {
47 gdb_test_multiple $cmd $name {
48 -re "Traceback.*$gdb_prompt $" { fail $name }
49 -re "$gdb_prompt $" { if $report_pass { pass $name } }
53 gdb_test_multiple "python print 23" "verify python support" {
54 -re "not supported.*$gdb_prompt $" {
55 unsupported "python support is disabled"
57 # If Python is not supported, verify that sourcing a python script
59 gdb_test "source $srcdir/$subdir/source2.py" "Error in sourced command file:.*"
62 -re "$gdb_prompt $" {}
65 # Usage: gdb_py_test_multiple NAME INPUT RESULT {INPUT RESULT}...
66 # Run a test named NAME, consisting of multiple lines of input.
67 # After each input line INPUT, search for result line RESULT.
68 # Succeed if all results are seen; fail otherwise.
69 proc gdb_py_test_multiple {name args} {
71 foreach {input result} $args {
72 if {[gdb_test_multiple $input "$name - $input" {
73 -re "\[\r\n\]*($result)\[\r\n\]+($gdb_prompt | *>)$" {
83 gdb_py_test_multiple "multi-line python command" \
88 gdb_py_test_multiple "show python command" \
89 "define zzq" "Type commands for definition of .* just \"end\"\\.*" \
94 "show user zzq" "User command \"zzq\":.* python.*print 23.* end"
96 gdb_py_test_multiple "indented multi-line python command" \
99 " print 'hello, world!'" "" \
101 "end" "hello, world!"
103 gdb_test "source $srcdir/$subdir/source2.py" "yes"
105 gdb_test "python print gdb.current_objfile()" "None"
106 gdb_test "python print gdb.objfiles()" "\\\[\\\]"
108 # Test http://bugs.python.org/issue4434 workaround in configure.ac
109 gdb_test "python import itertools; print 'IMPOR'+'TED'" "IMPORTED" "pythonX.Y/lib-dynload/*.so"
112 "python x = gdb.execute('printf \"%d\", 23', to_string = True)"
113 gdb_test "python print x" "23"
116 gdb_py_test_multiple "post event insertion" \
119 "class Foo(object):" "" \
120 " def __call__(self):" "" \
121 " global someVal" "" \
123 "gdb.post_event(Foo())" "" \
126 gdb_test "python print someVal" "1" "test post event execution"
127 gdb_test "python gdb.post_event(str(1))" "RuntimeError: Posted event is not callable.*" "Test non callable class"
129 # Test (no) pagination of the executed command.
130 gdb_test "show height" {Number of lines gdb thinks are in a page is unlimited\.}
132 gdb_test_no_output "set height $lines"
134 set test "verify pagination beforehand"
135 gdb_test_multiple "python print \"\\n\" * $lines" $test {
136 -re "---Type <return> to continue, or q <return> to quit---$" {
140 gdb_test "q" "Quit" "verify pagination beforehand: q"
142 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"
144 set test "verify pagination afterwards"
145 gdb_test_multiple "python print \"\\n\" * $lines" $test {
146 -re "---Type <return> to continue, or q <return> to quit---$" {
150 gdb_test "q" "Quit" "verify pagination afterwards: q"
152 # Start with a fresh gdb.
153 clean_restart ${testfile}
155 # The following tests require execution.
157 if ![runto_main] then {
158 fail "Can't run to main"
162 runto [gdb_get_line_number "Break to end."]
164 # Test gdb.decode_line.
165 gdb_test "python gdb.decode_line(\"main.c:43\")" \
166 "RuntimeError: No source file named main.c.*" "test decode_line no source named main"
168 gdb_py_test_silent_cmd "python symtab = gdb.decode_line()" "test decode_line current location" 1
169 gdb_test "python print len(symtab)" "2" "Test decode_line current location"
170 gdb_test "python print symtab\[0\]" "None" "Test decode_line expression parse"
171 gdb_test "python print len(symtab\[1\])" "1" "Test decode_line current location"
172 gdb_test "python print symtab\[1\]\[0\].symtab" "gdb/testsuite/gdb.python/python.c.*" "Test decode_line current locationn filename"
173 gdb_test "python print symtab\[1\]\[0\].line" "22" "Test decode_line current location line number"
175 gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"python.c:26 if foo\")" "test decode_line python.c:26" 1
176 gdb_test "python print len(symtab)" "2" "Test decode_line python.c:26 length"
177 gdb_test "python print symtab\[0\]" "if foo" "Test decode_line expression parse"
178 gdb_test "python print len(symtab\[1\])" "1" "Test decode_line python.c:26 length"
179 gdb_test "python print symtab\[1\]\[0\].symtab" "gdb/testsuite/gdb.python/python.c.*" "Test decode_line python.c:26 filename"
180 gdb_test "python print symtab\[1\]\[0\].line" "26" "Test decode_line python.c:26 line number"
182 gdb_test "python gdb.decode_line(\"randomfunc\")" \
183 "RuntimeError: Function \"randomfunc\" not defined.*" "test decode_line randomfunc"
184 gdb_py_test_silent_cmd "python symtab = gdb.decode_line(\"func1\")" "test decode_line func1()" 1
185 gdb_test "python print len(symtab)" "2" "Test decode_line func1 length"
186 gdb_test "python print len(symtab\[1\])" "1" "Test decode_line func1 length"
187 gdb_test "python print symtab\[1\]\[0\].symtab" "gdb/testsuite/gdb.python/python-1.c.*" "Test decode_line func1 filename"
188 gdb_test "python print symtab\[1\]\[0\].line" "19" "Test decode_line func1 line number"