package org.hamcrest.integration;

import org.jmock.core.Constraint;
import org.hamcrest.Matcher;
import org.hamcrest.StringDescription;

/**
 
* An adapter allowing a Hamcrest
 
* to act as an jMock1 {@link org.jmock.core.Constraint}.
 
* Note, this is not necessary for jMock2 as it supports Hamcrest
 
* out of the box.
 
*
 
* @author Joe Walnes
 
*/

public class JMock1Adapter implements Constraint {

    
/**
     
* Convenience factory method that will adapt a
     
* Hamcrest
 
 
to act as an
     
* jMock {@link org.jmock.core.Constraint}.
     
*/

    
public static Constraint adapt(Matcher<?> matcher) {
        
return new JMock1Adapter(matcher);
    
}

    
private final Matcher<?> hamcrestMatcher;

    
public JMock1Adapter(Matcher<?> matcher) {
        
this.hamcrestMatcher = matcher;
    
}

    
@Override
    
public boolean eval(Object o) {
        
return hamcrestMatcher.matches(o);
    
}

    
@Override
    
public StringBuffer describeTo(StringBuffer buffer) {
        
hamcrestMatcher.describeTo(new StringDescription(buffer));
        
return buffer;
    
}
}