diff options
-rw-r--r-- | src/com/google/testing/littlemock/LittleMock.java | 8 | ||||
-rw-r--r-- | tests/com/google/testing/littlemock/LittleMockTest.java | 17 |
2 files changed, 24 insertions, 1 deletions
diff --git a/src/com/google/testing/littlemock/LittleMock.java b/src/com/google/testing/littlemock/LittleMock.java index 0d93c4f..9946798 100644 --- a/src/com/google/testing/littlemock/LittleMock.java +++ b/src/com/google/testing/littlemock/LittleMock.java @@ -898,7 +898,7 @@ public class LittleMock { } /** Represents something capable of testing if it matches an argument or not. */ - /*package*/ interface ArgumentMatcher { + public interface ArgumentMatcher { public boolean matches(Object value); } @@ -980,6 +980,12 @@ public class LittleMock { return value; } + /** A custom argument matcher, should be used only for object arguments not primitives. */ + public static <T> T matches(ArgumentMatcher argument) { + sMatchArguments.add(argument); + return null; + } + /** Utility method to throw an AssertionError if an assertion fails. */ private static void expect(boolean result, String message) { if (!result) { diff --git a/tests/com/google/testing/littlemock/LittleMockTest.java b/tests/com/google/testing/littlemock/LittleMockTest.java index fde8c7c..ad12f3e 100644 --- a/tests/com/google/testing/littlemock/LittleMockTest.java +++ b/tests/com/google/testing/littlemock/LittleMockTest.java @@ -39,6 +39,7 @@ import static com.google.testing.littlemock.LittleMock.doThrow; import static com.google.testing.littlemock.LittleMock.eq; import static com.google.testing.littlemock.LittleMock.initMocks; import static com.google.testing.littlemock.LittleMock.isA; +import static com.google.testing.littlemock.LittleMock.matches; import static com.google.testing.littlemock.LittleMock.mock; import static com.google.testing.littlemock.LittleMock.never; import static com.google.testing.littlemock.LittleMock.reset; @@ -48,6 +49,8 @@ import static com.google.testing.littlemock.LittleMock.verify; import static com.google.testing.littlemock.LittleMock.verifyNoMoreInteractions; import static com.google.testing.littlemock.LittleMock.verifyZeroInteractions; +import com.google.testing.littlemock.LittleMock.ArgumentMatcher; + import junit.framework.TestCase; import java.io.IOException; @@ -1413,6 +1416,20 @@ public class LittleMockTest extends TestCase { } catch (IllegalStateException expected) {} } + public void testCustomMatcher() { + ArgumentMatcher argumentMatcher = new ArgumentMatcher() { + @Override + public boolean matches(Object value) { + return ((String) value).contains("[]"); + } + }; + mFoo.add("as[]df"); + mFoo.add("qwer[]asdf"); + mFoo.add("1234"); + verify(mFoo, times(3)).add(anyString()); + verify(mFoo, times(2)).add((String) matches(argumentMatcher)); + } + public static class Jim { public void bob() { fail(); |