puts stderr "Running run-tests.tcl"

set exit_status 0

# Test wrapper
proc do_test {test expected_return_code expected_result_regexp} {
	incr ::tests_done
	set ::errorInfo {}
	set ::errorCode {}
	set observed_return_code [catch {uplevel #0 $test} observed_result]
	if {$observed_return_code == $expected_return_code && [regexp $expected_result_regexp $observed_result]} {
		return
	} else {
		set bad_message    "Doing test [list $test]...FAILURE\n"
		append bad_message "[list code expected $expected_return_code observed $observed_return_code]\n"
		append bad_message "[list result expected $expected_result_regexp observed $observed_result]\n"
		append bad_message "errorInfo $::errorInfo"
		error $bad_message
	}
}

foreach test_file [lsort [glob test-*.tcl]] {
	puts -nonewline stderr "Running tests in $test_file..."
	set ::tests_done 0
	set rv [catch {source $test_file} result]

	puts -nonewline stderr "$::tests_done tests done..."

	if {$rv && $rv != 2} {
		puts stderr "FAIL:  $::errorInfo"
		set exit_status 1
	} else {
		puts stderr "OK"
	}
}

exit $exit_status

