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 }