repl: tests show difference (in color where available)
parent
d4bae356ba
commit
3fbfc5fbd4
|
@ -1 +1,3 @@
|
||||||
run
|
run
|
||||||
|
*.repl.result.txt
|
||||||
|
*.repl.expected.txt
|
||||||
|
|
|
@ -25,6 +25,20 @@ pub fn full_path_to_v() string {
|
||||||
return vexec
|
return vexec
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn find_working_diff_command() ?string {
|
||||||
|
for diffcmd in ['colordiff', 'diff', 'colordiff.exe', 'diff.exe'] {
|
||||||
|
p := os.exec('$diffcmd --version') or { continue }
|
||||||
|
if p.exit_code == 0 { return diffcmd }
|
||||||
|
}
|
||||||
|
return error('no working diff command found')
|
||||||
|
}
|
||||||
|
|
||||||
|
fn diff_files( file_result, file_expected string ) string {
|
||||||
|
diffcmd := find_working_diff_command() or { return err }
|
||||||
|
diff := os.exec('$diffcmd --minimal --text --unified=2 $file_result $file_expected') or { return 'found diff command "$diffcmd" does not work' }
|
||||||
|
return diff.output
|
||||||
|
}
|
||||||
|
|
||||||
pub fn run_repl_file(wd string, vexec string, file string) ?string {
|
pub fn run_repl_file(wd string, vexec string, file string) ?string {
|
||||||
fcontent := os.read_file(file) or { return error('Could not read file $file') }
|
fcontent := os.read_file(file) or { return error('Could not read file $file') }
|
||||||
content := fcontent.replace('\r', '')
|
content := fcontent.replace('\r', '')
|
||||||
|
@ -43,11 +57,18 @@ pub fn run_repl_file(wd string, vexec string, file string) ?string {
|
||||||
result := r.output.replace('\r','').replace('>>> ', '').replace('>>>', '').replace('... ', '').all_after('Use Ctrl-C or `exit` to exit\n').replace(wd, '' )
|
result := r.output.replace('\r','').replace('>>> ', '').replace('>>>', '').replace('... ', '').all_after('Use Ctrl-C or `exit` to exit\n').replace(wd, '' )
|
||||||
|
|
||||||
if result != output {
|
if result != output {
|
||||||
|
file_result := '${file}.result.txt'
|
||||||
|
file_expected := '${file}.expected.txt'
|
||||||
|
os.write_file( file_result, result )
|
||||||
|
os.write_file( file_expected, output )
|
||||||
|
diff := diff_files( file_result, file_expected )
|
||||||
return error('Difference found in REPL file: $file
|
return error('Difference found in REPL file: $file
|
||||||
====> Got :
|
====> Got :
|
||||||
|$result|
|
|$result|
|
||||||
====> Expected :
|
====> Expected :
|
||||||
|$output|
|
|$output|
|
||||||
|
====> Diff :
|
||||||
|
$diff
|
||||||
')
|
')
|
||||||
} else {
|
} else {
|
||||||
return 'Repl file $file is OK'
|
return 'Repl file $file is OK'
|
||||||
|
|
|
@ -8,3 +8,4 @@
|
||||||
/nbody
|
/nbody
|
||||||
/spectral
|
/spectral
|
||||||
/database/mysql
|
/database/mysql
|
||||||
|
/hello_v_js
|
||||||
|
|
Loading…
Reference in New Issue