package org.hamcrest.text;

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

import static org.hamcrest.AbstractMatcherTest.*;
import static org.hamcrest.text.IsEqualIgnoringCase.equalToIgnoringCase;

public final class IsEqualIgnoringCaseTest {

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

        
assertNullSafe(matcher);
        
assertUnknownTypeSafe(matcher);
    
}

    
@Test public void
    
ignoresCaseOfCharsInString() {
        
final Matcher<String> matcher = equalToIgnoringCase("heLLo");
		

        
assertMatches(matcher, "HELLO");
        
assertMatches(matcher, "hello");
        
assertMatches(matcher, "HelLo");
    	
assertDoesNotMatch(matcher, "bye");
    
}

    
@Test public void
    
mismatchesIfAdditionalWhitespaceIsPresent() {
    	
final Matcher<String> matcher = equalToIgnoringCase("heLLo");
		

    	
assertDoesNotMatch(matcher, "hello ");
    	
assertDoesNotMatch(matcher, " hello");
    
}

    
@Test public void
    
mismatchesNull() {
    	
final Matcher<String> matcher = equalToIgnoringCase("heLLo");
		

    	
assertDoesNotMatch(matcher, null);
    
}

    
@Test(expected=IllegalArgumentException.class) public void
    
canOnlyBeConstructedAboutANonNullString() {
        
equalToIgnoringCase(null);
    
}


    
@Test public void
    
describesItself() {
    	
final Matcher<String> matcher = equalToIgnoringCase("heLLo");
        
assertDescription("a string equal to \"heLLo\" ignoring case", matcher);
    
}

    
@Test public void
    
describesAMismatch() {
    	
final Matcher<String> matcher = equalToIgnoringCase("heLLo");
    	
String expectedMismatchString = "was \"Cheese\"";
        
assertMismatchDescription(expectedMismatchString, matcher, "Cheese");
    
}
}