cweill / gotests

Automatically generate Go test boilerplate from your source code.
Apache License 2.0
4.96k stars 345 forks source link

Support method type in "-only" regular expression option #35

Open clamoriniere opened 7 years ago

clamoriniere commented 7 years ago

Currently with the option “-only” it is not possible to provide the “struct type” in the regular expression.

example:

type structA struct {
   name string
}

type structB struct {}

func (s structA) PrintName() string {
   return “structA” + s.name
}

func (s structB) PrintName() string {
   return “structB”
}

func (s *structA) SetName(n string) string {
    s.name = n
}

if we run gotests -only PrintName it will generate the unit-tests for both functions

it could be interesting to support also the struct type in the regular expression like this: gotests -only structA.PrintName or gotests -only (structA).SetName

or create a new option: “-exact”: gotests -exact (structA).PrintName or gotests -exact structA.PrintName

avgeorge commented 6 years ago

This is actually already supported for both "-only" and "-excl", but it is a bit awkward to use. The command for your example would be gotests -only StructAPrintName. The regexes are matched against a functions "FullName" which includes the receiver type. https://github.com/cweill/gotests/blob/c51312f508e7040f06d1eb174da68364155b1fc0/internal/models/models.go#L121-L127 However the "FullName" uses title case for both receiver type and function name, and has no separator. Maybe it should be changed to match your example of structA.PrintName?

sunliver commented 5 years ago

@avgeorge I've found an interesting case. Considering as follows,

package main

type foobar struct{}
type fooBar struct{}
type Foobar struct{}
type FooBar struct{}
func (a foobar) Func() {}
func (a fooBar) Func() {}
func (a Foobar) Func() {}
func (a FooBar) Func() {}
func Func() {}
func main() {}

I don't know whether the output is in the plan or not.