You are here

class ArrayHelperTest in Helper 7

Hierarchy

Expanded class hierarchy of ArrayHelperTest

File

tests/ArrayHelperTest.test, line 5

View source
class ArrayHelperTest extends DrupalUnitTestCase {
  public static function getInfo() {
    return array(
      'name' => 'ArrayHelper',
      'description' => 'Tests for the ArrayHelper class.',
      'group' => 'Helper',
    );
  }
  function testNestedValue() {
    $input = array(
      0 => array(
        'test' => 'foo',
        'keys' => array(
          'first',
          'a',
        ),
      ),
      1 => (object) array(
        'test' => 'bar',
        'keys' => array(
          'second',
          'b',
        ),
      ),
      2 => new ArrayHelperTestObject(array(
        'test' => 'foo',
        'keys' => array(
          'third',
          'c',
        ),
      )),
    );
    $this
      ->assertIdentical(ArrayHelper::filterByNestedValue($input, array(
      'test',
    ), 'foo'), array(
      0 => $input[0],
      2 => $input[2],
    ));
    $this
      ->assertIdentical(ArrayHelper::filterByNestedValue($input, array(
      'test',
    ), 'bar'), array(
      1 => $input[1],
    ));
    $this
      ->assertIdentical(ArrayHelper::filterByNestedValue($input, array(
      'test',
    ), 'ferzle'), array());
    $this
      ->assertIdentical(ArrayHelper::extractNestedValuesToArray($input, array(
      'test',
    )), array(
      0 => 'foo',
      1 => 'bar',
      2 => 'foo',
    ));
    $this
      ->assertIdentical(ArrayHelper::extractNestedValuesToArray($input, array(
      'test',
    ), array(
      'keys',
      0,
    )), array(
      'first' => 'foo',
      'second' => 'bar',
      'third' => 'foo',
    ));
    $this
      ->assertIdentical(ArrayHelper::extractNestedValuesToArray($input, array(
      'test',
    ), array(
      'keys',
      1,
    )), array(
      'a' => 'foo',
      'b' => 'bar',
      'c' => 'foo',
    ));
    $this
      ->assertIdentical(ArrayHelper::extractNestedValuesToArray($input, array(
      'invalid',
    )), array());
  }
  function testMapKeys() {
    $input = array(
      'a' => 1,
      'b' => '1',
      'c' => 1,
      0 => '2',
      1 => 2,
    );
    $expected = array(
      '#a' => 1,
      '#b' => '1',
      '#c' => 1,
      '#0' => '2',
      '#1' => 2,
    );
    $result = ArrayHelper::mapKeys(function ($value) {
      return '#' . $value;
    }, $input);
    $this
      ->assertIdentical($result, $expected);
  }
  function testFilterKeys() {
    $input = array_fill_keys(range(0, 10), 'test');
    $expected1 = array_fill_keys(array(
      0,
      3,
      6,
      9,
    ), 'test');
    $expected2 = array_fill_keys(array(
      1,
      2,
      4,
      5,
      7,
      8,
      10,
    ), 'test');
    $result = ArrayHelper::filterKeys($input, function ($value) {
      return $value % 3 === 0;
    }, $input);
    $this
      ->assertIdentical($result, $expected1);
    $result = ArrayHelper::filterKeys($input, function ($value) {
      return $value % 3;
    }, $input);
    $this
      ->assertIdentical($result, $expected2);
  }
  public function testSpliceAssociativeValues() {
    $input = array(
      0 => 'value1',
      'key1' => 'value2',
      1 => 'value3',
      'key2' => 'value4',
    );
    $result = ArrayHelper::spliceAssociativeValues($input, array(
      'newkey' => 'newvalue',
    ), 2);
    $this
      ->assertIdentical($result, array(
      0 => 'value1',
      'key1' => 'value2',
      'newkey' => 'newvalue',
      1 => 'value3',
      'key2' => 'value4',
    ));
    $result = ArrayHelper::spliceAssociativeValues($input, array(
      'newkey' => 'newvalue',
    ), 1, 1);
    $this
      ->assertIdentical($result, array(
      0 => 'value1',
      'newkey' => 'newvalue',
      1 => 'value3',
      'key2' => 'value4',
    ));
    $result = ArrayHelper::spliceAssociativeValues($input, array(
      'newkey' => 'newvalue',
    ), 2, 1);
    $this
      ->assertIdentical($result, array(
      0 => 'value1',
      'key1' => 'value2',
      'newkey' => 'newvalue',
      'key2' => 'value4',
    ));
  }
  public function testChunkEvenly() {
    $input = array_combine(range(10, 1, -1), range(1, 10));
    $result = ArrayHelper::chunkEvenly($input, 3);
    $this
      ->assertIdentical($result, array(
      0 => array(
        1,
        2,
        3,
        4,
      ),
      1 => array(
        5,
        6,
        7,
      ),
      2 => array(
        8,
        9,
        10,
      ),
    ));
    $result = ArrayHelper::chunkEvenly($input, 4, TRUE);
    $this
      ->assertIdentical($result, array(
      0 => array(
        10 => 1,
        9 => 2,
        8 => 3,
      ),
      1 => array(
        7 => 4,
        6 => 5,
        5 => 6,
      ),
      2 => array(
        4 => 7,
        3 => 8,
      ),
      3 => array(
        2 => 9,
        1 => 10,
      ),
    ));

    // Test using $num greater than items in the array.
    $result = ArrayHelper::chunkEvenly($input, 11);
    $this
      ->assertIdentical($result, array(
      0 => array(
        1,
      ),
      1 => array(
        2,
      ),
      2 => array(
        3,
      ),
      3 => array(
        4,
      ),
      4 => array(
        5,
      ),
      5 => array(
        6,
      ),
      6 => array(
        7,
      ),
      7 => array(
        8,
      ),
      8 => array(
        9,
      ),
      9 => array(
        10,
      ),
    ));

    // Test empty array.
    $this
      ->assertIdentical(ArrayHelper::chunkEvenly(array(), 1), array());
    $this
      ->assertIdentical(ArrayHelper::chunkEvenly(array(), 5), array());

    // Test $num less than 1.
    try {
      $this
        ->assertIdentical(ArrayHelper::chunkEvenly($input, 0), array());
      throw new Exception();
    } catch (InvalidArgumentException $e) {
      $this
        ->pass("InvalidArgumentException thrown.");
    } catch (Exception $e) {
      $this
        ->fail("InvalidArgumentException not thrown.");
    }

    // Test non-numeric $num
    try {
      $this
        ->assertIdentical(ArrayHelper::chunkEvenly($input, 'invalid'), array());
      throw new Exception();
    } catch (InvalidArgumentException $e) {
      $this
        ->pass("InvalidArgumentException thrown.");
    } catch (Exception $e) {
      $this
        ->fail("InvalidArgumentException not thrown.");
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ArrayHelperTest::getInfo public static function
ArrayHelperTest::testChunkEvenly public function
ArrayHelperTest::testFilterKeys function
ArrayHelperTest::testMapKeys function
ArrayHelperTest::testNestedValue function
ArrayHelperTest::testSpliceAssociativeValues public function
DrupalTestCase::$assertions protected property Assertions thrown in that test case.
DrupalTestCase::$databasePrefix protected property The database prefix of this test run.
DrupalTestCase::$originalFileDirectory protected property The original file directory, before it was changed for testing purposes.
DrupalTestCase::$results public property Current results of this test case.
DrupalTestCase::$setup protected property Flag to indicate whether the test has been set up.
DrupalTestCase::$setupDatabasePrefix protected property
DrupalTestCase::$setupEnvironment protected property
DrupalTestCase::$skipClasses protected property This class is skipped when looking for the source of an assertion.
DrupalTestCase::$testId protected property The test run ID.
DrupalTestCase::$timeLimit protected property Time limit for the test.
DrupalTestCase::$useSetupInstallationCache public property Whether to cache the installation part of the setUp() method.
DrupalTestCase::$useSetupModulesCache public property Whether to cache the modules installation part of the setUp() method.
DrupalTestCase::$verboseDirectoryUrl protected property URL to the verbose output file directory.
DrupalTestCase::assert protected function Internal helper: stores the assert.
DrupalTestCase::assertEqual protected function Check to see if two values are equal.
DrupalTestCase::assertFalse protected function Check to see if a value is false (an empty string, 0, NULL, or FALSE).
DrupalTestCase::assertIdentical protected function Check to see if two values are identical.
DrupalTestCase::assertNotEqual protected function Check to see if two values are not equal.
DrupalTestCase::assertNotIdentical protected function Check to see if two values are not identical.
DrupalTestCase::assertNotNull protected function Check to see if a value is not NULL.
DrupalTestCase::assertNull protected function Check to see if a value is NULL.
DrupalTestCase::assertTrue protected function Check to see if a value is not false (not an empty string, 0, NULL, or FALSE).
DrupalTestCase::deleteAssert public static function Delete an assertion record by message ID.
DrupalTestCase::error protected function Fire an error assertion. 1
DrupalTestCase::errorHandler public function Handle errors during test runs. 1
DrupalTestCase::exceptionHandler protected function Handle exceptions.
DrupalTestCase::fail protected function Fire an assertion that is always negative.
DrupalTestCase::generatePermutations public static function Converts a list of possible parameters into a stack of permutations.
DrupalTestCase::getAssertionCall protected function Cycles through backtrace until the first non-assertion method is found.
DrupalTestCase::getDatabaseConnection public static function Returns the database connection to the site running Simpletest.
DrupalTestCase::insertAssert public static function Store an assertion from outside the testing context.
DrupalTestCase::pass protected function Fire an assertion that is always positive.
DrupalTestCase::randomName public static function Generates a random string containing letters and numbers.
DrupalTestCase::randomString public static function Generates a random string of ASCII characters of codes 32 to 126.
DrupalTestCase::run public function Run all tests in this class.
DrupalTestCase::verbose protected function Logs a verbose message in a text file.
DrupalUnitTestCase::setUp protected function Sets up unit test environment. 9
DrupalUnitTestCase::tearDown protected function 1
DrupalUnitTestCase::__construct function Constructor for DrupalUnitTestCase. Overrides DrupalTestCase::__construct