Skip to content

Commit c235e4a

Browse files
committed
Improve stringify test coverage
1 parent 631fa70 commit c235e4a

File tree

2 files changed

+133
-16
lines changed

2 files changed

+133
-16
lines changed

github/gen-stringify-test.go

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,12 @@ var (
6868
return "github.Timestamp{0001-01-01 00:00:00 +0000 UTC}"
6969
case "nil":
7070
return "map[]"
71+
case `[]int{0}`:
72+
return `[0]`
73+
case `[]string{""}`:
74+
return `[""]`
75+
case "[]Scope{ScopeNone}":
76+
return `["(no scope)"]`
7177
}
7278
log.Fatalf("Unhandled zero value: %q", v)
7379
return ""
@@ -144,7 +150,18 @@ func (t *templateData) processAST(f *ast.File) error {
144150
logf("Got FuncDecl: Name=%q, id.Name=%#v", fn.Name.Name, id.Name)
145151
t.StringFuncs[id.Name] = true
146152
} else {
147-
logf("Ignoring FuncDecl: Name=%q, Type=%T", fn.Name.Name, fn.Recv.List[0].Type)
153+
star, ok := fn.Recv.List[0].Type.(*ast.StarExpr)
154+
if ok && fn.Name.Name == "String" {
155+
id, ok := star.X.(*ast.Ident)
156+
if ok {
157+
logf("Got FuncDecl: Name=%q, id.Name=%#v", fn.Name.Name, id.Name)
158+
t.StringFuncs[id.Name] = true
159+
} else {
160+
logf("Ignoring FuncDecl: Name=%q, Type=%T", fn.Name.Name, fn.Recv.List[0].Type)
161+
}
162+
} else {
163+
logf("Ignoring FuncDecl: Name=%q, Type=%T", fn.Name.Name, fn.Recv.List[0].Type)
164+
}
148165
}
149166
} else {
150167
logf("Ignoring FuncDecl: Name=%q, fn=%#v", fn.Name.Name, fn)
@@ -157,6 +174,7 @@ func (t *templateData) processAST(f *ast.File) error {
157174
logf("Ignoring AST decl type %T", decl)
158175
continue
159176
}
177+
160178
for _, spec := range gd.Specs {
161179
ts, ok := spec.(*ast.TypeSpec)
162180
if !ok {
@@ -188,6 +206,13 @@ func (t *templateData) processAST(f *ast.File) error {
188206
continue
189207
}
190208

209+
if at, ok := field.Type.(*ast.ArrayType); ok {
210+
if id, ok := at.Elt.(*ast.Ident); ok {
211+
t.addIdentSlice(id, ts.Name.String(), fieldName.String())
212+
continue
213+
}
214+
}
215+
191216
se, ok := field.Type.(*ast.StarExpr)
192217
if !ok {
193218
logf("Ignoring type %T for Name=%q, FieldName=%q", field.Type, ts.Name.String(), fieldName.String())
@@ -272,6 +297,32 @@ func (t *templateData) addIdentPtr(x *ast.Ident, receiverType, fieldName string)
272297
t.StructFields[receiverType] = append(t.StructFields[receiverType], newStructField(receiverType, fieldName, x.String(), zeroValue, namedStruct))
273298
}
274299

300+
func (t *templateData) addIdentSlice(x *ast.Ident, receiverType, fieldName string) {
301+
var zeroValue string
302+
var namedStruct = false
303+
switch x.String() {
304+
case "int":
305+
zeroValue = "[]int{0}"
306+
case "int64":
307+
zeroValue = "[]int64{0}"
308+
case "float64":
309+
zeroValue = "[]float64{0}"
310+
case "string":
311+
zeroValue = `[]string{""}`
312+
case "bool":
313+
zeroValue = "[]bool{false}"
314+
case "Scope":
315+
zeroValue = "[]Scope{ScopeNone}"
316+
// case "Timestamp":
317+
// zeroValue = "&Timestamp{}"
318+
default:
319+
zeroValue = "nil"
320+
namedStruct = true
321+
}
322+
323+
t.StructFields[receiverType] = append(t.StructFields[receiverType], newStructField(receiverType, fieldName, x.String(), zeroValue, namedStruct))
324+
}
325+
275326
func (t *templateData) dump() error {
276327
if len(t.StructFields) == 0 {
277328
logf("No StructFields for %v; skipping.", t.filename)

github/github-stringify_test.go

Lines changed: 81 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)