diff options
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-strfns.c | 50 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-strfns.exp | 103 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-type.exp | 15 |
4 files changed, 174 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 3113c6a..27fe40c 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-08-10 Doug Evans <dje@google.com> + + * gdb.python/py-strfns.c: New file. + * gdb.python/py-strfns.exp: New file. + * gdb.python/py-type.exp (test_fields): Add vector tests. + 2012-08-10 Mike Frysinger <vapier@gentoo.org> PR cli/10436: diff --git a/gdb/testsuite/gdb.python/py-strfns.c b/gdb/testsuite/gdb.python/py-strfns.c new file mode 100644 index 0000000..db38bd9 --- /dev/null +++ b/gdb/testsuite/gdb.python/py-strfns.c @@ -0,0 +1,50 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2012 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/>. */ + +const char str1[] = "Hello."; +const char str2[] = "Hello."; +const char str3[] = "Goodbye."; + +const char buf1[] = { 0, 1, 2, 3 }; +const char buf2[] = { 0, 1, 2, 3 }; +const char buf3[] = { 0, 1, 2, 4 }; + +static void +func (const char *arg) +{ + return; /* Break func here. */ +} + +static void +bfunc (const char *arg) +{ + return; /* Break bfunc here. */ +} + +int +main () +{ + func (str1); + func (str2); + func (str3); + + bfunc (buf1); + bfunc (buf2); + bfunc (buf3); + + return 0; +} diff --git a/gdb/testsuite/gdb.python/py-strfns.exp b/gdb/testsuite/gdb.python/py-strfns.exp new file mode 100644 index 0000000..88d6cdf --- /dev/null +++ b/gdb/testsuite/gdb.python/py-strfns.exp @@ -0,0 +1,103 @@ +# Copyright (C) 2012 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 convenience +# functions in strfns.py. + +load_lib gdb-python.exp + +standard_testfile + +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } { + return -1 +} + +if ![runto_main] { + return 0 +} + +# Skip all tests if Python scripting is not enabled. +if { [skip_python_tests] } { continue } + +proc test_all_strfns { } { + gdb_test "p \$_streq (str1, str2)" " = 1" + gdb_test "p \$_streq (str1, str3)" " = 0" + + gdb_test "p \$_strlen (str1)" " = 6" + gdb_test "p \$_strlen (buf1)" " = 0" + + gdb_test "p \$_memeq (buf1, buf2, 4)" " = 1" + gdb_test "p \$_memeq (buf1, buf3, 4)" " = 0" + + gdb_test {p $_regex (str1, "Hello")} " = 1" + gdb_test {p $_regex (str1, "Help")} " = 0" + gdb_test {p $_regex (str1, "^Hello")} " = 1" + gdb_test {p $_regex (str1, "^Hello.$")} " = 1" +} + +test_all_strfns + +# Verify use in a conditional breakpoint. + +gdb_breakpoint [gdb_get_line_number "Break func here."] +gdb_test_no_output "condition \$bpnum \$_streq (arg, \"Goodbye.\")" +gdb_continue_to_breakpoint "Break func here." +gdb_test "p arg" "= $hex <str3> \"Goodbye.\"" + +gdb_breakpoint [gdb_get_line_number "Break bfunc here."] +gdb_test_no_output "condition \$bpnum \$_memeq (arg, buf3, 4)" +gdb_continue_to_breakpoint "Break bfunc here." +gdb_test "p /d {char\[4\]} arg" "= \\{0, 1, 2, 4\\}" + +# Verify use on a core file. + +proc test_strfns_core_file { } { + global objdir subdir gdb_prompt testfile + + set filename "${objdir}/${subdir}/py-strfns.core" + set escapedfilename [string_to_regexp $filename] + + gdb_test_multiple "gcore $filename" \ + "save a corefile" \ + { + -re "Saved corefile ${escapedfilename}\[\r\n\]+$gdb_prompt $" { + pass "save a corefile" + } + -re "Can't create a corefile\[\r\n\]+$gdb_prompt $" { + unsupported "save a corefile" + # No use proceeding from here. + return + } + } + + clean_restart $testfile + + gdb_test_multiple "core $filename" \ + "re-load generated corefile" \ + { + -re "Core was generated by .*$gdb_prompt $" { + pass "re-load generated corefile" + } + -re ".*$gdb_prompt $" { + fail "re-load generated corefile" + # No use proceeding from here. + return + } + } + + test_all_strfns +} + +test_strfns_core_file diff --git a/gdb/testsuite/gdb.python/py-type.exp b/gdb/testsuite/gdb.python/py-type.exp index 98a055e..b997c51 100644 --- a/gdb/testsuite/gdb.python/py-type.exp +++ b/gdb/testsuite/gdb.python/py-type.exp @@ -114,12 +114,27 @@ proc test_fields {lang} { gdb_test "python print len(fields)" "1" "Check the number of fields" gdb_test "python print fields\[0\].type" "<range type>" "Check array field type" + # Test gdb.Type.array. gdb_test "python print ar\[0\].cast(ar\[0\].type.array(1))" \ ".1, 2." "cast to array with one argument" gdb_test "python print ar\[0\].cast(ar\[0\].type.array(0, 1))" \ ".1, 2." "cast to array with two arguments" gdb_test "python print ar\[0\].type == ar\[0\].type" "True" + + # Test gdb.Type.vector. + # Note: vectors cast differently than arrays. Here ar[0] is replicated + # for the size of the vector. + gdb_py_test_silent_cmd \ + "python vec1 = ar\[0\].cast(ar\[0\].type.vector(1))" "set vec1" 1 + gdb_test "python print vec1" ".1, 1." "cast to vector with one argument" + gdb_py_test_silent_cmd \ + "python vec2 = ar\[0\].cast(ar\[0\].type.vector(0, 1))" "set vec2" 1 + gdb_test "python print vec2" ".1, 1." "cast to vector with two arguments" + gdb_test "python print vec1 == vec2" "True" + gdb_py_test_silent_cmd \ + "python vec3 = ar\[1\].cast(ar\[1\].type.vector(1))" "set vec3" 1 + gdb_test "python print vec1 == vec3" "False" } proc test_enums {} { |