From 717643f7a95ff34c695dd562657456938755c1f3 Mon Sep 17 00:00:00 2001 From: grosmar Date: Thu, 21 Jan 2016 18:52:50 +0100 Subject: [PATCH 1/3] custom argument matcher, that takes a typedef class instead of a function --- src/mockatoo/Mockatoo.hx | 2 ++ src/mockatoo/internal/MatcherClass.hx | 12 ++++++++++++ src/mockatoo/internal/MockMethod.hx | 1 + 3 files changed, 15 insertions(+) create mode 100644 src/mockatoo/internal/MatcherClass.hx diff --git a/src/mockatoo/Mockatoo.hx b/src/mockatoo/Mockatoo.hx index 67ff8f7..372c380 100644 --- a/src/mockatoo/Mockatoo.hx +++ b/src/mockatoo/Mockatoo.hx @@ -2,6 +2,7 @@ package mockatoo; import haxe.macro.Expr; import haxe.macro.Context; +import mockatoo.internal.MatcherClass; import mockatoo.macro.InitMacro; import mockatoo.macro.MockMaker; import mockatoo.macro.VerifyMacro; @@ -336,6 +337,7 @@ enum Matcher isNotNull; // any non null value any; // wildcard for any value customMatcher(f:Dynamic -> Bool); //custom function to verify value + matcherClass(instance:MatcherClass); //custom function to verify value } /** diff --git a/src/mockatoo/internal/MatcherClass.hx b/src/mockatoo/internal/MatcherClass.hx new file mode 100644 index 0000000..6d4116b --- /dev/null +++ b/src/mockatoo/internal/MatcherClass.hx @@ -0,0 +1,12 @@ +package mockatoo.internal; + +/** + * Generic typedef for any matcher class that have a matches function. + * This way you can use any 3rdparty framework like hamcrest to match against complex conditions. + * @author grosmar + */ + +typedef MatcherClass = +{ + function matches(item:Dynamic):Bool; +} \ No newline at end of file diff --git a/src/mockatoo/internal/MockMethod.hx b/src/mockatoo/internal/MockMethod.hx index 7da90e7..f59f6c5 100644 --- a/src/mockatoo/internal/MockMethod.hx +++ b/src/mockatoo/internal/MockMethod.hx @@ -297,6 +297,7 @@ class MockMethod case Matcher.isNotNull: return actual != null; case Matcher.any: return true; case Matcher.customMatcher(f): return f(actual); + case Matcher.matcherClass(instance): return instance.matches(actual); } } case TClass(_): From 1b24a2c5f8ae1095415637c434b2f0732c3d59f6 Mon Sep 17 00:00:00 2001 From: grosmar Date: Thu, 21 Jan 2016 18:53:33 +0100 Subject: [PATCH 2/3] removed the warning, because it works perfectly with any framework that supports annotation based initialization. --- src/mockatoo/macro/MockTestMacro.hx | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/mockatoo/macro/MockTestMacro.hx b/src/mockatoo/macro/MockTestMacro.hx index 6f03060..db296f8 100644 --- a/src/mockatoo/macro/MockTestMacro.hx +++ b/src/mockatoo/macro/MockTestMacro.hx @@ -68,9 +68,6 @@ class MockTestMacro if (befores.length == 0 || afters.length == 0) return null; - if (!Context.defined("munit")) - Context.warning("Unable to generate mocks - @:mock and @:spy require munit", Context.currentPos()); - if (beforeField == null) { beforeField = createField(FIELD_SETUP, META_BEFORE, befores); From e9677e2dda00662bbecbf6906e1d9e90b4345fe8 Mon Sep 17 00:00:00 2001 From: grosmar Date: Tue, 26 Jan 2016 15:20:07 +0100 Subject: [PATCH 3/3] Fixed deprecated referencing --- src/mockatoo/internal/MockMethod.hx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mockatoo/internal/MockMethod.hx b/src/mockatoo/internal/MockMethod.hx index f59f6c5..d40deb5 100644 --- a/src/mockatoo/internal/MockMethod.hx +++ b/src/mockatoo/internal/MockMethod.hx @@ -1,4 +1,5 @@ package mockatoo.internal; +import haxe.Constraints.IMap; import mockatoo.exception.VerificationException; import mockatoo.exception.StubbingException; import mockatoo.Mockatoo; @@ -332,7 +333,7 @@ class MockMethod if (value == null) return false; // Please note, we cannot check HashMap because it is an abstract, and does not have an iterator function at runtime. - if (Std.is(value, Array) || Std.is(value, Map.IMap)) return true; + if (Std.is(value, Array) || Std.is(value, IMap)) return true; //Iterable var iterator = Reflect.field(value, "iterator");