1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
# stap_run2.exp
#
# Simple script for testing multiple lines of exact output.
# stap_run2 TEST_NAME
# TEST_NAME is path to the current test
# Additional arguments are passed to stap as-is.
#
# global result_string must be set to the expected output
proc stap_run2 { TEST_NAME args } {
# zap the srcdir prefix
set TEST_FILE $TEST_NAME
set TEST_NAME [regsub {.*/testsuite/} $TEST_NAME ""]
if {[llength $args] == 0} {
stap_run3 $TEST_NAME $TEST_FILE
} else {
eval stap_run3 "{$TEST_NAME $args} $TEST_FILE $args"
}
}
# stap_run3 TEST_NAME args
# TEST_NAME is the name of the test as shown in PASS/FAIL/SKIPPED messages.
# Additional arguments are passed to stap as-is, including likely a TEST_FILE name.
#
# global result_string must be set to the expected output
proc stap_run3 { TEST_NAME args } {
if {[info procs installtest_p] != "" && ![installtest_p]} { untested $TEST_NAME; return }
set cmd [concat stap $args]
send_log "executing: $cmd\n"
catch {eval exec $cmd} res
set n 0
set expected [split $::result_string "\n"]
foreach line [split $res "\n"] {
if {![string equal $line [lindex $expected $n]]} {
fail "$TEST_NAME"
send_log "line [expr $n + 1]: expected \"[lindex $expected $n]\"\n"
send_log "Got \"$line\"\n"
set m 0
foreach line2 [split $res "\n"] {
if {$m > $n} {
send_log " \"$line2\"\n"
}
incr m
}
return
}
incr n
}
if {[expr $n == [llength $expected]]} {
pass "$TEST_NAME"
} else {
fail "$TEST_NAME"
send_log "too few lines of output, got $n, expected [llength $expected]\n"
}
}
|