1f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabotpackage org.hamcrest.collection;
2f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot
3f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabotimport org.hamcrest.BaseMatcher;
4f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabotimport org.hamcrest.Description;
5f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabotimport org.hamcrest.Matcher;
6f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot
7c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport java.util.Arrays;
8c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport java.util.Collection;
9c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
10f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabotpublic class IsIn<T> extends BaseMatcher<T> {
11f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    private final Collection<T> collection;
12f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot
13f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    public IsIn(Collection<T> collection) {
14f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot        this.collection = collection;
15f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    }
16f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot
17f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    public IsIn(T[] elements) {
18f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot        collection = Arrays.asList(elements);
19f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    }
20f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot
21c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @SuppressWarnings("SuspiciousMethodCalls")
22c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Override
23f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    public boolean matches(Object o) {
24f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot        return collection.contains(o);
25f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    }
26f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot
27c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Override
28f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    public void describeTo(Description buffer) {
29f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot        buffer.appendText("one of ");
30f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot        buffer.appendValueList("{", ", ", "}", collection);
31f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    }
32f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot
33c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
34c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher that matches when the examined object is found within the
35c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * specified collection.
36c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
37c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat("foo", isIn(Arrays.asList("bar", "foo")))</pre>
38c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
39c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @deprecated use is(in(...)) instead
40c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
41c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @param collection
42c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *     the collection in which matching items must be found
43c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
44c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
45c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Deprecated
46f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    public static <T> Matcher<T> isIn(Collection<T> collection) {
47c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return in(collection);
48f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    }
49f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot
50c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
51c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher that matches when the examined object is found within the
52c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * specified collection.
53c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
54c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat("foo", is(in(Arrays.asList("bar", "foo"))))</pre>
55c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
56c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @param collection
57c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *     the collection in which matching items must be found
58c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
59c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
60c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public static <T> Matcher<T> in(Collection<T> collection) {
61c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return new IsIn<T>(collection);
62c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
63c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
64c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
65c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher that matches when the examined object is found within the
66c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * specified array.
67c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
68c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat("foo", isIn(new String[]{"bar", "foo"}))</pre>
69c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
70c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @deprecated use is(in(...)) instead
71c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
72c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @param elements
73c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *     the array in which matching items must be found
74c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
75c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
76c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Deprecated
77f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    public static <T> Matcher<T> isIn(T[] elements) {
78c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return in(elements);
79c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
80c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
81c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
82c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher that matches when the examined object is found within the
83c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * specified array.
84c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
85c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat("foo", is(in(new String[]{"bar", "foo"})))</pre>
86c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
87c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @param elements
88c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *     the array in which matching items must be found
89c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
90c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
91c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public static <T> Matcher<T> in(T[] elements) {
92f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot        return new IsIn<T>(elements);
93f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    }
94f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot
95c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
96c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher that matches when the examined object is equal to one of the
97c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * specified elements.
98c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
99c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat("foo", isOneOf("bar", "foo"))</pre>
100c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
101c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @deprecated use is(oneOf(...)) instead
102c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
103c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @param elements
104c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *     the elements amongst which matching items will be found
105c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
106c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
107c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Deprecated
108f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    public static <T> Matcher<T> isOneOf(T... elements) {
109c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return oneOf(elements);
110c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
111c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
112c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
113c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher that matches when the examined object is equal to one of the
114c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * specified elements.
115c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
116c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat("foo", is(oneOf("bar", "foo")))</pre>
117c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
118c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @param elements
119c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *     the elements amongst which matching items will be found
120c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
121c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
122c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public static <T> Matcher<T> oneOf(T... elements) {
123c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return in(elements);
124f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot    }
125f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot}
126