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