Sindbad~EG File Manager
<?php
// +----------------------------------------------------------------------+
// | PHP versions 4 and 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 2007 m3 Media Services Ltd. |
// | All rights reserved. |
// +----------------------------------------------------------------------+
// | MDB2 is a merge of PEAR DB and Metabases that provides a unified DB |
// | API as well as database abstraction for PHP applications. |
// | This LICENSE is in the BSD license style. |
// | |
// | Redistribution and use in source and binary forms, with or without |
// | modification, are permitted provided that the following conditions |
// | are met: |
// | |
// | Redistributions of source code must retain the above copyright |
// | notice, this list of conditions and the following disclaimer. |
// | |
// | Redistributions in binary form must reproduce the above copyright |
// | notice, this list of conditions and the following disclaimer in the |
// | documentation and/or other materials provided with the distribution. |
// | |
// | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken, |
// | Lukas Smith nor the names of his contributors may be used to endorse |
// | or promote products derived from this software without specific prior|
// | written permission. |
// | |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
// | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|
// | OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
// | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|
// | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// | POSSIBILITY OF SUCH DAMAGE. |
// +----------------------------------------------------------------------+
// | Author: Monique Szpak <monique.szpak@openads.org> |
// | Andrew Hill <andrew.hill@openads.org> |
// +----------------------------------------------------------------------+
//
// $Id: MDB2_internals_testcase.php,v 1.1 2007/03/02 16:39:22 quipo Exp $
require_once 'MDB2_testcase.php';
class MDB2_Internals_TestCase extends MDB2_TestCase {
var $clear_tables = false;
/**
* Tests that the MDB2::apiVersion() method returns an API version number.
*/
function test_apiVersion()
{
$result = MDB2::apiVersion();
$this->assertNotNull($result, 'apiVersion');
$result = strtok($result, '.');
$this->assertTrue(is_numeric($result), 'apiVersion');
$result = strtok('.');
$this->assertTrue(is_numeric($result), 'apiVersion');
$result = strtok('.');
$this->assertTrue(is_numeric($result), 'apiVersion');
}
/**
* Tests that the MDB2::classExists() method correctly tests for
* existence of a class.
*/
function test_classExists()
{
$this->assertFalse(MDB2::classExists('null'), 'classExists');
$this->assertTrue(MDB2::classExists('MDB2'), 'classExists');
}
/**
* Tests that the MDB2::loadClass() method correctly loads classes.
*/
function test_loadClass()
{
$this->assertTrue(MDB2::loadClass('MDB2', false), 'loadClass');
// Suppress handling of PEAR errors while testing next case
PEAR::pushErrorHandling(null);
$result = MDB2::loadClass('null', false);
$this->assertTrue(is_a($result, 'pear_error'), 'loadClass');
PEAR::popErrorHandling();
}
/**
* Tests that the MDB2::factory() method correctly connects to a
* database.
*/
function test_factory()
{
$db =& MDB2::factory($this->dsn);
$this->assertTrue(MDB2::isConnection($db), 'factory');
// Suppress handling of PEAR errors while preparing the
// next test case database connection
PEAR::pushErrorHandling(null);
$db =& MDB2::factory(null);
PEAR::popErrorHandling();
$this->assertFalse(MDB2::isConnection($db), 'factory');
}
/**
* Tests that the MDB2::loadFile() method returns the expected
* filename.
*/
function test_loadFile()
{
$filename = 'Extended';
$this->assertEquals('MDB2'.DIRECTORY_SEPARATOR.$filename.'.php', MDB2::loadFile($filename), 'loadFile');
}
/**
* Tests that the MDB2::isConnection() method correctly reports
* connections.
*/
function test_isConnection()
{
$this->assertTrue(MDB2::isConnection($this->db), 'isConnection');
$this->assertFalse(MDB2::isConnection(null), 'isConnection');
}
/**
* Tests that the MDB2::isResult() method correctly identifies
* results.
*/
function test_isResult()
{
$obj = new MDB2_Result();
$this->assertTrue(MDB2::isResult($obj), 'isResult');
$obj = null;
$this->assertFalse(MDB2::isResult($obj), 'isResult');
}
/**
* Tests that the MDB2::isResultCommon() method correctly identifies
* common results.
*/
function test_isResultCommon()
{
$result = null;
$obj = new MDB2_Result_Common($this->db, $result);
$this->assertTrue(MDB2::isResultCommon($obj), 'isResultCommon');
$obj = null;
$this->assertFalse(MDB2::isResultCommon($obj), 'isResultCommon');
}
/**
* Tests that the MDB2::parseDSN() method works.
*/
function test_parseDSN()
{
$dsn = $this->dsn;
$result = MDB2::parseDSN($dsn);
$this->assertEquals($dsn['phptype'],$result['dbsyntax'],'parseDSN');
$dsn = "mydbms://myname:mypassword@localhost";
$result = MDB2::parseDSN($dsn);
$this->assertEquals('mydbms', $result['phptype'],'parseDSN');
$this->assertEquals('mydbms',$result['dbsyntax'],'parseDSN');
$this->assertEquals('tcp',$result['protocol'],'parseDSN');
$this->assertEquals('localhost',$result['hostspec'],'parseDSN');
$this->assertEquals(false,$result['port'],'parseDSN');
$this->assertEquals(false,$result['socket'],'parseDSN');
$this->assertEquals('myname',$result['username'],'parseDSN');
$this->assertEquals('mypassword',$result['password'],'parseDSN');
$this->assertEquals(false,$result['database'],'parseDSN');
$dsn = "somesql://myname:mypassword@localhost:1234/mydb";
$result = MDB2::parseDSN($dsn);
$this->assertEquals('somesql',$result['phptype'],'parseDSN');
$this->assertEquals('somesql',$result['dbsyntax'],'parseDSN');
$this->assertEquals('tcp',$result['protocol'],'parseDSN');
$this->assertEquals('localhost',$result['hostspec'],'parseDSN');
$this->assertEquals('1234',$result['port'],'parseDSN');
$this->assertEquals(false,$result['socket'],'parseDSN');
$this->assertEquals('myname',$result['username'],'parseDSN');
$this->assertEquals('mypassword',$result['password'],'parseDSN');
$this->assertEquals('mydb',$result['database'],'parseDSN');
$dsn = "dbms1://myname@unix(opts)/mydb?param1=value1";
$result = MDB2::parseDSN($dsn);
$this->assertEquals('dbms1',$result['phptype'],'parseDSN');
$this->assertEquals('dbms1',$result['dbsyntax'],'parseDSN');
$this->assertEquals('unix',$result['protocol'],'parseDSN');
$this->assertEquals(false,$result['hostspec'],'parseDSN');
$this->assertEquals(false,$result['port'],'parseDSN');
$this->assertEquals('opts',$result['socket'],'parseDSN');
$this->assertEquals('myname',$result['username'],'parseDSN');
$this->assertEquals(false,$result['password'],'parseDSN');
$this->assertEquals('mydb',$result['database'],'parseDSN');
$this->assertEquals('value1',$result['param1'],'parseDSN');
}
/**
* Tests that the MDB2::fileExists() method correctly identifies
* existing/non-existing files.
*/
function test_fileExists()
{
$this->assertTrue(MDB2::fileExists('PEAR.php'), 'fileExists');
$this->assertFalse(MDB2::fileExists('itIsHopedThatNoOneHasAFileWithThisName.php'), 'fileExists');
}
/**
* Tests that the MDB2::__toString() method returns the expected
* string result.
*/
function test__toString()
{
$expected = "MDB2_Driver_{$this->dsn['phptype']}: (phptype = {$this->dsn['phptype']}, dbsyntax = {$this->db->dbsyntax})";
if (version_compare(PHP_VERSION, "5.0.0", "<")) {
$expected = strtolower($expected);
}
$this->assertEquals($expected ,$this->db->__toString(), '__toString');
}
/**
* Tests that the MDB2::setFetchMode() method correctly sets the
* fetch mode.
*/
function test_setFetchMode()
{
$tmp = $this->db->fetchmode;
$this->db->setFetchMode(MDB2_FETCHMODE_OBJECT);
$this->assertEquals('stdClass', $this->db->options['fetch_class'], 'setFetchMode');
$this->db->setFetchMode(MDB2_FETCHMODE_ORDERED);
$this->assertEquals(MDB2_FETCHMODE_ORDERED, $this->db->fetchmode, 'setFetchMode');
$this->db->setFetchMode(MDB2_FETCHMODE_ASSOC);
$this->assertEquals(MDB2_FETCHMODE_ASSOC, $this->db->fetchmode, 'setFetchMode');
$this->db->fetchmode = $tmp;
}
/**
* Tests that the MDB2::escape() method correctly escapes strings.
*/
function test_escape()
{
$tmp = $this->db->string_quoting;
$this->string_quoting['escape'] = '\\';
$this->string_quoting['end'] = '"';
$text = 'xxx"z"xxx';
$this->assertEquals('xxx\"z\"xxx', MDB2_Driver_Common::escape($text), 'escape');
$this->db->string_quoting = $tmp;
}
/**
* Tests that the MDB2::quoteIdentifier() method correctly quotes strings.
*/
function test_quoteIdentifier()
{
if ($this->db->phptype == 'ibase') {
return;
}
$tmp = $this->db->identifier_quoting;
$this->db->identifier_quoting['start'] = '"';
$this->db->identifier_quoting['end'] = '`';
$this->db->identifier_quoting['escape'] = '/';
$text = 'my`identifier';
$this->assertEquals('"my/`identifier`', $this->db->quoteIdentifier($text), 'quoteIdentifier');
$this->db->identifier_quoting = $tmp;
}
/**
* Tests that the MDB2::getAsKeyword() method correctly returns
* the set "as" keyword.
*/
function test_getAsKeyword()
{
$tmp = $this->db->as_keyword;
$this->db->as_keyword = 'ALIAS';
$this->assertEquals('ALIAS', $this->db->getAsKeyword(), 'getAsKeyword');
$this->db->as_keyword = $tmp;
}
/**
* Tests that the MDB2::getConnection() method correctly returns
* a database resource.
*/
function test_getConnection()
{
$result = $this->db->getConnection();
$this->assertTrue(is_resource($result), 'getConnection');
}
/**
* A private method to return a defined "row" of data for use
* in the next set of tests.
*
* @access private
* @return array The array of "row" data.
*/
function _fetchRowData()
{
return array(
0 => '',
1 => 'notnull',
2 => 'length7 ',
'1?2:3.4' => 'assoc'
);
}
/**
* A private method to test results from the MDB2::_fixResultArrayValues()
* method when the $mode parameter was set to MDB2_PORTABILITY_EMPTY_TO_NULL.
*
* @access private
* @param array $row The result of the call to MDB2::_fixResultArrayValues().
*/
function _fixResultArrayValues_Test_EmptyToNull($row)
{
$this->assertNull($row[0], '_fixResultArrayValues');
$this->assertNotNull($row[1], '_fixResultArrayValues');
$this->assertNotNull($row[2], '_fixResultArrayValues');
}
/**
* A private method to test results from the MDB2::_fixResultArrayValues()
* method when the $mode parameter was set to MDB2_PORTABILITY_RTRIM.
*
* @access private
* @param array $row The result of the call to MDB2::_fixResultArrayValues().
*/
function _fixResultArrayValues_Test_Rtrim($row)
{
$this->assertEquals(strlen($row[0]), 0, '_fixResultArrayValues');
$this->assertEquals(strlen($row[1]), 7, '_fixResultArrayValues');
$this->assertEquals(strlen($row[2]), 7, '_fixResultArrayValues');
}
/**
* A private method to test results from the MDB2::_fixResultArrayValues()
* method when the $mode parameter was set to MDB2_PORTABILITY_FIX_ASSOC_FIELD_NAMES.
*
* @access private
* @param array $row The result of the call to MDB2::_fixResultArrayValues().
*/
function _fixResultArrayValues_Test_FixAssocFieldNames($row)
{
$this->assertTrue(array_key_exists(4, $row), '_fixResultArrayValues');
$this->assertTrue($row[4] == 'assoc', '_fixResultArrayValues');
}
/**
* Tests that the MDB2::_fixResultArrayValues() method fixes array
* values when used with various $mode parameters.
*/
function test__fixResultArrayValues()
{
$mode = MDB2_PORTABILITY_EMPTY_TO_NULL;
$row = $this->_fetchRowData();
$this->db->_fixResultArrayValues($row, $mode);
$this->_fixResultArrayValues_Test_EmptyToNull($row);
$mode = MDB2_PORTABILITY_RTRIM;
$row = $this->_fetchRowData();
$this->db->_fixResultArrayValues($row, $mode);
$this->_fixResultArrayValues_Test_Rtrim($row);
$mode = MDB2_PORTABILITY_FIX_ASSOC_FIELD_NAMES;
$row = $this->_fetchRowData();
$this->db->_fixResultArrayValues($row, $mode);
$this->_fixResultArrayValues_Test_FixAssocFieldNames($row);
$mode = MDB2_PORTABILITY_EMPTY_TO_NULL + MDB2_PORTABILITY_RTRIM;
$row = $this->_fetchRowData();
$this->db->_fixResultArrayValues($row, $mode);
$this->_fixResultArrayValues_Test_EmptyToNull($row);
$this->_fixResultArrayValues_Test_Rtrim($row);
$mode = MDB2_PORTABILITY_EMPTY_TO_NULL + MDB2_PORTABILITY_FIX_ASSOC_FIELD_NAMES;
$row = $this->_fetchRowData();
$this->db->_fixResultArrayValues($row, $mode);
$this->_fixResultArrayValues_Test_EmptyToNull($row);
$this->_fixResultArrayValues_Test_FixAssocFieldNames($row);
$mode = MDB2_PORTABILITY_RTRIM + MDB2_PORTABILITY_FIX_ASSOC_FIELD_NAMES;
$row = $this->_fetchRowData();
$this->db->_fixResultArrayValues($row, $mode);
$this->_fixResultArrayValues_Test_Rtrim($row);
$this->_fixResultArrayValues_Test_FixAssocFieldNames($row);
$mode = MDB2_PORTABILITY_EMPTY_TO_NULL + MDB2_PORTABILITY_RTRIM + MDB2_PORTABILITY_FIX_ASSOC_FIELD_NAMES;
$row = $this->_fetchRowData();
$this->db->_fixResultArrayValues($row, $mode);
$this->_fixResultArrayValues_Test_EmptyToNull($row);
$this->_fixResultArrayValues_Test_Rtrim($row);
$this->_fixResultArrayValues_Test_FixAssocFieldNames($row);
}
/**
* Tests that the MDB2::transaction() method returns expected values
* when starting or rolling back a transaction, and for testing if
* the connection is in a transaction.
*/
function test_transaction()
{
if (!$this->db->supports('transactions'))
{
$this->assertTrue($this->db->beginTransaction(), 'transaction');
$this->assertTrue($this->db->in_transaction, 'transaction');
$this->assertTrue($this->db->rollback(), 'transaction');
$this->assertFalse($this->db->in_transaction, 'transaction');
$this->assertTrue($this->db->beginTransaction(), 'transaction');
$this->assertTrue($this->db->in_transaction, 'transaction');
$this->assertTrue($this->db->commit(), 'transaction');
$this->assertFalse($this->db->in_transaction, 'transaction');
}
}
// Nested transactions are not yet tested, due to a MySQL 5 problem with
// savepoints causing netsted transactions to fail.
//
// See http://bugs.mysql.com/bug.php?id=26288
/**
* Tests that the MDB2::setDatabase() and MDB2::getDatabase() methods
* correctly set and get the database name.
*/
function test_setGetDatabase()
{
$old_name = $this->db->database_name;
$this->assertEquals($old_name, $this->db->setDatabase('test_database'), 'setDatabase');
$this->assertEquals('test_database', $this->db->database_name, 'setDatabase');
$this->assertEquals('test_database', $this->db->getDatabase(), 'getDatabase');
$this->db->database_name = $old_name;
}
/**
* Tests that the MDB2::setDSN() method correctly sets
* the DSN.
*/
function test_setDSN()
{
$dsn = "mydbms://myname:mypassword@localhost";
$result = $this->db->setDSN($dsn);
$dsn_set = $this->db->dsn;
$this->assertEquals('mydbms', $dsn_set['phptype'],'setDSN');
$this->assertEquals('mydbms',$dsn_set['dbsyntax'],'setDSN');
$this->assertEquals('tcp',$dsn_set['protocol'],'setDSN');
$this->assertEquals('localhost',$dsn_set['hostspec'],'setDSN');
$this->assertEquals(false,$dsn_set['port'],'setDSN');
$this->assertEquals(false,$dsn_set['socket'],'setDSN');
$this->assertEquals('myname',$dsn_set['username'],'setDSN');
$this->assertEquals('mypassword',$dsn_set['password'],'setDSN');
$this->assertEquals(false,$dsn_set['database'],'setDSN');
}
/**
* Tests that the MDB2::getDSN() method correctly gets
* the DSN.
*/
function test_getDSN()
{
$dsn_set = "mydbms://myname:mypassword@localhost";
$result = $this->db->setDSN($dsn_set);
$dsn_get = $this->db->getDSN();
$dsn_rex = "/(([\w]+)\(mydbms\):\/\/myname:mypassword@localhost\/)/";
//preg_match($dsn_rex, $dsn_get, $matches);
$this->assertRegExp($dsn_rex, $dsn_get, 'testGetDSN');
$dsn_rex = "/{$this->dsn['phptype']}[\w\W]+/";
$this->assertRegExp($dsn_rex, $dsn_get, 'testGetDSN');
$dsn_set = "mydbms://myname:mypassword@localhost";
$result = $this->db->setDSN($dsn_set);
$dsn_get = $this->db->getDSN('string', true);
$dsn_rex = "/(([\w]+)\(mydbms\):\/\/myname:1@localhost\/)/";
$this->assertRegExp($dsn_rex, $dsn_get, 'testGetDSN');
$dsn_rex = "/{$this->dsn['phptype']}[\w\W]+/";
$this->assertRegExp($dsn_rex, $dsn_get, 'testGetDSN');
}
/**
* Tests that the MDB2::setLimit() method correctly sets the limit
* and offset values.
*/
function test_setLimit()
{
if (!$this->db->supports('limit_queries'))
{
$this->db->limit = null;
$this->db->offset = null;
$this->db->setLimit(100, 50);
$this->assertEquals(100, $this->db->limit , 'setLimit');
$this->assertEquals( 50, $this->db->offset, 'setLimit');
}
}
/**
* Tests that the MDB2::supports() method correctly finds keys
* in the "supports" array.
*/
function test_supports()
{
$this->db->supports['testkey'] = true;
$this->assertTrue($this->db->supports('testkey'), 'supports');
unset($this->db->supports['testkey']);
}
/**
* Tests that the MDB2::getSequenceName() method correctly gets
* sequence names.
*/
function test_getSequenceName()
{
$tmp = $this->db->options['seqname_format'];
$this->db->options['seqname_format'] = '%s_seq';
$this->assertEquals('test_seq', strtolower($this->db->getSequenceName('test')), 'getSequenceName');
$this->db->options['seqname_format'] = $tmp;
}
/**
* Tests that the MDB2::getIndexName() method correctly gets
* index names.
*/
function test_getIndexName()
{
$tmp = $this->db->options['idxname_format'];
$this->db->options['idxname_format'] = 'idx_%s';
$this->assertEquals('idx_test', $this->db->getIndexName('test'), 'getIndexName');
$this->db->options['idxname_format'] = $tmp;
}
/**
* Tests that the MDB2::disconnect() method correctly disconnects.
*/
function test_disconnect()
{
$this->assertTrue($this->db->disconnect(), 'disconnect');
$this->assertEquals(0, $this->db->connection, 'disconnect');
$this->assertEquals(array(), $this->db->connected_dsn, 'disconnect');
$this->assertEquals('', $this->db->connected_database_name, 'disconnect');
$this->assertNull($this->db->opened_persistent, 'disconnect');
$this->assertEquals('', $this->db->connected_server_info, 'disconnect');
$this->assertNull($this->db->in_transaction, 'disconnect');
$this->assertNull($this->db->nested_transaction_counter, 'disconnect');
}
}
?>
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists