class ArrayWithinMarginExpectation in Location 5.3
Test each element of an array for being within a range.
Hierarchy
- class \ArrayWithinMarginExpectation extends \WithinMarginExpectation
Expanded class hierarchy of ArrayWithinMarginExpectation
File
- tests/location_test_case.php, line 11 
- Location specific assertions.
View source
class ArrayWithinMarginExpectation extends WithinMarginExpectation {
  var $_canonicalvalues;
  var $_margin;
  /**
   *    Sets the values to compare against and the fuzziness of
   *    the match. Used for comparing floating point values.
   *    @param mixed $arr        Array of test values to match.
   *    @param mixed $margin       Fuzziness of match.
   *    @param string $message     Customised message on failure.
   *    @access public
   */
  function ArrayWithinMarginExpectation($arr, $margin = 0.01, $message = '%s') {
    $this
      ->SimpleExpectation($message);
    foreach ($arr as $k => $v) {
      $this->_upper[$k] = $v + $margin;
      $this->_lower[$k] = $v - $margin;
    }
    $this->_canonicalvalues = $arr;
    $this->_margin = $margin;
  }
  /**
   *    Tests the expectation. True if it matches the
   *    held value.
   *    @param mixed $compare        Comparison value.
   *    @return boolean              True if correct.
   *    @access public
   */
  function test($compare) {
    // First of all, if the count is off, there's DEFINATELY a problem.
    if (count($compare) != count($this->_canonicalvalues)) {
      return FALSE;
    }
    $pass = TRUE;
    foreach ($compare as $k => $v) {
      $pass = $pass && $v <= $this->_upper[$k] && $v >= $this->_lower[$k];
    }
    return $pass;
  }
  /**
   *    Creates a the message for being within the range.
   *    @param mixed $compare        Value being tested.
   *    @access private
   */
  function _withinMessage($compare) {
    $difference = array();
    foreach ($compare as $k => $v) {
      $difference[$k] = abs($v - $this->_canonicalvalues[$k]);
    }
    return 'Within expectation [(' . implode(',', $compare) . ') and (' . implode(',', $this->_canonicalvalues) . '), margin ' . $this->_margin . ' (' . implode(',', $difference) . ')]';
  }
  /**
   *    Creates a the message for being within the range.
   *    @param mixed $compare        Value being tested.
   *    @access private
   */
  function _outsideMessage($compare) {
    if (count($compare) != count($this->_canonicalvalues)) {
      return 'Expectation failed, array size mismatch [(' . implode(',', $compare) . ') and (' . implode(',', $this->_canonicalvalues) . ')]';
    }
    $differror = array();
    foreach ($compare as $k => $v) {
      $differror[$k] = 'OK';
      if ($v > $this->_upper[$k]) {
        $differror[$k] = '+' . ($v - $this->_upper[$k]);
      }
      if ($v < $this->_lower[$k]) {
        $differror[$k] = '-' . ($this->_lower[$k] - $v);
      }
    }
    return 'Outside expectation [(' . implode(',', $compare) . ') and (' . implode(',', $this->_canonicalvalues) . ') exceed margin ' . $this->_margin . ' by (' . implode(',', $differror) . ')]';
  }
}Members
| Name   | Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| ArrayWithinMarginExpectation:: | property | |||
| ArrayWithinMarginExpectation:: | property | |||
| ArrayWithinMarginExpectation:: | function | Sets the values to compare against and the fuzziness of the match. Used for comparing floating point values. | ||
| ArrayWithinMarginExpectation:: | function | Tests the expectation. True if it matches the held value. | ||
| ArrayWithinMarginExpectation:: | function | Creates a the message for being within the range. | ||
| ArrayWithinMarginExpectation:: | function | Creates a the message for being within the range. | 
