<?php 
 
/** 
 * A binary safe string comparison. 
 * 
 * @author Chris Corbyn 
 */ 
class IdenticalBinaryConstraint extends \PHPUnit_Framework_Constraint 
{ 
    protected $value; 
 
    public function __construct($value) 
    { 
        $this->value = $value; 
    } 
 
    /** 
     * Evaluates the constraint for parameter $other. Returns TRUE if the 
     * constraint is met, FALSE otherwise. 
     * 
     * @param mixed $other Value or object to evaluate. 
     * 
     * @return bool 
     */ 
    public function matches($other) 
    { 
        $aHex = $this->asHexString($this->value); 
        $bHex = $this->asHexString($other); 
 
        return $aHex === $bHex; 
    } 
 
    /** 
     * Returns a string representation of the constraint. 
     * 
     * @return string 
     */ 
    public function toString() 
    { 
        return 'indentical binary'; 
    } 
 
    /** 
     * Get the given string of bytes as a stirng of Hexadecimal sequences. 
     * 
     * @param string $binary 
     * 
     * @return string 
     */ 
    private function asHexString($binary) 
    { 
        $hex = ''; 
 
        $bytes = unpack('H*', $binary); 
 
        foreach ($bytes as &$byte) { 
            $byte = strtoupper($byte); 
        } 
 
        return implode('', $bytes); 
    } 
} 
 
 |