/
ftResults.go
91 lines (80 loc) · 1.77 KB
/
ftResults.go
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package funcTests
import (
"fmt"
"github.com/logrusorgru/aurora"
"strings"
)
const (
OK = iota
NOK
IGNORED
)
type ftResult struct {
statusFail int
stdoutFail int
stderrFail int
}
func removeEndln(str string) string {
for strings.HasSuffix(str, "\n") {
str = strings.TrimSuffix(str, "\n")
}
return str
}
func compareOutput(exp, out string) int {
out = removeEndln(out)
exp = removeEndln(exp)
//fmt.Printf("exp: [%s]\nout: [%s]\n", exp, out)
switch exp {
case "":
return IGNORED
case out:
return OK
default:
return NOK
}
}
func (r *ftResult) CompareToRef(ref, my *ftExecution) {
switch {
case ref.status != my.status:
r.statusFail = NOK
case ref.outBuf.String() != my.outBuf.String():
r.stdoutFail = NOK
case ref.errBuf.String() != my.errBuf.String():
r.stderrFail = NOK
}
}
func (r *ftResult) CompareToExp(exp *ftExpected, my *ftExecution) {
if exp.Status != my.status {
r.statusFail = NOK
}
r.stdoutFail = compareOutput(exp.getExpOut(), my.outBuf.String())
r.stderrFail = compareOutput(exp.getExpErr(), my.errBuf.String())
}
func (r *ftResult) isPerfect() bool {
return r.statusFail != NOK && r.stdoutFail != NOK && r.stderrFail != NOK
}
func (r *ftResult) showFailed() {
//TODO: Improve error display (show difference)
if r.statusFail == NOK {
fmt.Println("status differs")
}
if r.stdoutFail == NOK {
fmt.Println("stdout differs")
}
if r.stderrFail == NOK {
fmt.Println("stderr differs")
}
fmt.Println("")
}
func (r *ftResult) Show(name string) int {
if r.isPerfect() {
fmt.Printf("%s%s%s%s", aurora.Green("Success").Bold(), aurora.Bold(": ["), name,
aurora.Bold("]\n"))
return OK
} else {
fmt.Printf("%s%s%s%s", aurora.Red("Failure").Bold(), aurora.Bold(": ["), name,
aurora.Bold("]\n"))
r.showFailed()
return NOK
}
}