# every test should always be run and always return some status. # so, if we lose sync with a multi-test program, aborted will be used # to flag the remainder of the tests as untested. #set aborted 0 # only match with color codes since "failed" / "OK" might otherwise # be part of the output... #set color 1 set xfail 0 proc onesimple { test_name match } { global verbose global aborted global testprefix if { $aborted > 0 } { untested "$testprefix$test_name" return } if { $verbose > 0 } { send_user "$testprefix$test_name$note\n" } expect { "$match" { pass "$testprefix$test_name"; } eof { fail "$testprefix$test_name"; set aborted 1; } timeout { unresolved "$testprefix$test_name"; set aborted 1; } } } proc onetest { test_name note start } { global aborted global testprefix global verbose global color global xfail if { $aborted > 0 } { untested "$testprefix$test_name" return } if { $verbose > 0 } { send_user "$testprefix$test_name$note\n" } expect { "$start" { } eof { unresolved "$testprefix$test_name"; set aborted 1; } timeout { unresolved "$testprefix$test_name"; set aborted 1; } } if { $aborted > 0 } { send_user "sync failed: $testprefix$test_name$note -- $testprefix aborted!\n" return } if { $color } { set pat "(32mOK|31mfailed)" } else { set pat "(OK|failed)" } expect { # need this because otherwise expect will skip over a "failed" and # grab the next "OK" (or the other way around) -re "$pat" { if { "$expect_out(0,string)" == "32mOK" || "$expect_out(0,string)" == "OK" } { pass "$testprefix$test_name" } else { if { $xfail } { xfail "$testprefix$test_name" } else { fail "$testprefix$test_name" } } return } eof { unresolved "$testprefix$test_name"; set aborted 1; } timeout { unresolved "$testprefix$test_name"; set aborted 1; } } if { $aborted > 0 } { send_user "failed: $testprefix$test_name$note -- $testprefix aborted!\n" return } } proc headerline { line } { global aborted if { $aborted > 0 } { return; } expect { $line { return; } eof { send_user "numbering mismatch!\n"; set aborted 1; } timeout { send_user "numbering mismatch!\n"; set aborted 1; } } } proc simpletest { start } { onetest "$start" "" "$start" }