2007-09-21 01:23:09 +00:00
< ? php
/* SVN FILE: $Id: magic_db.test.php 5444 2007-07-19 13:38:26Z the_undefined $ */
/**
* MagicDb test
*
* PHP versions 4 and 5
*
* CakePHP ( tm ) : Rapid Development Framework < http :// www . cakephp . org />
* Copyright 2005 - 2007 , Cake Software Foundation , Inc .
* 1785 E . Sahara Avenue , Suite 490 - 204
* Las Vegas , Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice .
*
* @ filesource
* @ copyright Copyright 2005 - 2007 , Cake Software Foundation , Inc .
* @ link http :// www . cakefoundation . org / projects / info / cakephp CakePHP ( tm ) Project
* @ package cake
* @ subpackage cake . cake . libs
* @ since CakePHP ( tm ) v 1.2 . 0
* @ version $Revision : 5444 $
* @ modifiedby $LastChangedBy : the_undefined $
* @ lastmodified $Date : 2007 - 07 - 19 15 : 38 : 26 + 0200 ( Do , 19 Jul 2007 ) $
* @ license http :// www . opensource . org / licenses / mit - license . php The MIT License
*/
2007-09-21 01:45:42 +00:00
uses ( 'magic_db' , 'object' );
2007-09-21 01:23:09 +00:00
/**
* The test class for the MagicDb classA
*
* @ package cake . tests
* @ subpackage cake . tests . cases . libs
*/
class MagicDbTest extends UnitTestCase {
/**
* The MagicDb instance to be tested
*
* @ var object
* @ access public
*/
var $Db = null ;
/**
* Sets up a MagicDb class instance for testing
*
* @ return void
* @ access public
*/
function setUp () {
$this -> Db =& new MagicDb ();
}
2007-10-08 01:25:33 +00:00
/**
* MagicDb :: analyze should properly detect the file type and output additional info as requested .
*
* @ return void
* @ access public
*/
function testAnalyze () {
$r = $this -> Db -> read ( MagicDbTestData :: get ( 'magic.db' ));
$this -> assertTrue ( $r === true );
$r = $this -> Db -> analyze ( array ());
$this -> assertTrue ( $r === false );
// TODO: Check several serialized file samples for accurate detection
}
2007-09-21 01:23:09 +00:00
/**
* MagicDb :: read should properly read MagicDb databases from . php -/. db - files and plain data arguments passed in and return false if the file wasn ' t found or
* if the readed data did not validate .
*
* @ return void
* @ access public
*/
function testRead () {
$this -> Db -> db = array ();
2007-09-21 01:45:42 +00:00
2007-09-21 01:23:09 +00:00
$r = $this -> Db -> read ( true );
$this -> assertTrue ( $r === false );
$r = $this -> Db -> read ( 5 );
$this -> assertTrue ( $r === false );
2007-09-21 01:45:42 +00:00
2007-09-21 01:23:09 +00:00
$this -> Db -> db = array ( 'a' );
$r = $this -> Db -> read ( array ( 'foo' => 'bar' ));
$this -> assertTrue ( $r === false );
$this -> assertTrue ( $this -> Db -> db === array ( 'a' ));
$magicDb = array ( 'header' => array (), 'database' => array ());
$r = $this -> Db -> read ( $magicDb );
$this -> assertTrue ( $r === true );
$this -> assertTrue ( $this -> Db -> db === $magicDb );
// @TODO: Test parsing an actual magic.db file
$r = $this -> Db -> read ( 'does-not-exist.db' );
$this -> assertTrue ( $r === false );
$this -> assertTrue ( $this -> Db -> db === $magicDb );
2007-09-21 01:45:42 +00:00
2007-09-21 01:23:09 +00:00
if ( file_exists ( VENDORS . 'magic.php' )) {
$r = $this -> Db -> read ( VENDORS . 'magic.php' );
$this -> assertTrue ( $r === true );
2007-09-24 23:49:54 +00:00
$this -> assertTrue ( $this -> Db -> db === array ( 'header' => array (), 'database' => array ()));
2007-09-21 01:23:09 +00:00
}
2007-09-21 01:45:42 +00:00
2007-10-08 01:25:33 +00:00
$r = $this -> Db -> read ( MagicDbTestData :: get ( 'magic.snippet.db' ));
$this -> assertTrue ( $r === true );
2007-09-21 01:23:09 +00:00
}
/**
* MagicDb :: toArray should either return the MagicDb :: db property , or the parsed array data if a magic . db dump is passed in as the first argument
*
* @ return void
* @ access public
*/
function testToArray () {
$this -> Db -> db = array ();
2007-09-21 01:45:42 +00:00
2007-09-21 01:23:09 +00:00
$r = $this -> Db -> toArray ();
$this -> assertTrue ( $r === array ());
$this -> Db -> db = array ( 'foo' => 'bar' );
$r = $this -> Db -> toArray ();
$this -> assertTrue ( $r === array ( 'foo' => 'bar' ));
$r = $this -> Db -> toArray ( array ( 'yeah' ));
$this -> assertTrue ( $r === array ( 'yeah' ));
$r = $this -> Db -> toArray ( 'foo' );
$this -> assertTrue ( $r === array ());
2007-10-08 01:25:33 +00:00
$r = $this -> Db -> toArray ( MagicDbTestData :: get ( 'magic.snippet.db' ));
$this -> assertTrue ( $r === MagicDbTestData :: get ( 'magic.snippet.db.result' ));
2007-09-21 01:23:09 +00:00
}
2007-09-24 23:49:54 +00:00
2007-09-21 01:23:09 +00:00
/**
* The MagicDb :: validates function should return if the array passed to it or the local db property contains a valid MagicDb record set
*
* @ return void
* @ access public
*/
function testValidates () {
$r = $this -> Db -> validates ( array ());
$this -> assertTrue ( $r === false );
2007-09-21 01:45:42 +00:00
2007-09-21 01:23:09 +00:00
$r = $this -> Db -> validates ( array ( 'header' => true , 'database' => true ));
$this -> assertTrue ( $r === false );
$magicDb = array ( 'header' => array (), 'database' => array ());
$r = $this -> Db -> validates ( $magicDb );
$this -> assertTrue ( $r === true );
$this -> Db -> db = array ();
$r = $this -> Db -> validates ();
$this -> assertTrue ( $r === false );
2007-09-21 01:45:42 +00:00
2007-09-21 01:23:09 +00:00
$this -> Db -> db = $magicDb ;
$r = $this -> Db -> validates ();
$this -> assertTrue ( $r === true );
}
}
/**
* Test data holding object for MagicDb tests
*
* @ package cake . tests
* @ subpackage cake . tests . cases . libs
*/
class MagicDbTestData extends Object {
/**
* Base64 encoded data
*
* @ var array
* @ access public
*/
var $data = array (
2007-10-08 01:25:33 +00:00
'magic.snippet.db' => 'IyBGSUxFX0lEIERCDQojIERhdGU6MjAwNS0wMy0yOQ0KIyBTb3VyY2U6aHR0cDovL3d3dy5tYWdpY2RiLm9yZw0KDQojIE1hZ2ljIElEIGZvciBXb3JkcGVyZmVjdCBmaWxlcy4NCiMgU3VibWl0dGVkIG9uIDIwMDQtMDItMTQgYnkgQ2FybA0KMAlzdHJpbmcJXFx4RkZXUEMJW2ZpZD0wMDAwMDEwMDgtMDAtMDAwMDAwMTtleHQ9O21pbWU9O11Xb3JkcGVyZmVjdCBoZWxwIGZpbGUNCiY5CWJ5dGUJMHgwMgkNCj4xMCBieXRlCXgJLCB2ZXJzaW9uICVkDQo+MTEJYnl0ZQl4CS4lZA0KDQojIE1hZ2ljIElEIGZvciBXb3JkcGVyZmVjdCBmaWxlcy4NCiMgU3VibWl0dGVkIG9uIDIwMDQtMDItMTQgYnkgQ2FybA0KMAlzdHJpbmcJXFx4RkZXUEMJW2ZpZD0wMDAwMDEwMDgtMDAtMDAwMDAwMTtleHQ9O21pbWU9O11Xb3JkcGVyZmVjdCBhcHBsaWNhdGlvbiByZXNvdXJjZSBsaWJyYXJ5DQomOQlieXRlCTUxCQ0KPjEwCWJ5dGUJeAksIHZlcnNpb24gJWQNCj4xMQlieXRlCXgJLiVkDQoNCiMgTWFnaWMgSUQgZm9yIFdvcmRwZXJmZWN0IGZpbGVzLg0KIyBTdWJtaXR0ZWQgb24gMjAwNC0wMi0xNCBieSBDYXJsDQowCXN0cmluZwlcXHhGRldQQwlbZmlkPTAwMDAwMTAwOC0wMC0wMDAwMDAxO2V4dD07bWltZT07XVdvcmRwZXJmZWN0IGJsb2NrIGZpbGUNCiY5CWJ5dGUJMTMJDQo+MTAJYnl0ZQl4CSwgdmVyc2lvbiAlZA0KPjExCWJ5dGUJeAkuJWQ=' ,
'magic.snippet.db.result' => 'a:2:{s:6:"header";a:2:{s:4:"Date";s:10:"2005-03-29";s:6:"Source";s:22:"http://www.magicdb.org";}s:8:"database";a:2:{i:0;a:3:{i:0;a:4:{i:0;s:2:"&9";i:1;s:4:"byte";i:2;s:4:"0x02";i:3;s:0:"";}i:1;a:3:{i:0;s:8:">10 byte";i:1;s:1:"x";i:2;s:12:", version %d";}i:2;a:4:{i:0;s:3:">11";i:1;s:4:"byte";i:2;s:1:"x";i:3;s:3:".%d";}}i:1;a:3:{i:0;a:4:{i:0;s:2:"&9";i:1;s:4:"byte";i:2;s:2:"51";i:3;s:0:"";}i:1;a:4:{i:0;s:3:">10";i:1;s:4:"byte";i:2;s:1:"x";i:3;s:12:", version %d";}i:2;a:4:{i:0;s:3:">11";i:1;s:4:"byte";i:2;s:1:"x";i:3;s:3:".%d";}}}}' ,
'magic.db' => ' IyBGSUxFX0lEIERCDQojIERhdGU6MjAwNS0wMy0yOQ0KIyBTb3VyY2U6aHR0cDovL3d3dy5tYWdpY2RiLm9yZw0KDQojIE1hZ2ljIElEIGZvciBXb3JkcGVyZmVjdCBmaWxlcy4NCiMgU3VibWl0dGVkIG9uIDIwMDQtMDItMTQgYnkgQ2FybA0KMAlzdHJpbmcJXFx4RkZXUEMJW2ZpZD0wMDAwMDEwMDgtMDAtMDAwMDAwMTtleHQ9O21pbWU9O11Xb3JkcGVyZmVjdCBoZWxwIGZpbGUNCiY5CWJ5dGUJMHgwMgkNCj4xMCBieXRlCXgJLCB2ZXJzaW9uICVkDQo + MTEJYnl0ZQl4CS4lZA0KDQojIE1hZ2ljIElEIGZvciBXb3JkcGVyZmVjdCBmaWxlcy4NCiMgU3VibWl0dGVkIG9uIDIwMDQtMDItMTQgYnkgQ2FybA0KMAlzdHJpbmcJXFx4RkZXUEMJW2ZpZD0wMDAwMDEwMDgtMDAtMDAwMDAwMTtleHQ9O21pbWU9O11Xb3JkcGVyZmVjdCBhcHBsaWNhdGlvbiByZXNvdXJjZSBsaWJyYXJ5DQomOQlieXRlCTUxCQ0KPjEwCWJ5dGUJeAksIHZlcnNpb24gJWQNCj4xMQlieXRlCXgJLiVkDQoNCiMgTWFnaWMgSUQgZm9yIFdvcmRwZXJmZWN0IGZpbGVzLg0KIyBTdWJtaXR0ZWQgb24gMjAwNC0wMi0xNCBieSBDYXJsDQowCXN0cmluZwlcXHhGRldQQwlbZmlkPTAwMDAwMTAwOC0wMC0wMDAwMDAxO2V4dD07bWltZT07XVdvcmRwZXJmZWN0IGJsb2NrIGZpbGUNCiY5CWJ5dGUJMTMJDQo + MTAJYnl0ZQl4CSwgdmVyc2lvbiAlZA0KPjExCWJ5dGUJeAkuJWQNCg0KIyBNYWdpYyBJRCBmb3IgV29yZHBlcmZlY3QgZmlsZXMuDQojIFN1Ym1pdHRlZCBvbiAyMDA0LTAyLTE0IGJ5IENhcmwNCjAJc3RyaW5nCVxceEZGV1BDCVtmaWQ9MDAwMDAxMDA4LTAwLTAwMDAwMDE7ZXh0PTttaW1lPTtdV29yZHBlcmZlY3QgY29sdW1uIGJsb2NrDQomOQlieXRlCTE1CQ0KPjEwCWJ5dGUJeAksIHZlcnNpb24gJWQNCj4xMQlieXRlCXgJLiVkDQoNCiMgTWFnaWMgSUQgZm9yIFdvcmRwZXJmZWN0IGZpbGVzLg0KIyBTdWJtaXR0ZWQgb24gMjAwNC0wMi0xNCBieSBDYXJsDQowCXN0cmluZwlcXHhGRldQQwlbZmlkPTAwMDAwMTAwOC0wMC0wMDAwMDAxO2V4dD07bWltZT07XVdvcmRwZXJmZWN0IGRpY3Rpb25hcnkgZmlsZQ0KJjkJYnl0ZQkweDBCCQ0KPjEwCWJ5dGUJeAksIHZlcnNpb24gJWQNCj4xMQlieXRlCXgJLiVkDQoNCiMgTWFnaWMgSUQgZm9yIFdvcmRwZXJmZWN0IGZpbGVzLg0KIyBTdWJtaXR0ZWQgb24gMjAwNC0wMi0xNCBieSBDYXJsDQowCXN0cmluZwlcXHhGRldQQwlbZmlkPTAwMDAwMTAwOC0wMC0wMDAwMDAxO2V4dD07bWltZT07XVdvcmRwZXJmZWN0IGRpY3Rpb25hcnkgcnVsZXMgZmlsZQ0KJjkJYnl0ZQkzNAkNCj4xMAlieXRlCXgJLCB2ZXJzaW9uICVkDQo + MTEJYnl0ZQl4CS4lZA0KDQojIE1hZ2ljIElEIGZvciBXb3JkcGVyZmVjdCBmaWxlcy4NCiMgU3VibWl0dGVkIG9uIDIwMDQtMDItMTQgYnkgQ2FybA0KMAlzdHJpbmcJXFx4RkZXUEMJW2ZpZD0wMDAwMDEwMDgtMDAtMDAwMDAwMTtleHQ9O21pbWU9O11Xb3JkcGVyZmVjdCBleHRlcm5hbCBzcGVsbCBjb2RlIG1vZHVsZSBmaWxlDQomOQlieXRlCTQ2CQ0KPjEwCWJ5dGUJeAksIHZlcnNpb24gJWQNCj4xMQlieXRlCXgJLiVkDQoNCiMgTWFnaWMgSUQgZm9yIFdvcmRwZXJmZWN0IGZpbGVzLg0KIyBTdWJtaXR0ZWQgb24gMjAwNC0wMi0xNCBieSBDYXJsDQowCXN0cmluZwlcXHhGRldQQwlbZmlkPTAwMDAwMTAwOC0wMC0wMDAwMDAxO2V4dD07bWltZT07XVdvcmRwZXJmZWN0IGV4dGVybmFsIHNwZWxsIGRpY3Rpb25hcnkgZmlsZQ0KJjkJYnl0ZQk0NwkNCj4xMAlieXRlCXgJLCB2ZXJzaW9uICVkDQo + MTEJYnl0ZQl4CS4lZA0KDQojIE1hZ2ljIElEIGZvciBXb3JkcGVyZmVjdCBmaWxlcy4NCiMgU3VibWl0dGVkIG9uIDIwMDQtMDItMTQgYnkgQ2FybA0KMAlzdHJpbmcJXFx4RkZXUEMJW2ZpZD0wMDAwMDEwMDgtMDAtMDAwMDAwMTtleHQ9O21pbWU9O11Xb3JkcGVyZmVjdCBHcmFwaGljcyBzY3JlZW4gZHJpdmVyIGZpbGUNCiY5CWJ5dGUJMjYJDQo + MTAJYnl0ZQl4CSwgdmVyc2lvbiAlZA0KPjExCWJ5dGUJeAkuJWQNCg0KIyBNYWdpYyBJRCBmb3IgV29yZHBlcmZlY3QgZmlsZXMuDQojIFN1Ym1pdHRlZCBvbiAyMDA0LTAyLTE0IGJ5IENhcmwNCjAJc3RyaW5nCVxceEZGV1BDCVtmaWQ9MDAwMDAxMDA4LTAwLTAwMDAwMDE7ZXh0PTttaW1lPTtdV29yZHBlcmZlY3QgaHlwaGVuYXRpb24gY29kZSBtb2R1bGUgZmlsZQ0KJjkJYnl0ZQkyMwkNCj4xMAlieXRlCXgJLCB2ZXJzaW9uICVkDQo + MTEJYnl0ZQl4CS4lZA0KDQojIE1hZ2ljIElEIGZvciBXb3JkcGVyZmVjdCBmaWxlcy4NCiMgU3VibWl0dGVkIG9uIDIwMDQtMDItMTQgYnkgQ2FybA0KMAlzdHJpbmcJXFx4RkZXUEMJW2ZpZD0wMDAwMDEwMDgtMDAtMDAwMDAwMTtleHQ9O21pbWU9O11Xb3JkcGVyZmVjdCBoeXBoZW5hdGlvbiBkYXRhIG1vZHVsZSBmaWxlDQomOQlieXRlCTI0CQ0KPjEwCWJ5dGUJeAksIHZlcnNpb24gJWQNCj4xMQlieXRlCXgJLiVkDQoNCiMgTWFnaWMgSUQgZm9yIFdvcmRwZXJmZWN0IGZpbGVzLg0KIyBTdWJtaXR0ZWQgb24gMjAwNC0wMi0xNCBieSBDYXJsDQowCXN0cmluZwlcXHhGRldQQwlbZmlkPTAwMDAwMTAwOC0wMC0wMDAwMDAxO2V4dD07bWltZT07XVdvcmRwZXJmZWN0IGh5cGhlbmF0aW9uIGxleCBtb2R1bGUNCiY5CWJ5dGUJMjcJDQo + MTAJYnl0ZQl4CSwgdmVyc2lvbiAlZA0KPjExCWJ5dGUJeAkuJWQNCg0KIyBNYWdpYyBJRCBmb3IgV29yZHBlcmZlY3QgZmlsZXMuDQojIFN1Ym1pdHRlZCBvbiAyMDA0LTAyLTE0IGJ5IENhcmwNCjAJc3RyaW5nCVxceEZGV1BDCVtmaWQ9MDAwMDAxMDA4LTAwLTAwMDAwMDE7ZXh0PTttaW1lPTtdV29yZHBlcmZlY3QgaW5zdGFsbGF0aW9uIGluZm9ybWF0aW9uIGZpbGUNCiY5CWJ5dGUJNDEJDQo + MTAJYnl0ZQl4CSwgdmVyc2lvbiAlZA0KPjExCWJ5dGUJeAkuJWQNCg0KIyBNYWdpYyBJRCBmb3IgV29yZHBlcmZlY3QgZmlsZXMuDQojIFN1Ym1pdHRlZCBvbiAyMDA0LTAyLTE0IGJ5IENhcmwNCjAJc3RyaW5nCVxceEZGV1BDCVtmaWQ9MDAwMDAxMDA4LTAwLTAwMDAwMDE7ZXh0PTttaW1lPTtdV29yZHBlcmZlY3Qga2V5Ym9hcmQgZG
2007-09-21 01:23:09 +00:00
);
/**
* Returns the test data for a given key
*
* @ param string $key
* @ return void
* @ access public
**/
function get ( $key ) {
2007-09-21 01:45:42 +00:00
static $data = array ();
2007-09-24 23:49:54 +00:00
2007-09-21 01:45:42 +00:00
if ( empty ( $data )) {
$vars = get_class_vars ( __CLASS__ );
2007-10-08 01:25:33 +00:00
foreach ( $vars [ 'data' ] as $k => $v ) {
if ( preg_match ( '/^[ais]:/' , $v )) {
$data [ $k ] = unserialize ( $v );
} else {
$data [ $k ] = base64_decode ( $v );
}
2007-09-21 01:45:42 +00:00
}
}
2007-09-24 23:49:54 +00:00
2007-09-21 01:45:42 +00:00
if ( ! isset ( $data [ $key ])) {
2007-09-21 01:23:09 +00:00
return false ;
}
2007-09-21 01:45:42 +00:00
return $data [ $key ];
2007-09-21 01:23:09 +00:00
}
}
?>