<?php
namespace eMapper\Cache;
use eMapper\Cache\Key\CacheKey;
use eMapper\Type\TypeManager;
/**
* Tests building cache key through the CacheKey class with different type modifiers and ranges
*
* @author emaphp
* @group cache
*/
class ArgumentCacheKeyTest extends \PHPUnit_Framework_TestCase {
/**
* Cache key generator
* @var CacheKey
*/
public $cacheKey;
public function __construct() {
$this->cacheKey = new CacheKey(new TypeManager());
}
/**
* Tests various type handlers applied to distinct types
*/
public function testArgumentCacheKey() {
$result = $this->cacheKey->build('USER_%{0}_%{0:s}_%{0:ss}_%{0:i}_%{0:f}_%{0:b}', [25], []);
$this->assertEquals('USER_25_25_25_25_25_TRUE', $result);
$result = $this->cacheKey->build('PRICE_%{0}_%{0:s}_%{0:ss}_%{0:i}_%{0:f}_%{0:b}', [39.95], []);
$this->assertEquals('PRICE_39.95_39.95_39.95_39_39.95_TRUE', $result);
$result = $this->cacheKey->build('PROD_%{0}_%{0:s}_%{0:ss}_%{0:i}_%{0:f}_%{0:b}', ['XYZ123'], []);
$this->assertEquals('PROD_XYZ123_XYZ123_XYZ123_0_0_TRUE', $result);
$result = $this->cacheKey->build('AVAL_%{0}_%{0:s}_%{0:ss}_%{0:i}_%{0:f}_%{0:b}', [true], []);
$this->assertEquals('AVAL_TRUE_1_1_1_1_TRUE', $result);
$result = $this->cacheKey->build('MIX_%{3}_%{2}_%{1}_%{0}', [25, 39.95, 'XYZ123', true], []);
$this->assertEquals('MIX_TRUE_XYZ123_39.95_25', $result);
}
/**
* Tests accesing properties through subindexes
*/
public function testArgumentSubindex() {
$result = $this->cacheKey->build('ID_%{0[id]}_NAME_%{0[0]}', [['id' => 1, 'jdoe']], []);
$this->assertEquals('ID_1_NAME_jdoe', $result);
$result = $this->cacheKey->build('ID_#{data[id]}_NAME_#{data[0]}', [['data' => ['id' => 1, 'jdoe']]], []);
$this->assertEquals('ID_1_NAME_jdoe', $result);
}
/**
* Tests accesing elemements in an array through ranges
*/
public function testArgumentArrayRange() {
$result = $this->cacheKey->build('IDS_%{0[2..2]}', [[45, 23, '43', '164', 43]], []);
$this->assertEquals('IDS_43_164', $result);
$result = $this->cacheKey->build('IDS_%{0[2..]}', [[45, 23, '43', '164', 43]], []);
$this->assertEquals('IDS_43_164_43', $result);
$result = $this->cacheKey->build('IDS_%{0[..3]}', [[45, 23, '43', '164', 43]], []);
$this->assertEquals('IDS_45_23_43', $result);
$result = $this->cacheKey->build('IDS_%{0[..]}', [[45, 23, '43', '164', 43]], []);
$this->assertEquals('IDS_45_23_43_164_43', $result);
$result = $this->cacheKey->build('IDS_#{data[2..2]}', [['data' => [45, 23, '43', '164', 43]]], []);
$this->assertEquals('IDS_43_164', $result);
$result = $this->cacheKey->build('IDS_#{data[2..]}', [['data' => [45, 23, '43', '164', 43]]], []);
$this->assertEquals('IDS_43_164_43', $result);
$result = $this->cacheKey->build('IDS_#{data[..3]}', [['data' => [45, 23, '43', '164', 43]]], []);
$this->assertEquals('IDS_45_23_43', $result);
$result = $this->cacheKey->build('IDS_#{data[..]}', [['data' => [45, 23, '43', '164', 43]]], []);
$this->assertEquals('IDS_45_23_43_164_43', $result);
}
public function testArgumentStringRange() {
$result = $this->cacheKey->build('COD_%{0[2..2]}', ["supercheria"], []);
$this->assertEquals('COD_pe', $result);
$result = $this->cacheKey->build('COD_%{0[2..]}', ["supercheria"], []);
$this->assertEquals('COD_percheria', $result);
$result = $this->cacheKey->build('COD_%{0[..3]}', ["supercheria"], []);
$this->assertEquals('COD_sup', $result);
$result = $this->cacheKey->build('COD_%{0[..]}', ["supercheria"], []);
$this->assertEquals('COD_supercheria', $result);
$result = $this->cacheKey->build('COD_#{data[2..2]}', [['data' => "supercheria"]], []);
$this->assertEquals('COD_pe', $result);
$result = $this->cacheKey->build('COD_#{data[2..]}', [['data' => "supercheria"]], []);
$this->assertEquals('COD_percheria', $result);
$result = $this->cacheKey->build('COD_#{data[..3]}', [['data' => "supercheria"]], []);
$this->assertEquals('COD_sup', $result);
$result = $this->cacheKey->build('COD_#{data[..]}', [['data' => "supercheria"]], []);
$this->assertEquals('COD_supercheria', $result);
}
}
?>
|