File: /data/wwwroot/default/phpMyAdmin/test/libraries/core/PMA_array_test.php
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA_arrayRead(), PMA_arrayWrite(), PMA_arrayRemove(),
* PMA_arrayMergeRecursive(),
* PMA_arrayWalkRecursive() from libraries/core.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/core.lib.php';
/**
* Test for PMA_arrayRead(), PMA_arrayWrite(), PMA_arrayRemove(),
* PMA_arrayMergeRecursive(),
* PMA_arrayWalkRecursive() from libraries/core.lib.php
*
* @package PhpMyAdmin-test
*/
class PMA_Array_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_arrayRead
*
* @return void
*/
function testRead()
{
$arr = array(
"int" => 1,
"str" => "str_val",
"arr" => array('val1', 'val2', 'val3'),
"sarr" => array(
'arr1' => array(1, 2, 3),
array(3, array('a', 'b', 'c'), 4)
)
);
$this->assertEquals(
PMA_arrayRead('int', $arr),
$arr['int']
);
$this->assertEquals(
PMA_arrayRead('str', $arr),
$arr['str']
);
$this->assertEquals(
PMA_arrayRead('arr/0', $arr),
$arr['arr'][0]
);
$this->assertEquals(
PMA_arrayRead('arr/1', $arr),
$arr['arr'][1]
);
$this->assertEquals(
PMA_arrayRead('arr/2', $arr),
$arr['arr'][2]
);
$this->assertEquals(
PMA_arrayRead('sarr/arr1/0', $arr),
$arr['sarr']['arr1'][0]
);
$this->assertEquals(
PMA_arrayRead('sarr/arr1/1', $arr),
$arr['sarr']['arr1'][1]
);
$this->assertEquals(
PMA_arrayRead('sarr/arr1/2', $arr),
$arr['sarr']['arr1'][2]
);
$this->assertEquals(
PMA_arrayRead('sarr/0/0', $arr),
$arr['sarr'][0][0]
);
$this->assertEquals(
PMA_arrayRead('sarr/0/1', $arr),
$arr['sarr'][0][1]
);
$this->assertEquals(
PMA_arrayRead('sarr/0/1/2', $arr),
$arr['sarr'][0][1][2]
);
$this->assertEquals(
PMA_arrayRead('sarr/not_exiting/1', $arr),
null
);
$this->assertEquals(
PMA_arrayRead('sarr/not_exiting/1', $arr, 0),
0
);
$this->assertEquals(
PMA_arrayRead('sarr/not_exiting/1', $arr, 'default_val'),
'default_val'
);
}
/**
* Test for PMA_arrayWrite
*
* @return void
*/
function testWrite()
{
$arr = array(
"int" => 1,
"str" => "str_val",
"arr" => array('val1', 'val2', 'val3'),
"sarr" => array(
'arr1' => array(1, 2, 3),
array(3, array('a', 'b', 'c'), 4)
)
);
PMA_arrayWrite('int', $arr, 5);
$this->assertEquals($arr['int'], 5);
PMA_arrayWrite('str', $arr, '_str');
$this->assertEquals($arr['str'], '_str');
PMA_arrayWrite('arr/0', $arr, 'val_arr_0');
$this->assertEquals($arr['arr'][0], 'val_arr_0');
PMA_arrayWrite('arr/1', $arr, 'val_arr_1');
$this->assertEquals($arr['arr'][1], 'val_arr_1');
PMA_arrayWrite('arr/2', $arr, 'val_arr_2');
$this->assertEquals($arr['arr'][2], 'val_arr_2');
PMA_arrayWrite('sarr/arr1/0', $arr, 'val_sarr_arr_0');
$this->assertEquals($arr['sarr']['arr1'][0], 'val_sarr_arr_0');
PMA_arrayWrite('sarr/arr1/1', $arr, 'val_sarr_arr_1');
$this->assertEquals($arr['sarr']['arr1'][1], 'val_sarr_arr_1');
PMA_arrayWrite('sarr/arr1/2', $arr, 'val_sarr_arr_2');
$this->assertEquals($arr['sarr']['arr1'][2], 'val_sarr_arr_2');
PMA_arrayWrite('sarr/0/0', $arr, 5);
$this->assertEquals($arr['sarr'][0][0], 5);
PMA_arrayWrite('sarr/0/1/0', $arr, 'e');
$this->assertEquals($arr['sarr'][0][1][0], 'e');
PMA_arrayWrite('sarr/not_existing/1', $arr, 'some_val');
$this->assertEquals($arr['sarr']['not_existing'][1], 'some_val');
PMA_arrayWrite('sarr/0/2', $arr, null);
$this->assertNull($arr['sarr'][0][2]);
}
/**
* Test for PMA_arrayRemove
*
* @return void
*/
function testRemove()
{
$arr = array(
"int" => 1,
"str" => "str_val",
"arr" => array('val1', 'val2', 'val3'),
"sarr" => array(
'arr1' => array(1, 2, 3),
array(3, array('a', 'b', 'c'), 4)
)
);
PMA_arrayRemove('int', $arr);
$this->assertArrayNotHasKey('int', $arr);
PMA_arrayRemove('str', $arr);
$this->assertArrayNotHasKey('str', $arr);
PMA_arrayRemove('arr/0', $arr);
$this->assertArrayNotHasKey(0, $arr['arr']);
PMA_arrayRemove('arr/1', $arr);
$this->assertArrayNotHasKey(1, $arr['arr']);
PMA_arrayRemove('arr/2', $arr);
$this->assertArrayNotHasKey('arr', $arr);
$tmp_arr = $arr;
PMA_arrayRemove('sarr/not_existing/1', $arr);
$this->assertEquals($tmp_arr, $arr);
PMA_arrayRemove('sarr/arr1/0', $arr);
$this->assertArrayNotHasKey(0, $arr['sarr']['arr1']);
PMA_arrayRemove('sarr/arr1/1', $arr);
$this->assertArrayNotHasKey(1, $arr['sarr']['arr1']);
PMA_arrayRemove('sarr/arr1/2', $arr);
$this->assertArrayNotHasKey('arr1', $arr['sarr']);
PMA_arrayRemove('sarr/0/0', $arr);
$this->assertArrayNotHasKey(0, $arr['sarr'][0]);
PMA_arrayRemove('sarr/0/1/0', $arr);
$this->assertArrayNotHasKey(0, $arr['sarr'][0][1]);
PMA_arrayRemove('sarr/0/1/1', $arr);
$this->assertArrayNotHasKey(1, $arr['sarr'][0][1]);
PMA_arrayRemove('sarr/0/1/2', $arr);
$this->assertArrayNotHasKey(1, $arr['sarr'][0]);
PMA_arrayRemove('sarr/0/2', $arr);
$this->assertEmpty($arr);
}
/**
* Test for PMA_arrayMergeRecursive
*
* @return void
*/
function testMergeRecursive()
{
$arr1 = array('key1' => 1, 'key2' => 2.3, 'key3' => 'str3');
$arr2 = array('key1' => 4, 'key2' => 5, 'key3' => 6);
$arr3 = array('key4' => 7, 'key5' => 'str8', 'key6' => 9);
$arr4 = array(1, 2, 3);
$this->assertFalse(PMA_arrayMergeRecursive());
$this->assertEquals(PMA_arrayMergeRecursive($arr1), $arr1);
$this->assertEquals(PMA_arrayMergeRecursive($arr1, 'str'), 'str');
$this->assertEquals(PMA_arrayMergeRecursive('str1', $arr2), $arr2);
$this->assertEquals(
PMA_arrayMergeRecursive($arr1, $arr2),
array('key1' => 4, 'key2' => 5, 'key3' => 6)
);
$this->assertEquals(
PMA_arrayMergeRecursive($arr1, $arr3),
array(
'key1' => 1,
'key2' => 2.3,
'key3' => 'str3',
'key4' => 7,
'key5' => 'str8',
'key6' => 9
)
);
$this->assertEquals(PMA_arrayMergeRecursive($arr2, $arr4), array(1, 2, 3));
$this->assertEquals(
PMA_arrayMergeRecursive($arr1, $arr2, $arr3),
array(
'key1' => 4,
'key2' => 5,
'key3' => 6,
'key4' => 7,
'key5' => 'str8',
'key6' => 9
)
);
}
/**
* Test for PMA_arrayWalkRecursive
*
* @return void
*/
function testWalkRecursive()
{
/**
* Concat a variable to a string
*
* @param string $var Variable to concat
*
* @return string
*/
function fConcat($var)
{
return 'val: ' . $var . ' processed';
}
$arr = array(1, 2, 3, 4);
$target = array(
'val: 1 processed',
'val: 2 processed',
'val: 3 processed',
'val: 4 processed'
);
PMA_arrayWalkRecursive($arr, 'fConcat');
$this->assertEquals($arr, $target);
}
/**
* Test for PMA_arrayWalkRecursive
*
* @return void
*
* @depends testWalkRecursive
*/
function testWalkRecursiveNotProcessIntKeys()
{
/**
* Increment a variable
*
* @param int $var Variable to increment
*
* @return int
*/
function fAdd($var)
{
return ++$var;
}
$arr = array(1, 2, 3, 4);
$target = array(2, 3, 4, 5);
PMA_arrayWalkRecursive($arr, 'fAdd', true);
$this->assertEquals($arr, $target);
}
/**
* Test for PMA_arrayWalkRecursive
*
* @return void
*
* @depends testWalkRecursiveNotProcessIntKeys
*/
function testWalkRecursiveSubArray()
{
$arr = array(
"key1"=>'val1',
'key2'=>array('skey1'=>'sval1', 'skey2'=>'sval2'),
'key3'=>'val3'
);
$target = array(
'key1'=>'val: val1 processed',
'key2'=> array(
'skey1'=>'val: sval1 processed', 'skey2'=>'val: sval2 processed'
),
'key3'=>'val: val3 processed'
);
PMA_arrayWalkRecursive($arr, 'fConcat');
$this->assertEquals($arr, $target);
}
/**
* Test for PMA_arrayWalkRecursive
*
* @return void
*/
function testWalkRecursiveApplyToKeysStripSlashes()
{
$arr = array(
"key\\1"=>'v\\\\al1',
'k\\ey2'=>array('s\\\\key1'=>'sval\\1', 's\\k\\ey2'=>'s\\v\\al2'),
'key3'=>'val3'
);
$second = $arr;
$target = array(
"key1"=>'v\\al1',
'key2'=>array('s\\key1'=>'sval1', 'skey2'=>'sval2'),
'key3'=>'val3'
);
PMA_arrayWalkRecursive($arr, 'stripslashes', true);
$this->assertEquals($arr, $target);
PMA_arrayWalkRecursive($second, 'stripslashes', true);
$this->assertEquals($second, $target);
}
}