package org.hamcrest.core;

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

import static org.hamcrest.AbstractMatcherTest.*;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.hamcrest.core.IsNot.not;

public final class IsNotTest {

    
@Test public void
    
copesWithNullsAndUnknownTypes() {
        
Matcher<String> matcher = not("something");

        
assertNullSafe(matcher);
        
assertUnknownTypeSafe(matcher);
    
}

    
@Test public void
    
evaluatesToTheTheLogicalNegationOfAnotherMatcher() {
        
final Matcher<String> matcher = not(equalTo("A"));

        
assertMatches(matcher, "B");
        
assertDoesNotMatch(matcher, "A");
    
}

    
@Test public void
    
providesConvenientShortcutForNotEqualTo() {
        
final Matcher<String> matcher = not("A");

        
assertMatches(matcher, "B");
        
assertDoesNotMatch(matcher, "A");
    
}

    
@Test public void
    
usesDescriptionOfNegatedMatcherWithPrefix() {
        
assertDescription("not an instance of java.lang.String", not(instanceOf(String.class)));
        
assertDescription("not \"A\"", not("A"));
    
}
}