Skip to content

Commit

Permalink
ix generating into same package
Browse files Browse the repository at this point in the history
  • Loading branch information
nkovacs committed Jul 25, 2019
1 parent f85ca4b commit f1c3910
Show file tree
Hide file tree
Showing 23 changed files with 1,050 additions and 79 deletions.
43 changes: 20 additions & 23 deletions arguments/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,12 @@ func New(args []string, workingDir string, evaler Evaler, stater Stater) (*Parse
"Display this help",
)

testFlag := fs.Bool(
"test",
false,
"Append \"_test\" to pacakge name",
)

err := fs.Parse(args[1:])
if err != nil {
return nil, err
Expand Down Expand Up @@ -73,8 +79,11 @@ func New(args []string, workingDir string, evaler Evaler, stater Stater) (*Parse
result.parseInterfaceName(packageMode, fs.Args())
result.parseFakeName(packageMode, *fakeNameFlag, fs.Args())
result.parseOutputPath(packageMode, workingDir, *outputPathFlag, fs.Args())
result.parseDestinationPackageName(packageMode, fs.Args())
result.parseDestinationPackagePath(packageMode, fs.Args())
result.parsePackagePath(packageMode, fs.Args())
if *testFlag {
result.TestPackage = true
}
return result, nil
}

Expand Down Expand Up @@ -139,8 +148,8 @@ func (a *ParsedArguments) parseOutputPath(packageMode bool, workingDir string, o
}

if packageMode {
a.parseDestinationPackageName(packageMode, args)
a.OutputPath = path.Join(workingDir, a.DestinationPackageName)
a.parsePackagePath(packageMode, args)
a.OutputPath = path.Join(workingDir, path.Base(a.PackagePath)+"shim")
return
}

Expand All @@ -152,14 +161,12 @@ func (a *ParsedArguments) parseOutputPath(packageMode bool, workingDir string, o
a.OutputPath = filepath.Join(d, packageNameForPath(d), snakeCaseName+".go")
}

func (a *ParsedArguments) parseDestinationPackageName(packageMode bool, args []string) {
func (a *ParsedArguments) parseDestinationPackagePath(packageMode bool, args []string) {
if packageMode {
a.parsePackagePath(packageMode, args)
a.DestinationPackageName = path.Base(a.PackagePath) + "shim"
a.DestinationPackagePath = a.OutputPath
return
}

a.DestinationPackageName = restrictToValidPackageName(filepath.Base(filepath.Dir(a.OutputPath)))
a.DestinationPackagePath = filepath.Dir(a.OutputPath)
}

func (a *ParsedArguments) parsePackagePath(packageMode bool, args []string) {
Expand All @@ -182,11 +189,11 @@ func (a *ParsedArguments) parsePackagePath(packageMode bool, args []string) {
type ParsedArguments struct {
GenerateInterfaceAndShimFromPackageDirectory bool

SourcePackageDir string // abs path to the dir containing the interface to fake
PackagePath string // package path to the package containing the interface to fake
OutputPath string // path to write the fake file to

DestinationPackageName string // often the base-dir for OutputPath but must be a valid package name
SourcePackageDir string // abs path to the dir containing the interface to fake
PackagePath string // package path to the package containing the interface to fake
OutputPath string // path to write the fake file to
DestinationPackagePath string // path to destination package
TestPackage bool // append "_test" to package name

InterfaceName string // the interface to counterfeit
FakeImplName string // the name of the struct implementing the given interface
Expand Down Expand Up @@ -241,13 +248,3 @@ func any(slice []string, needle string) bool {

return false
}

func restrictToValidPackageName(input string) string {
return strings.Map(func(r rune) rune {
if (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') || (r >= '0' && r <= '9') || r == '_' {
return r
} else {
return -1
}
}, input)
}
47 changes: 28 additions & 19 deletions arguments/parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func testParsingArguments(t *testing.T, when spec.G, it spec.S) {
it("sets arguments as expected", func() {
Expect(parsedArgs.SourcePackageDir).To(Equal("os"))
Expect(parsedArgs.OutputPath).To(Equal(path.Join(workingDir, "osshim")))
Expect(parsedArgs.DestinationPackageName).To(Equal("osshim"))
Expect(parsedArgs.DestinationPackagePath).To(Equal(path.Join(workingDir, "osshim")))
})
})
})
Expand Down Expand Up @@ -162,8 +162,13 @@ func testParsingArguments(t *testing.T, when spec.G, it spec.S) {
))
})

it("specifies the destination package name", func() {
Expect(parsedArgs.DestinationPackageName).To(Equal("my5packagefakes"))
it("specifies the destination package path", func() {
Expect(parsedArgs.DestinationPackagePath).To(Equal(
filepath.Join(
parsedArgs.SourcePackageDir,
"my5packagefakes",
),
))
})

when("when the interface is unexported", func() {
Expand Down Expand Up @@ -235,16 +240,18 @@ func testParsingArguments(t *testing.T, when spec.G, it spec.S) {
})
})

when("when the output dir contains characters inappropriate for a package name", func() {
it.Before(func() {
args = []string{"counterfeiter", "@my-special-package[]{}", "MySpecialInterface"}
justBefore()
})
/*
when("when the output dir contains characters inappropriate for a package name", func() {
it.Before(func() {
args = []string{"counterfeiter", "@my-special-package[]{}", "MySpecialInterface"}
justBefore()
})
it("should choose a valid package name", func() {
Expect(parsedArgs.DestinationPackageName).To(Equal("myspecialpackagefakes"))
it("should choose a valid package path", func() {
Expect(parsedArgs.DestinationPackagePath).To(Equal("myspecialpackagefakes"))
})
})
})
*/

when("when three arguments are provided", func() {
when("and the third one is '-'", func() {
Expand Down Expand Up @@ -306,16 +313,18 @@ func testParsingArguments(t *testing.T, when spec.G, it spec.S) {
})
})

when("when the output dir contains underscores in package name", func() {
it.Before(func() {
args = []string{"counterfeiter", "fake_command_runner", "MySpecialInterface"}
justBefore()
})
/*
when("when the output dir contains underscores in package name", func() {
it.Before(func() {
args = []string{"counterfeiter", "fake_command_runner", "MySpecialInterface"}
justBefore()
})
it("should ensure underscores are in the package name", func() {
Expect(parsedArgs.DestinationPackageName).To(Equal("fake_command_runnerfakes"))
it("should ensure underscores are in the package name", func() {
Expect(parsedArgs.DestinationPackagePath).To(Equal("fake_command_runnerfakes"))
})
})
})
*/
}

func fakeFileInfo(filename string, isDir bool) os.FileInfo {
Expand Down
8 changes: 4 additions & 4 deletions arguments/parser_windows_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ func TestParsingArguments(t *testing.T) {

func testParsingArguments(t *testing.T, when spec.G, it spec.S) {
var (
err error
err error
parsedArgs *arguments.ParsedArguments
args []string
args []string
workingDir string
evaler arguments.Evaler
stater arguments.Stater
evaler arguments.Evaler
stater arguments.Stater
)

justBefore := func() {
Expand Down
6 changes: 5 additions & 1 deletion arguments/usage.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package arguments
const usage = `
USAGE
counterfeiter
[-generate>] [-o <output-path>] [-p] [--fake-name <fake-name>]
[-generate>] [-o <output-path>] [-p] [--fake-name <fake-name>] [--test]
[<source-path>] <interface> [-]
ARGUMENTS
Expand Down Expand Up @@ -83,4 +83,8 @@ OPTIONS
example:
# writes "CoolThing" to ./mypackagefakes/cool_thing.go
counterfeiter --fake-name CoolThing ./mypackage MyInterface
--test
When generating into the same directory as the source interface,
append a "_test" suffix to the package name of the generated file.
`
4 changes: 2 additions & 2 deletions benchmark_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func BenchmarkWithoutCache(b *testing.B) {
SourcePackageDir: workingDir,
PackagePath: workingDir,
OutputPath: filepath.Join(workingDir, "fixturesfakes", "fake_something.go"),
DestinationPackageName: "fixturesfakes",
DestinationPackagePath: filepath.Join(workingDir, "fixturesfakes"),
InterfaceName: "Something",
FakeImplName: "FakeSomething",
PrintToStdOut: false,
Expand All @@ -49,7 +49,7 @@ func BenchmarkWithCache(b *testing.B) {
SourcePackageDir: workingDir,
PackagePath: workingDir,
OutputPath: filepath.Join(workingDir, "fixturesfakes", "fake_something.go"),
DestinationPackageName: "fixturesfakes",
DestinationPackagePath: filepath.Join(workingDir, "fixturesfakes"),
InterfaceName: "Something",
FakeImplName: "FakeSomething",
PrintToStdOut: false,
Expand Down
9 changes: 9 additions & 0 deletions fixtures/same/interface.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package same // import "github.com/maxbrunsfeld/counterfeiter/v6/fixtures/same"

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -o same_fake.go . SomeInterface
type SomeInterface interface {
DoThings(string, uint64) (int, error)
DoNothing()
DoASlice([]byte)
DoAnArray([4]byte)
}
9 changes: 9 additions & 0 deletions fixtures/same/notexported.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package same // import "github.com/maxbrunsfeld/counterfeiter/v6/fixtures/same"

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -o notexported_fake.go . someNotExportedInterface
type someNotExportedInterface interface {
DoThings(string, uint64) (int, error)
DoNothing()
DoASlice([]byte)
DoAnArray([4]byte)
}
Loading

0 comments on commit f1c3910

Please sign in to comment.