98 lines
2.1 KiB
V
98 lines
2.1 KiB
V
|
import os
|
||
|
import time
|
||
|
|
||
|
const (
|
||
|
vexe = os.getenv('VEXE')
|
||
|
source_file = os.join_path(os.temp_dir(), 'generated_live_program.v')
|
||
|
output_file = os.join_path(os.temp_dir(), 'generated_live_program.output.txt')
|
||
|
live_program_source = "
|
||
|
module main
|
||
|
import time
|
||
|
|
||
|
[live]
|
||
|
fn pmessage() {
|
||
|
println('ORIGINAL')
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
println('START')
|
||
|
for i := 0; i<6*100; i++ {
|
||
|
pmessage()
|
||
|
time.sleep_ms(10)
|
||
|
}
|
||
|
println('END')
|
||
|
}
|
||
|
"
|
||
|
)
|
||
|
|
||
|
//
|
||
|
|
||
|
fn testsuite_begin(){
|
||
|
if os.user_os() != 'linux' && os.getenv('FORCE_LIVE_TEST').len == 0 {
|
||
|
eprintln('Testing the runtime behaviour of -live mode,')
|
||
|
eprintln('is reliable only on Linux for now.')
|
||
|
eprintln('You can still do it by setting FORCE_LIVE_TEST=1 .')
|
||
|
exit(0)
|
||
|
}
|
||
|
os.write_file(source_file, live_program_source)
|
||
|
}
|
||
|
|
||
|
fn testsuite_end(){
|
||
|
os.rm( source_file )
|
||
|
eprintln('source: $source_file')
|
||
|
eprintln('output: $output_file')
|
||
|
$if !windows {
|
||
|
os.system('cat $output_file')
|
||
|
}
|
||
|
println('---------------------------------------------------------------------------')
|
||
|
output_lines := os.read_lines( output_file ) or {
|
||
|
return
|
||
|
}
|
||
|
mut histogram := map[string]int
|
||
|
for line in output_lines {
|
||
|
histogram[line] = histogram[line] + 1
|
||
|
}
|
||
|
for k,v in histogram {
|
||
|
println('> found ${k} $v times.')
|
||
|
}
|
||
|
println('---------------------------------------------------------------------------')
|
||
|
assert histogram['START'] > 0
|
||
|
assert histogram['END'] > 0
|
||
|
assert histogram['CHANGED'] + histogram['ANOTHER'] > 0
|
||
|
assert histogram['ORIGINAL'] > 0
|
||
|
}
|
||
|
|
||
|
fn change_source(new string){
|
||
|
time.sleep_ms(250)
|
||
|
eprintln('> change ORIGINAL to: $new')
|
||
|
os.write_file(source_file,live_program_source.replace('ORIGINAL', new))
|
||
|
time.sleep_ms(1000)
|
||
|
eprintln('> done.')
|
||
|
}
|
||
|
|
||
|
//
|
||
|
|
||
|
fn test_live_program_can_be_compiled(){
|
||
|
cmd := '$vexe -live run $source_file > $output_file &'
|
||
|
eprintln('Compiling and running with: $cmd')
|
||
|
res := os.system(cmd)
|
||
|
eprintln('... running in the background')
|
||
|
time.sleep_ms(3000)
|
||
|
assert res == 0
|
||
|
}
|
||
|
|
||
|
fn test_live_program_can_be_changed_1(){
|
||
|
change_source('CHANGED')
|
||
|
assert true
|
||
|
}
|
||
|
|
||
|
fn test_live_program_can_be_changed_2(){
|
||
|
change_source('ANOTHER')
|
||
|
assert true
|
||
|
}
|
||
|
|
||
|
fn test_live_program_has_ended(){
|
||
|
time.sleep_ms(10*1000)
|
||
|
assert true
|
||
|
}
|