package org.hamcrest.core;

import org.hamcrest.test.AbstractMatcherTest;
import org.hamcrest.Matcher;
import org.junit.jupiter.api.Test;

import static org.hamcrest.test.MatcherAssertions.*;
import static org.hamcrest.core.StringContains.containsString;
import static org.hamcrest.core.StringContains.containsStringIgnoringCase;

public class StringContainsTest extends AbstractMatcherTest {

    static final String EXCERPT = "EXCERPT";
    final Matcher<String> stringContains = containsString(EXCERPT);

    @Override
    protected Matcher<?> createMatcher() {
        return stringContains;
    }

    @Test
    public void testMatchesSubstrings() {
        assertMatches(stringContains, EXCERPT + "END");
        assertMatches(stringContains, "START" + EXCERPT);
        assertMatches(stringContains, "START" + EXCERPT + "END");
        assertMatches(stringContains, EXCERPT);
        assertDoesNotMatch(stringContains, EXCERPT.toLowerCase());
        assertMatches(stringContains, EXCERPT + EXCERPT);
        assertDoesNotMatch(stringContains, "XC");

        assertMismatchDescription("was \"Something else\"", stringContains, "Something else");
        assertDescription("a string containing \"EXCERPT\"", stringContains);
    }

    @Test
    public void testMatchesSubstringsIgnoringCase() {
        final Matcher<String> ignoringCase = containsStringIgnoringCase("ExCert");
        assertMatches(ignoringCase, "eXcERT" + "END");
        assertMatches(ignoringCase, "START" + "EXCert");
        assertMatches(ignoringCase, "START" + "excERT" + "END");
        assertMatches(ignoringCase, "eXCert" + "excErt");
        assertDoesNotMatch(ignoringCase, "xc");

        assertMismatchDescription("was \"Something else\"", ignoringCase, "Something else");
        assertDescription("a string containing \"ExCert\" ignoring case", ignoringCase);
    }

}
