1 color.test ColorTest::testHexToRgb()

Tests Color::hexToRgb().

File

core/modules/simpletest/tests/color.test, line 12
Tests color conversion functions.

Class

ColorTest
@file

Code

function testHexToRgb() {
  // Any invalid arguments should throw an exception.
  $values = array('', '-1', '1', '12', '12345', '1234567', '123456789', '123456789a', 'foo');
  // Duplicate all invalid value tests with additional '#' prefix.
  // The '#' prefix inherently turns the data type into a string.
  foreach ($values as $value) {
    $values[] = '#' . $value;
  }
  // Add invalid data types (hex value must be a string).
  $values = array_merge($values, array(
    1, 12, 1234, 12345, 123456, 1234567, 12345678, 123456789, 123456789,
    -1, PHP_INT_MAX, PHP_INT_MAX + 1, -PHP_INT_MAX,
    0x0, 0x010,
  ));

  foreach ($values as $test) {
    $this->assertFalse(Color::validateHex($test), var_export($test, TRUE) . ' is invalid.');
    try {
      Color::hexToRgb($test);
      $this->fail('Color::hexToRgb(' . var_export($test, TRUE) . ') did not throw an exception.');
    }
    catch (\InvalidArgumentException $e) {
      $this->pass('Color::hexToRgb(' . var_export($test, TRUE) . ') threw an exception.');
    }
  }

  // PHP automatically casts a numeric array key into an integer.
  // Since hex values may consist of 0-9 only, they need to be defined as
  // array values.
  $tests = array(
    // Shorthands without alpha.
    array('hex' => '#000', 'rgb' => array('red' => 0, 'green' => 0, 'blue' => 0)),
    array('hex' => '#fff', 'rgb' => array('red' => 255, 'green' => 255, 'blue' => 255)),
    array('hex' => '#abc', 'rgb' => array('red' => 170, 'green' => 187, 'blue' => 204)),
    array('hex' => 'cba', 'rgb' => array('red' => 204, 'green' => 187, 'blue' => 170)),
    // Full without alpha.
    array('hex' => '#000000', 'rgb' => array('red' => 0, 'green' => 0, 'blue' => 0)),
    array('hex' => '#ffffff', 'rgb' => array('red' => 255, 'green' => 255, 'blue' => 255)),
    array('hex' => '#010203', 'rgb' => array('red' => 1, 'green' => 2, 'blue' => 3)),
  );
  foreach ($tests as $test) {
    $result = Color::hexToRgb($test['hex']);
    $this->assertIdentical($result, $test['rgb']);
  }
}