f28a0564dd
The following test is found in python/py-linetable.exp: gdb_test "python print sorted(fset)" \ "\[20L, 21L, 22L, 24L, 25L, 28L, 29L, 30L, 32L, 33L, 37L, 39L, 40L, 42L, 44L, 45L, 46L\].*" \ "Test frozen set contains line numbers" I noticed that it passed when using Python 3, even though it should fail because of the missing parentheses for the call print. There needs to be more escaping of the square brackets. Currently, it is interpreted as "any one character from this big list of characters, followed by .*". When adding the required amount of backslashes, the test starts failing as it should. Moreover, both in Python 2.7 and Python 3.3 the numbers don't have the L suffix, so now the test fails because of that. Anybody knows why they were there in the first place? I just tested with Python 2.4 and there are no Ls. gdb/testsuite/ChangeLog: * gdb.python/py-linetable.exp: Escape properly sorted(fset) test expected output. Add parentheses for the call to print. Remove L suffix from integers. Signed-off-by: Simon Marchi <simon.marchi@ericsson.com>
76 lines
2.5 KiB
Text
76 lines
2.5 KiB
Text
# Copyright 2013-2014 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/>.
|
|
|
|
load_lib gdb-python.exp
|
|
set opts {}
|
|
standard_testfile .S
|
|
|
|
if [info exists COMPILE] {
|
|
# make check RUNTESTFLAGS="gdb.python/py-linetable.exp COMPILE=1"
|
|
standard_testfile
|
|
lappend opts debug optimize=-O2
|
|
} elseif { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
|
|
verbose "Skipping ${testfile}."
|
|
return
|
|
}
|
|
|
|
if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} $opts] } {
|
|
return -1
|
|
}
|
|
|
|
if ![runto_main] {
|
|
return -1
|
|
}
|
|
|
|
# Skip all tests if Python scripting is not enabled.
|
|
if { [skip_python_tests] } { continue }
|
|
|
|
gdb_py_test_silent_cmd "python lt = gdb.selected_frame().find_sal().symtab.linetable()" \
|
|
"get instruction" 0
|
|
|
|
gdb_py_test_multiple "input simple command" \
|
|
"python" "" \
|
|
"def list_lines():" "" \
|
|
" for l in lt:" "" \
|
|
" print 'L' +str(l.line)+' A '+hex(l.pc)" "" \
|
|
"end" ""
|
|
|
|
gdb_test "python list_lines()" \
|
|
"L20 A $hex.*L21 A $hex.*L22 A $hex.*L24 A $hex.*L25 A $hex.*L40 A $hex.*L42 A $hex.*L44 A $hex.*L42 A $hex.*L46 A $hex.*" \
|
|
"test linetable iterator addr"
|
|
gdb_test "python print len(lt.line(42))" "2" \
|
|
"Test length of a multiple pc line"
|
|
gdb_test "python print len(lt.line(20))" "1" \
|
|
"Test length of a single pc line"
|
|
gdb_test "python print lt.line(1)" "None" \
|
|
"Test None returned for line with no pc"
|
|
|
|
# Test gdb.Linetable.sourcelines ()
|
|
gdb_py_test_silent_cmd "python fset = lt.source_lines()" \
|
|
"Get all source lines into a frozen set" 0
|
|
gdb_test "python print (sorted(fset))" \
|
|
"\\\[20, 21, 22, 24, 25, 28, 29, 30, 32, 33, 37, 39, 40, 42, 44, 45, 46\\\].*" \
|
|
"Test frozen set contains line numbers"
|
|
|
|
# Test gdb.Linetable.has_line ()
|
|
gdb_test "python print lt.has_line(20)" \
|
|
"True.*" \
|
|
"Test has_pcs at line 20"
|
|
gdb_test "python print lt.has_line(44)" \
|
|
"True.*" \
|
|
"Test has_pcs at line 40"
|
|
gdb_test "python print lt.has_line(10)" \
|
|
"False.*" \
|
|
"Test has_pcs at line 10"
|