content: package com.nhaarman.listviewanimations.itemmanipulation.tests.matchers;
  
  import android.util.Pair;
  
  import org.hamcrest.Description;
  import org.hamcrest.Factory;
  import org.hamcrest.Matcher;
  import org.hamcrest.TypeSafeMatcher;
  
  import java.util.concurrent.atomic.AtomicInteger;
  
  public class Matchers {
  
      @Factory
      public static <T, F> Matcher<Pair<T, F>> pairWithValues(T first, F second) {
          return new PairWithValues<T, F>(first, second);
      }
  
      @Factory
      public static Matcher<AtomicInteger> atomicIntegerWithValue(int value) {
          return new AtomicIntegerWithValue(value);
      }
  
      private static class PairWithValues<T, F> extends TypeSafeMatcher<Pair<T, F>> {
  
          private T first;
          private F second;
  
          public PairWithValues(T first, F second) {
              this.first = first;
              this.second = second;
          }
  
          @Override
          public void describeTo(Description description) {
              description.appendText("Dunno!");
          }
  
          @Override
          protected boolean matchesSafely(Pair<T, F> tfPair) {
              return tfPair.first.equals(first) && tfPair.second.equals(second);
          }
      }
  
      private static class AtomicIntegerWithValue extends TypeSafeMatcher<AtomicInteger> {
  
          private int mValue;
  
          public AtomicIntegerWithValue(int value) {
              mValue = value;
          }
  
          @Override
          public void describeTo(Description description) {
              description.appendText(String.valueOf(mValue));
          }
  
          @Override
          protected boolean matchesSafely(AtomicInteger atomicInteger) {
              return mValue == atomicInteger.intValue();
          }
      }
  }
  