View Javadoc
1   package com.atlassian.cache.impl;
2   
3   import com.atlassian.cache.CachedReferenceEvent;
4   
5   import org.hamcrest.BaseMatcher;
6   import org.hamcrest.Description;
7   import org.hamcrest.Matcher;
8   
9   import static com.google.common.base.Objects.equal;
10  import static org.mockito.hamcrest.MockitoHamcrest.argThat;
11  
12  public class CachedReferenceEventMatcher<V> extends BaseMatcher<CachedReferenceEvent<V>>
13  {
14      private final V value;
15  
16      private CachedReferenceEventMatcher(V value)
17      {
18          this.value = value;
19      }
20  
21      @Override
22      public boolean matches(Object item)
23      {
24          return match(item) == null;
25      }
26  
27      @Override
28      public void describeMismatch(Object item, Description description)
29      {
30          String match = match(item);
31          if (match != null)
32          {
33              description.appendText(match);
34          }
35      }
36  
37      @Override
38      public void describeTo(Description description)
39      {
40          description.appendText(String.format("CachedReferenceEvent(%s)", value));
41      }
42  
43      private String match(Object item)
44      {
45          if (! (item instanceof CachedReferenceEvent))
46          {
47              return String.format("Not instance of CachedReferenceEvent. Was: %s", item.getClass());
48          }
49  
50          CachedReferenceEvent<V> event = (CachedReferenceEvent) item;
51          if (! equal(value, event.getValue()))
52          {
53              return String.format("Different values expected %s, actual %s", value, event.getValue());
54          }
55  
56          return null;
57      }
58  
59      public static <V> Matcher<CachedReferenceEvent<V>> eventMatcher(V value)
60      {
61          return new CachedReferenceEventMatcher<V>(value);
62      }
63  
64      public static CachedReferenceEvent event(Object value)
65      {
66          return argThat(eventMatcher(value));
67      }
68  }