binutils-gdb/gdb/testsuite/lib/gdb-guile.exp
Joel Brobecker 61baf725ec update copyright year range in GDB files
This applies the second part of GDB's End of Year Procedure, which
updates the copyright year range in all of GDB's files.

gdb/ChangeLog:

        Update copyright year range in all GDB files.
2017-01-01 10:52:34 +04:00

127 lines
4.1 KiB
Text

# Copyright 2010-2017 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/>.
# Utilities for Guile-scripting related tests.
# Guile doesn't print the 0x prefix on hex numbers.
set ghex {[0-9a-f]+}
# Return a 1 for configurations that do not support Guile scripting.
proc skip_guile_tests {} {
global gdb_prompt
gdb_test_multiple "guile (display \"test\\n\")" "verify guile support" {
-re "Undefined command.*$gdb_prompt $" {
unsupported "Guile not supported."
return 1
}
-re "not supported.*$gdb_prompt $" {
unsupported "Guile support is disabled."
return 1
}
-re "$gdb_prompt $" {}
}
return 0
}
# Run a command in GDB, and report a failure if a Scheme exception is thrown.
# If report_pass is true, report a pass if no exception is thrown.
# This also catches the "Undefined command" error that happens if the user
# passes, e.g., "(print foo)" instead of "guile (print foo)".
proc gdb_scm_test_silent_cmd { cmd name {report_pass 1} } {
global gdb_prompt
gdb_test_multiple $cmd $name {
-re "Backtrace.*$gdb_prompt $" { fail $name }
-re "ERROR.*$gdb_prompt $" { fail $name }
-re "Undefined command: .*$gdb_prompt $" { fail $name }
-re "$gdb_prompt $" { if $report_pass { pass $name } }
}
}
# Usage: gdb_test_multiline 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.
# FIXME: Move to gdb.exp and remove Python's gdb_py_test_multiple.
proc gdb_test_multiline { 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
}
# Load Scheme file FILE_NAME.
# TEST_NAME can be used to specify the name of the test,
# otherwise a standard test name is provided.
#
# Note: When Guile loads something and auto-compilation is enabled
# (which is useful and the default), then the first time a file is loaded
# Guile will compile the file and store the result somewhere
# (e.g., $HOME/.cache/guile). Output of the compilation process will
# appear in gdb.log. But since Guile only does this when necessary
# don't be confused if you don't always see it - Guile just skipped it
# because it thought it was unnecessary.
proc gdb_scm_load_file { file_name {test_name ""} } {
if { $test_name == "" } {
set test_name "guile (load \"[file tail $file_name]\")"
}
# Note: This can produce output if Guile compiles the file.
gdb_scm_test_silent_cmd "guile (load \"$file_name\")" $test_name
}
# Install various utilities in Guile to simplify tests.
#
# print - combination of display + newline
proc gdb_install_guile_utils { } {
# Define utilities in Guile to save needing (newline) all the time,
# and in the case of "print" add a prefix to help erroneous passes.
gdb_test_no_output "guile (define (print x) (format #t \"= ~A\" x) (newline))"
gdb_test_no_output "guile (define (raw-print x) (format #t \"= ~S\" x) (newline))"
}
# Install the gdb module.
proc gdb_install_guile_module { } {
gdb_test_no_output "guile (use-modules (gdb))"
}
# Wrapper around runto_main that installs the guile utils and module.
# The result is the same as for runto_main.
proc gdb_guile_runto_main { } {
if ![runto_main] {
fail "can't run to main"
return 0
}
gdb_install_guile_utils
gdb_install_guile_module
return 1
}