package org.hamcrest.collection;

import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeDiagnosingMatcher;
import org.hamcrest.TypeSafeMatcher;

import java.util.Collection;

import static java.util.Arrays.asList;

/**
 
* @author Steve Freeman 2016 http://www.hamcrest.com
 
*/

public class ArrayAsIterableMatcher<E> extends TypeSafeMatcher<E[]> {
  
protected final TypeSafeDiagnosingMatcher<Iterable<? extends E>> iterableMatcher;
  
private final String message;
  
protected final Collection<Matcher<? super E>> matchers;

  
public ArrayAsIterableMatcher(
        
TypeSafeDiagnosingMatcher<Iterable<? extends E>> iterableMatcher,
        
Collection<Matcher<? super E>> matchers,
        
String message)
  
{
    
this.matchers = matchers;
    
this.iterableMatcher = iterableMatcher;
    
this.message = message;
  
}

  
@Override
  
public boolean matchesSafely(E[] item) {
      
return iterableMatcher.matches(asList(item));
  
}

  
@Override
  
public void describeMismatchSafely(E[] item, Description mismatchDescription) {
    
iterableMatcher.describeMismatch(asList(item), mismatchDescription);
  
}

  
@Override
  
public void describeTo(Description description) {
      
description.appendList("[", ", ", "]", matchers)
          
.appendText(" ").appendText(message);
  
}
}