Skip to content
This repository was archived by the owner on Jun 27, 2023. It is now read-only.

Commit 817c00c

Browse files
ZergsLawcodyoss
authored andcommittedDec 31, 2019
fix generates non-compilable code (#371)
mocks will supply arg names when underscore is used in interfaces.
1 parent 29da289 commit 817c00c

File tree

2 files changed

+87
-1
lines changed

2 files changed

+87
-1
lines changed
 

‎mockgen/mockgen.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ func (g *generator) getArgNames(m *model.Method) []string {
531531
argNames := make([]string, len(m.In))
532532
for i, p := range m.In {
533533
name := p.Name
534-
if name == "" {
534+
if name == "" || name == "_" {
535535
name = fmt.Sprintf("arg%d", i)
536536
}
537537
argNames[i] = name

‎mockgen/mockgen_test.go

+86
Original file line numberDiff line numberDiff line change
@@ -267,3 +267,89 @@ func findMethod(t *testing.T, identifier, methodName string, lines []string) int
267267
t.Fatalf("unable to find 'func (m %s) %s'", identifier, methodName)
268268
panic("unreachable")
269269
}
270+
271+
func TestGetArgNames(t *testing.T) {
272+
for _, testCase := range []struct {
273+
name string
274+
method *model.Method
275+
expected []string
276+
}{
277+
{
278+
name: "NamedArg",
279+
method: &model.Method{
280+
In: []*model.Parameter{
281+
{
282+
Name: "firstArg",
283+
Type: &model.NamedType{Type: "int"},
284+
},
285+
{
286+
Name: "secondArg",
287+
Type: &model.NamedType{Type: "string"},
288+
},
289+
},
290+
},
291+
expected: []string{"firstArg", "secondArg"},
292+
},
293+
{
294+
name: "NotNamedArg",
295+
method: &model.Method{
296+
In: []*model.Parameter{
297+
{
298+
Name: "",
299+
Type: &model.NamedType{Type: "int"},
300+
},
301+
{
302+
Name: "",
303+
Type: &model.NamedType{Type: "string"},
304+
},
305+
},
306+
},
307+
expected: []string{"arg0", "arg1"},
308+
},
309+
{
310+
name: "MixedNameArg",
311+
method: &model.Method{
312+
In: []*model.Parameter{
313+
{
314+
Name: "firstArg",
315+
Type: &model.NamedType{Type: "int"},
316+
},
317+
{
318+
Name: "_",
319+
Type: &model.NamedType{Type: "string"},
320+
},
321+
},
322+
},
323+
expected: []string{"firstArg", "arg1"},
324+
},
325+
} {
326+
t.Run(testCase.name, func(t *testing.T) {
327+
g := generator{}
328+
329+
result := g.getArgNames(testCase.method)
330+
if !testEqSliceStr(t, result, testCase.expected) {
331+
t.Fatalf("expected %s, got %s", result, testCase.expected)
332+
}
333+
})
334+
}
335+
}
336+
337+
func testEqSliceStr(t *testing.T, a, b []string) bool {
338+
t.Helper()
339+
340+
if a == nil || b == nil {
341+
return false
342+
}
343+
344+
if len(a) != len(b) {
345+
return false
346+
}
347+
348+
for i := range a {
349+
if a[i] != b[i] {
350+
return false
351+
}
352+
}
353+
354+
return true
355+
}

0 commit comments

Comments
 (0)
This repository has been archived.