ycl

Artifact [6caac706e0]
Login

Artifact [6caac706e0]

Artifact 6caac706e026a6640f5a3f397ad989cd49fbd80d:


#! /bin/env tclsh

package require {ycl test}

proc suite_main {} {
	namespace import [yclprefix]::test::cleanup1
	[yclprefix]::test::init

	package require {ycl list}
	namespace import [yclprefix]::list::compare
	namespace import [yclprefix]::list::sl

	package require {ycl interp process}
	namespace import [yclprefix]::interp::process


	test kill {
	} -body {
		set res [process new cmd {} kill 0]
		lappend res [llength [process list]]
		process kill [lindex [process list] 0]
		lappend res [llength [process list]]
		return $res
	} -cleanup [cleanup1] -result [sl {
		1 0
	}]


	test kill_calls {
	} -body {
		coroutine [info cmdcount] apply [list {} {
			process new cmd {while 1 {after 1000}} kill 0
		} [namespace current]]
		lappend res [llength [process list]]
		catch {process kill [lindex [process list] 0]} cres copts
		if {![string is list -strict $cres] || [llength $cres] % 2 == 0} {
			return -options $copts
		}
		set cres [lassign $cres[set cres {}] message]
		lappend res $message status [dict get $cres status]
		lappend res [llength [process list]]
		return $res
	} -cleanup [cleanup1] -result [sl {
		1 {process killed} status 127 0
	}]


	test list {
	} -body {
		process new cmd {} kill 0 procname proc1
		process new cmd {} kill 0 procname proc2
		set expected [lsort -dictionary [list $proc1 $proc2]]
		set processes [process list]
		lappend res [compare ::tcl::mathop::== expected processes]
		return $res
	} -cleanup [cleanup1] -result [sl {
		-1
	}]


	test new {
	} -body {
		set res [process new cmd {set a hello}]
		return $res
	} -cleanup [cleanup1] -result [sl {
		hello
	}]


	test new_exit {
	} -body {
		catch {process new cmd {exit 99}} cres copts
		if {![string is list -strict $cres]} {
			dict incr copts -level
			return -code options $copts
		}
		set cres [lassign $cres[set cres {}] message]
		lappend res [dict get $cres status]
		return $res
	} -cleanup [cleanup1] -result [sl {
		99
	}]

	cleanupTests
}