Commit Graph

199 Commits

Author SHA1 Message Date
Suhas Karanth
ef8b268d53
Universal binaries for macOS (#159)
A special format that contains both arm64 and amd64 executables in a single file
2021-11-14 16:39:42 +05:30
Sonia Hamilton
ab5b7bc086
Add -rm flag to remove target output file (#151)
File is removed before mock generation, if it exists. This is useful
when the mock generation is likely to fail due to some reason, for 
example, package load failure due to change in the interface being
mocked (the existing mock is no longer valid and cannot be compiled). In
such cases, the -rm flag can be used instead of manually removing the
file (which could have fixed the issue).
2021-07-11 12:05:54 +05:30
Ben Atkinson
b4465d5f96
Ignore anonymous imports when resolving import aliases (#150) 2021-07-04 08:31:46 +05:30
uji
e7d0d3b298
Update installation cmd on README for go1.16+ (#147) 2021-06-25 13:01:29 +05:30
Mat Ryer
126389e52f
Create FUNDING.yml 2021-02-14 13:29:50 +00:00
Mat Ryer
8e3e45fc59
remove unneeded file 2021-02-14 13:29:21 +00:00
Mat Ryer
c57d4fe76b
GitHub feature test for this repo 2021-02-14 13:28:54 +00:00
Mat Ryer
b54cd92254 simplified release instructions 2021-02-14 13:24:04 +00:00
Mat Ryer
6e4f50de4b fixed bug after changing version var name 2021-02-14 13:11:59 +00:00
Suhas Karanth
fe0d4f3360
Fix var name generation to avoid conflict (#145)
When the type and the package name is the same for an anonymous
parameter (ex: time.Time), and there are more than 1 such parameters,
the generated name for both was the same. And the generated code would
not be valid.

Fix the bug by ensuring the parameter name does not conflict with
package imports first before checking against other parameter names.
2021-02-14 13:10:16 +00:00
Mat Ryer
9a74351eb1
made Version exported to match .goreleaser config.
addresses #143
2021-02-14 13:07:18 +00:00
Mat Ryer
98d503a331
Removed credit line given major contributrions 2021-02-01 19:22:42 +00:00
Suhas Karanth
2ae606f132
Internal registry for disambiguated imports, vars (#141)
* Internal registry for disambiguated imports, vars
- Move functionality in the moq package partially into
  internal/{registry,template}.
- Leverage registry to assign unique package and variable/method
  parameter names. Use import aliases if present in interface source
  package.
BREAKING CHANGE: When the interface definition does not mention the
parameter names, the field names in call info anonymous struct will be
different.
The new field names are generated using the type info (string -> s,
int -> n, chan int -> intCh, []MyType -> myTypes, map[string]int ->
stringToInt etc.).
For example, for a string parameter previously if the field name was
'In1', the new field could be 'S' or 'S1' (depends on number of
string method parameters).
* Refactor golden file tests to be table-driven
* Fix sync pkg alias handling for moq generation
* Improve, add tests (increase coverage)
* Use $.Foo in template, avoid declaring variables
$ is set to the data argument passed to Execute, that is, to the
starting value of dot.
Variables were declared to be able to refer to the parent context.
* Consistent template field formatting
* Use tabs in generated Godoc comments' example code
* Minor simplification
* go generate
* Fix conflict for generated param name of pointer type

Excellent work by @sudo-suhas.
2021-02-01 19:20:20 +00:00
Isaev Ivan
b052143b5a
Fix gosec vulnerabilities: file and directory permissions (#142)
- Fix G301: Poor file permissions used when creating a directory.
- Fix G306: Poor file permissions used when writing to a new file.

See https://github.com/securego/gosec#available-rules
2020-12-13 09:21:03 +05:30
Mat Ryer
0d9680fd45 small readme tweak 2020-09-18 09:58:15 +01:00
Mat Ryer
171f1993f4 small edit: word wrap 2020-09-18 09:53:31 +01:00
Mat Ryer
ca877b5ffb TABS 2020-09-18 09:52:55 +01:00
Lucas Bremgartner
2ea33710f3
Print version with -version flag (#138)
Co-authored-by: Mat Ryer <matryer@users.noreply.github.com>
2020-09-18 09:16:40 +01:00
Umputun
be64288727
add skip-ensure flag to avoid import cycle (#140)
For mocks generated outside of the tested package with tests lives inside the same package as the tested code (i.e. pkg_test not used) --skip-ensure suppresses import of the source pkg

https://github.com/matryer/moq/issues/139

fix typo in readme
2020-09-17 09:49:08 +01:00
matryer
a69ca93dec ignored dist folder 2020-09-02 10:36:09 +01:00
matryer
545b7d74ae fixed whitespace 2020-09-02 10:34:06 +01:00
matryer
9581d77413 testing releasing 2020-09-02 10:30:40 +01:00
Suhas Karanth
720d53e65d Run go generate
Minor changes to generated test file because of c5b1da6 (#128).
2020-08-16 16:55:11 +05:30
Suhas Karanth
005b899ec8
Add noop formatter as an option (#133)
Useful to print the generated source code for debugging.
2020-08-16 12:55:01 +05:30
Suhas Karanth
e3d1bd8a7e Update README for stub flag 2020-08-16 12:29:28 +05:30
Suhas Karanth
83ab8dd79f
Add -stub flag to stub func implementation (#132)
When a mock is generated with the flag enabled, it introduces the
following changes:
- Does not panic on calling the method without a mock implementation.
- Return zero values iff the implementation is not provided and the
  method has return parameters.

Co-authored-by: Scott Leuthaeuser <scott_leuthaeuser@homedepot.com>
2020-08-16 12:24:12 +05:30
Suhas Karanth
24883c20a6
Use fallback name for parameter when name is _ (#131) 2020-08-16 12:16:52 +05:30
Suhas Karanth
70fed06ee3
Check errors on loading package (#130) 2020-08-16 12:10:38 +05:30
Suhas Karanth
c5b1da6fe9
Move mutexes inside mock struct (#128)
Better to not be constrained by global locks when having multiple moq
instances.

Co-authored-by: Diego Bernardes <diego.bernardes@outlook.com>
2020-08-16 12:03:17 +05:30
Suhas Karanth
80177adba8 Replace Travis CI with GitHub Actions workflow 2020-08-16 11:56:22 +05:30
Suhas Karanth
1163963381 Migrate to Go modules 2020-08-16 11:56:22 +05:30
Suhas Karanth
af008c214b Revert "added go modules"
This reverts commit f76652f379.

Go test no longer picks up the tests when run from the project root.

	$ go test -v ./...
	?       github.com/matryer/moq  [no test files]
	testing: warning: no tests to run
	PASS
	ok      github.com/matryer/moq/example  (cached) [no tests to run]
	?       github.com/matryer/moq/generate [no test files]

Migrating to Go modules needs special handling for fake modules such as
github.com/matryer/buildconstraints.
2020-08-16 08:49:03 +05:30
Mat Ryer
1822a01c56 simpler build list 2020-08-15 18:02:13 +01:00
Mat Ryer
f76652f379 added go modules 2020-08-15 17:59:44 +01:00
Suhas Karanth
4638a53893
No variadic return types (#126)
While extracting the method and parameters from the method signature,
only check and apply the variadic flag for the input parameters and not
for the return arguments.

Issue details:

For an interface with variadic arguments and slice return type, moq was
generating an invalid mock:

	type I interface {
		Func(params ...interface{}) []byte
	}

	// ...
	type IMock struct {
		// FuncFunc mocks the Func method.
		FuncFunc func(params ...interface{}) ...byte

		// calls tracks calls to the methods.
		calls struct {
			// Func holds details about calls to the Func method.
			Func []struct {
				// Params is the params argument value.
				Params []interface{}
			}
		}
	}

On attempting to generate the mock in such an instance, the command
would fail on the formatting step:

	m.Mock: go/format: 35:30: expected ';', found '...' (and 3 more errors)

See https://github.com/matryer/moq/issues/124,
https://github.com/matryer/moq/pull/125.
2020-06-07 18:15:40 +05:30
Suhas Karanth
7721994d1b
Add fmt flag to specify formatter (#117)
- Support formatting output with gofmt(default) or goimports via flag.
- Introduce moq.Config struct to configure moq.Mocker instance. This
  breaks backward compatibility but facilitates it in the future if and
  when any features are added.
- Use golden file tests for validating formatters. Use 
  github.com/pmezard/go-difflib to print the diff between expected and
  actual.
2020-03-10 18:38:14 +05:30
Suhas Karanth
7615cbe602
Improve Windows compatibility (#118)
- Use travis build matrix to test on Windows and macOS
- Make utility func compatible with host OS. Use filepath package to
  manipulate path strings for stripping $GOPATH from working directory.
- Delegate to go/build pkg for getting Go paths

Co-authored-by: Mike Lee <mike.lee@safeguardproperties.com>
Co-authored-by: Lucas Bremgartner <lucas@bremis.ch>
2020-01-25 16:51:10 +05:30
Suhas Karanth
072c0cd09b
Handle target interface inside vendor with other pkg name (#122)
When the interface that we are trying to moq is present inside the vendor
directory and the output package name is different, the import needs to be
stripped of the vendor path.
2020-01-20 07:16:57 +05:30
Suhas Karanth
8f50fb6793
Avoid deprecated LoadModes packages.{LoadFiles, LoadSyntax} (#116)
From the docs for packages.{LoadFiles, LoadSyntax} -
https://godoc.org/golang.org/x/tools/go/packages#pkg-constants

	// Deprecated: LoadFiles exists for historical compatibility
	// and should not be used. Please directly specify the needed
	// fields using the Need values.
	// ...
	// Deprecated: LoadSyntax exists for historical compatibility
	// and should not be used. Please directly specify the needed
	// fields using the Need values.
2020-01-17 10:25:50 +05:30
Suhas Karanth
75d0ddfc00
Run go generate (#119)
Minor changes to generated test file because of #110.
2020-01-06 18:41:00 +05:30
Suhas Karanth
4203548722 Run travis CI only on master branch and PRs (#114)
If a PR is created using a branch pushed to origin, this triggers travis
CI twice, once for the PR and another for the branch. So run travis CI for
only the master branch and when PRs are created using origin branches.
If CI needs to be run on any specific branch other than master, it would
need to be whitelisted.

Co-authored-by: Mat Ryer <matryer@users.noreply.github.com>
2019-12-23 15:52:52 +00:00
Suhas Karanth
fc1865052c Refactor flags, add run() for better extensibility (#115) 2019-12-23 15:10:26 +00:00
Suhas Karanth
0e0395200a
Improve comment on type guard in template (#113)
If the user specifies a different package and the mock name is the same
as the interface name, the type guard comment will be of the following
format:

	// Ensure, that MyInterface does implement MyInterface.

So use the $sourcePackagePrefix in the comment.
2019-11-06 08:58:47 +05:30
Suhas Karanth
1206bf1e2a
Allow aliasing interface name (#110)
Implementation based on #57.
2019-11-05 13:13:49 +05:30
Lucas Bremgartner
382bd174c0 Ensure target dir for mock exists (#112)
Fixes: #111
2019-11-03 15:12:56 +00:00
Vegard Løkken
ea57f91120 Fix typo in README (#107) 2019-11-03 07:54:11 +00:00
Pedram Hajesmaeeli
5e2b3bdd91 Fix moq for go 1.13 and avoid creating empty directory (#105)
* Fix moq for go 1.13 and avoid creating empty directory

This fixes #103 and also fixes #102

* Update .travis.yml
2019-11-03 07:46:59 +00:00
Mat Ryer
6cfb0558e1
Merge pull request #93 from IvanSafonov/master
fix cyclic dependency with go modules
2019-03-12 15:43:09 +00:00
Ivan Safonov
2fdf5e1752 fix cyclic dependency with go modules 2019-03-01 00:22:20 +07:00
Ivan Safonov
e17abc4d5d fix cyclic dependency with go modules 2019-02-28 23:49:51 +07:00