| 
<?phpnamespace 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);
 }
 }
 ?>
 |