package org.hamcrest.core;

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

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.test.MatcherAssertions.assertDescription;
import static org.hamcrest.test.MatcherAssertions.assertMatches;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsAnything.anything;

public final class IsAnythingTest {

    private final Matcher<Object> matcher = anything();

    private static class CustomThing {
    }

    @Test
    public void
    alwaysEvaluatesToTrue() {
        assertMatches("didn't match null", matcher, null);
        assertMatches("didn't match Object", matcher, new Object());
        assertMatches("didn't match custom object", matcher, new CustomThing());
        assertMatches("didn't match String", matcher, "hi");
    }

    @Test
    public void compilesWithoutTypeWarnings() {
        assertThat(new CustomThing(), is(anything()));
    }

    @Test public void
    hasUsefulDefaultDescription() {
        assertDescription("ANYTHING", matcher);
    }

    @Test public void
    canOverrideDescription() {
        String description = "description";
        assertDescription(description, anything(description));
    }

}
