Skip to content

Commit d4c2d21

Browse files
author
sleygin
committed
testing go run behaviour
1 parent 8e4ea19 commit d4c2d21

File tree

4 files changed

+61
-20
lines changed

4 files changed

+61
-20
lines changed

cmd/minimock/minimock.go

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"go/token"
99
"io"
1010
"io/ioutil"
11+
"log"
1112
"os"
1213
"path/filepath"
1314
"runtime/debug"
@@ -23,7 +24,11 @@ import (
2324
"golang.org/x/tools/go/packages"
2425
)
2526

26-
const devVersion = "dev"
27+
const (
28+
devVersion = "dev"
29+
runMode = "go-run"
30+
directMode = "direct"
31+
)
2732

2833
var (
2934
//do not modify the following vars
@@ -51,11 +56,12 @@ var helpers = template.FuncMap{
5156

5257
type (
5358
options struct {
54-
interfaces []interfaceInfo
55-
noGenerate bool
56-
suffix string
57-
mockNames []string
58-
packageNames []string
59+
interfaces []interfaceInfo
60+
noGenerate bool
61+
suffix string
62+
mockNames []string
63+
packageNames []string
64+
goGenerateMode string
5965
}
6066

6167
interfaceInfo struct {
@@ -109,7 +115,7 @@ func getVersion(version string, buildInfo *debug.BuildInfo) string {
109115
}
110116

111117
func main() {
112-
opts, err := processArgs(os.Args[1:], os.Stdout, os.Stderr)
118+
opts, err := processArgs(os.Args[0], os.Args[1:], os.Stdout, os.Stderr)
113119
if err != nil {
114120
if err == errInvalidArguments {
115121
os.Exit(2)
@@ -162,6 +168,7 @@ func run(opts *options) (err error) {
162168
"GenerateInstruction": !opts.noGenerate,
163169
"Version": version,
164170
"PackageName": packageName,
171+
"GoGenerateMode": opts.goGenerateMode,
165172
},
166173
Vars: map[string]interface{}{},
167174
Funcs: helpers,
@@ -374,9 +381,27 @@ func processNames(names string, interfacesNum int, isInterfaceWildeCarded bool)
374381
return namesSplitted, nil
375382
}
376383

384+
func processGoGenerateMode(cmd string, args []string, goGenerateMode string) (string, error) {
385+
log.Println(cmd)
386+
log.Println(args)
387+
log.Println(goGenerateMode)
388+
if goGenerateMode != "" && goGenerateMode != directMode && goGenerateMode != runMode {
389+
return "", fmt.Errorf("wrong mode value")
390+
}
391+
392+
if goGenerateMode != "" {
393+
return goGenerateMode, nil
394+
}
395+
if cmd == "go" && len(args) > 0 && args[0] == "run" {
396+
return runMode, nil
397+
}
398+
399+
return directMode, nil
400+
}
401+
377402
var errInvalidArguments = errors.New("invalid arguments")
378403

379-
func processArgs(args []string, stdout, stderr io.Writer) (*options, error) {
404+
func processArgs(cmd string, args []string, stdout, stderr io.Writer) (*options, error) {
380405
var opts options
381406

382407
fs := flag.NewFlagSet("", flag.ContinueOnError)
@@ -390,6 +415,10 @@ func processArgs(args []string, stdout, stderr io.Writer) (*options, error) {
390415
packageNames := fs.String("p", "", "comma-separated package names,\nby default the generated package names are taken from the destination directory names")
391416
help := fs.Bool("h", false, "show this help message")
392417
version := fs.Bool("version", false, "display version information and exit")
418+
goGenerateMode := fs.String("go-generate-mode", "", `changes go:generate command mode: direct/go-run.
419+
By default puts "go:generate minimock args..." instruction into generated code if mock was generated with minimock command.
420+
If mock was generated with go run github.com/gojuno/minimock/v3/cmd/minimock then it puts "go:generate go run github.com/gojuno/minimock/v3/cmd/minimock args...".
421+
This behaviour can be rewritten by explicitly specifying mode with flag.`)
393422

394423
fs.Usage = func() { usage(fs, stderr) }
395424

@@ -407,6 +436,12 @@ func processArgs(args []string, stdout, stderr io.Writer) (*options, error) {
407436
return nil, nil
408437
}
409438

439+
cmdMode, err := processGoGenerateMode(cmd, args, *goGenerateMode)
440+
if err != nil {
441+
return nil, fmt.Errorf("processing -go-generate-mode flag arguments: %w", err)
442+
}
443+
opts.goGenerateMode = cmdMode
444+
410445
interfaces := strings.Split(*input, ",")
411446
interfacesLen := len(interfaces)
412447
isWildecarded := strings.Contains(*input, "*")

go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ require (
66
github.com/pkg/errors v0.9.1
77
github.com/pmezard/go-difflib v1.0.0
88
github.com/stretchr/testify v1.8.4
9-
golang.org/x/tools v0.1.12
9+
golang.org/x/tools v0.6.0
1010
google.golang.org/protobuf v1.30.0
1111
)
1212

1313
require (
1414
github.com/kr/text v0.2.0 // indirect
15-
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
16-
golang.org/x/sys v0.5.0 // indirect
17-
golang.org/x/text v0.3.8 // indirect
15+
golang.org/x/mod v0.8.0 // indirect
16+
golang.org/x/sys v0.15.0 // indirect
17+
golang.org/x/text v0.14.0 // indirect
1818
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect
1919
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
2020
gopkg.in/yaml.v3 v3.0.1 // indirect

go.sum

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,16 @@ github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XF
2121
github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o=
2222
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
2323
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
24-
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
25-
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
26-
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
27-
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
28-
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
29-
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
30-
golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
31-
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
24+
golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
25+
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
26+
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
27+
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
28+
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
29+
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
30+
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
31+
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
32+
golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
33+
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
3234
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
3335
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U=
3436
golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

internal/templates/header.tmpl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88
package {{$packageName}}
99

1010
{{if $.Options.HeaderVars.GenerateInstruction}}
11+
{{if eq $.Options.HeaderVars.GoGenerateMode "go-run"}}
12+
//go:generate go run github.com/gojuno/minimock/v3/cmd/minimock -i {{$.SourcePackage.PkgPath}}.{{$.Options.InterfaceName}} -o {{$.Options.HeaderVars.OutputFile}} -n {{(title (index $.Vars "MockName"))}} -p {{ $packageName }}
13+
{{else}}
1114
//go:generate minimock -i {{$.SourcePackage.PkgPath}}.{{$.Options.InterfaceName}} -o {{$.Options.HeaderVars.OutputFile}} -n {{(title (index $.Vars "MockName"))}} -p {{ $packageName }}
15+
{{end}}
1216
{{end}}
1317

1418
import (

0 commit comments

Comments
 (0)