-
Notifications
You must be signed in to change notification settings - Fork 660
/
Copy pathrun.tcl
executable file
·78 lines (61 loc) · 1.4 KB
/
run.tcl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/env tclsh
set red "\033\[0;31m"
set grn "\033\[0;32m"
set nc "\033\[0m"
set pass "${grn}PASS!${nc}"
set fail "${red}FAIL!${nc}"
set stats.total 0
set stats.ok 0
set stats.fail 0
proc print_fail_report {t out expected} {
global fail
set hr [join [lrepeat 65 "-"] ""]
puts "${t}: ${fail}"
puts $hr
puts "Got:\n${out}"
puts $hr
puts "Expected:\n${expected}"
puts $hr
}
proc print_pass_report {t} {
global pass
puts "${t}: ${pass}"
}
proc print_stats {} {
global red grn nc stats.total stats.ok stats.fail
set hr [join [lrepeat 72 "█"] ""]
set hrcol [expr {${stats.fail} ? $red : $grn}]
puts "\nSummary (total: ${stats.total})"
puts "${grn} PASS${nc}: ${stats.ok}"
puts "${red} FAIL${nc}: ${stats.fail}"
puts "${hrcol}${hr}${nc}"
}
proc read_file {filename} {
set f [open $filename r]
set data [read $f]
close $f
return $data
}
proc run_test {t} {
global stats.total stats.ok stats.fail
incr stats.total
set cursorpos [string range [file extension [glob "${t}/cursor.*"]] 1 end]
set expected [read_file "${t}/out.expected"]
set filename "${t}/test.go"
set out [read_file "| gocode -in ${filename} autocomplete ${filename} ${cursorpos}"]
if {$out eq $expected} {
print_pass_report $t
incr stats.ok
} else {
print_fail_report $t $out $expected
incr stats.fail
}
}
if {$argc == 1} {
run_test $argv
} else {
foreach t [lsort [glob test.*]] {
run_test $t
}
}
print_stats