1c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinpackage org.hamcrest.core;
2c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
3c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinimport org.hamcrest.Matcher;
4c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
5c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin/**
6c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin * Tests if the argument is a string that contains a substring.
7c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin */
8c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffinpublic class StringContains extends SubstringMatcher {
9c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public StringContains(boolean ignoringCase, String substring) {
10c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        super("containing", ignoringCase, substring);
11c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
12c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
13c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    @Override
14c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    protected boolean evalSubstringOf(String s) {
15c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return converted(s).contains(converted(substring));
16c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
17c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
18c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
19c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher that matches if the examined {@link String} contains the specified
20c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * {@link String} anywhere.
21c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
22c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat("myStringOfNote", containsString("ring"))</pre>
23c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
24c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @param substring
25c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *     the substring that the returned matcher will expect to find within any examined string
26c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
27c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
28c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public static Matcher<String> containsString(String substring) {
29c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return new StringContains(false, substring);
30c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
31c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
32c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    /**
33c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * Creates a matcher that matches if the examined {@link String} contains the specified
34c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * {@link String} anywhere, ignoring case.
35c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * For example:
36c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * <pre>assertThat("myStringOfNote", containsString("ring"))</pre>
37c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
38c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     * @param substring
39c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *     the substring that the returned matcher will expect to find within any examined string
40c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     *
41c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin     */
42c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    public static Matcher<String> containsStringIgnoringCase(String substring) {
43c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin        return new StringContains(true, substring);
44c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin    }
45c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin
46c1dbb44e71e47410ad5685aba3ef3fccb095a2b4Paul Duffin}
47