/
render.go
109 lines (97 loc) · 1.96 KB
/
render.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package render
//go:generate go-bindata -pkg=bindata -o "./bindata/bindata.go" templates
import (
"fmt"
"io"
"strings"
"text/template"
"github.com/cweill/gotests/internal/models"
"github.com/cweill/gotests/internal/render/bindata"
)
const name = "name"
var (
tmpls *template.Template
)
func init() {
tmpls = template.New("render").Funcs(map[string]interface{}{
"Field": fieldName,
"Receiver": receiverName,
"Param": parameterName,
"Want": wantName,
"Got": gotName,
})
for _, name := range bindata.AssetNames() {
tmpls = template.Must(tmpls.Parse(string(bindata.MustAsset(name))))
}
}
func fieldName(f *models.Field) string {
var n string
if f.IsNamed() {
n = f.Name
} else {
n = f.Type.String()
}
return n
}
func receiverName(f *models.Receiver) string {
var n string
if f.IsNamed() {
n = f.Name
} else {
n = f.ShortName()
}
if n == "name" {
// Avoid conflict with test struct's "name" field.
n = "n"
}
return n
}
func parameterName(f *models.Field) string {
var n string
if f.IsNamed() {
n = f.Name
} else {
n = fmt.Sprintf("in%v", f.Index)
}
return n
}
func wantName(f *models.Field) string {
var n string
if f.IsNamed() {
n = "want" + strings.Title(f.Name)
} else if f.Index == 0 {
n = "want"
} else {
n = fmt.Sprintf("want%v", f.Index)
}
return n
}
func gotName(f *models.Field) string {
var n string
if f.IsNamed() {
n = "got" + strings.Title(f.Name)
} else if f.Index == 0 {
n = "got"
} else {
n = fmt.Sprintf("got%v", f.Index)
}
return n
}
func Header(w io.Writer, h *models.Header) error {
if err := tmpls.ExecuteTemplate(w, "header", h); err != nil {
return err
}
_, err := w.Write(h.Code)
return err
}
func TestFunction(w io.Writer, f *models.Function, printInputs bool, subtests bool) error {
return tmpls.ExecuteTemplate(w, "function", struct {
*models.Function
PrintInputs bool
Subtests bool
}{
Function: f,
PrintInputs: printInputs,
Subtests: subtests,
})
}