63 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			V
		
	
	
import os
 | 
						|
import time
 | 
						|
 | 
						|
fn test_getpid() {
 | 
						|
	pid := os.getpid()
 | 
						|
	eprintln('current pid: $pid')
 | 
						|
	assert pid != 0
 | 
						|
}
 | 
						|
 | 
						|
fn test_run() {
 | 
						|
	if os.user_os() == 'windows' {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	//
 | 
						|
	mut p := os.new_process('/bin/sleep')
 | 
						|
	p.set_args(['0.2'])
 | 
						|
	p.run()
 | 
						|
	assert p.status == .running
 | 
						|
	assert p.pid > 0
 | 
						|
	assert p.pid != os.getpid()
 | 
						|
	mut i := 0
 | 
						|
	for {
 | 
						|
		if !p.is_alive() {
 | 
						|
			break
 | 
						|
		}
 | 
						|
		os.system('ps -opid= -oppid= -ouser= -onice= -of= -ovsz= -orss= -otime= -oargs= -p $p.pid')
 | 
						|
		time.sleep_ms(50)
 | 
						|
		i++
 | 
						|
	}
 | 
						|
	p.wait()
 | 
						|
	assert p.code == 0
 | 
						|
	assert p.status == .exited
 | 
						|
	//
 | 
						|
	eprintln('polling iterations: $i')
 | 
						|
	assert i < 20
 | 
						|
}
 | 
						|
 | 
						|
fn test_wait() {
 | 
						|
	if os.user_os() == 'windows' {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	mut p := os.new_process('/bin/date')
 | 
						|
	p.wait()
 | 
						|
	assert p.pid != os.getpid()
 | 
						|
	assert p.code == 0
 | 
						|
	assert p.status == .exited
 | 
						|
}
 | 
						|
 | 
						|
fn test_slurping_output() {
 | 
						|
	if os.user_os() == 'windows' {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	mut p := os.new_process('/bin/date')
 | 
						|
	p.set_redirect_stdio()
 | 
						|
	p.wait()
 | 
						|
	assert p.code == 0
 | 
						|
	assert p.status == .exited
 | 
						|
	output := p.stdout_slurp().trim_space()
 | 
						|
	errors := p.stderr_slurp().trim_space()
 | 
						|
	eprintln('p output: "$output"')
 | 
						|
	eprintln('p errors: "$errors"')
 | 
						|
}
 |