
# 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 config_h [open "../config.h" "r"]
set config_h_text [read $config_h]
close $config_h
set i [string first "#define HAVE_IPV6" $config_h_text]
if { $i >= 0 } {
	set have_ipv6 1
} else {
	set have_ipv6 0
}
send_user "IPv6 enabled: $have_ipv6\n"
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"
}

proc simpletest_nov6 { start } {
	global have_ipv6
	global xfail

	set xfail [expr 1-$have_ipv6]
	onetest "$start" "" "$start"
	set xfail 0
}


