v/vlib/compiler/tests/live_test.v

98 lines
2.1 KiB
V
Executable File

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
}