Update to r14 of LittleMock.

Change-Id: I94075779786b8a398a8664aa0be8b740ce811780
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 @@
   }
 
   /** 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 @@
     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.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.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 @@
     } 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();