diff --git a/test/AllTests.php b/test/AllTests.php index c2c9e5541..079a947a1 100644 --- a/test/AllTests.php +++ b/test/AllTests.php @@ -49,6 +49,9 @@ require_once './test/PMA_quoting_slashing_test.php'; require_once './test/PMA_stringOperations_test.php'; require_once './test/PMA_printableBitValue_test.php'; require_once './test/PMA_foreignKeySupported_test.php'; +require_once './test/PMA_headerLocation_test.php'; +require_once './test/PMA_Message_test.php'; +require_once './test/PMA_whichCrlf_test.php'; class AllTests { @@ -85,6 +88,9 @@ class AllTests $suite->addTestSuite('PMA_stringOperations_test'); $suite->addTestSuite('PMA_printableBitValue_test'); $suite->addTestSuite('PMA_foreignKeySupported_test'); + $suite->addTestSuite('PMA_headerLocation_test'); + $suite->addTestSuite('PMA_Message_test'); + $suite->addTestSuite('PMA_whichCrlf_test'); return $suite; } } diff --git a/test/PMA_Message_test.php b/test/PMA_Message_test.php new file mode 100644 index 000000000..e247c5f76 --- /dev/null +++ b/test/PMA_Message_test.php @@ -0,0 +1,410 @@ + + * @version $Id$ + */ + +/** + * Tests core. + */ +require_once 'PHPUnit/Framework.php'; +require_once 'PHPUnit/Extensions/OutputTestCase.php'; + +/** + * Include to test. + */ +require_once './libraries/Message.class.php'; + +/** + * Test class PMA_Message. + * + * @package phpMyAdmin-test + */ +class PMA_Message_test extends PHPUnit_Extensions_OutputTestCase +{ + /** + * @var PMA_Message + * @access protected + */ + protected $object; + + /** + * Sets up the fixture, for example, opens a network connection. + * This method is called before a test is executed. + * + * @access protected + */ + protected function setUp() + { + $this->object = new PMA_Message; + } + + /** + * Tears down the fixture, for example, closes a network connection. + * This method is called after a test is executed. + * + * @access protected + */ + protected function tearDown() + { + } + + /** + * to String casting test + */ + public function test__toString() + { + $this->object->setMessage('test<&>', true); + $this->assertEquals('test<&>', (string)$this->object); + } + + /** + * test success method + */ + public function testSuccess() + { + $this->object = new PMA_Message('test<&>', PMA_Message::SUCCESS); + $this->assertEquals($this->object, PMA_Message::success('test<&>')); + $this->assertEquals('strSuccess', PMA_Message::success()->getString()); + } + + /** + * test error method + */ + public function testError() + { + $this->object = new PMA_Message('test<&>', PMA_Message::ERROR); + $this->assertEquals($this->object, PMA_Message::error('test<&>')); + $this->assertEquals('strError', PMA_Message::error()->getString()); + } + + /** + * test warning method + */ + public function testWarning() + { + $this->object = new PMA_Message('test<&>', PMA_Message::WARNING); + $this->assertEquals($this->object, PMA_Message::warning('test<&>')); + } + + /** + * test notice method + */ + public function testNotice() + { + $this->object = new PMA_Message('test<&>', PMA_Message::NOTICE); + $this->assertEquals($this->object, PMA_Message::notice('test<&>')); + } + + /** + * test rawError method + */ + public function testRawError() + { + $this->object = new PMA_Message('', PMA_Message::ERROR); + $this->object->setMessage('test<&>'); + + $this->assertEquals($this->object, PMA_Message::rawError('test<&>')); + } + + /** + * test rawWarning method + */ + public function testRawWarning() + { + $this->object = new PMA_Message('', PMA_Message::WARNING); + $this->object->setMessage('test<&>'); + + $this->assertEquals($this->object, PMA_Message::rawWarning('test<&>')); + } + + /** + * test rawNotice method + */ + public function testRawNotice() + { + $this->object = new PMA_Message('', PMA_Message::NOTICE); + $this->object->setMessage('test<&>'); + + $this->assertEquals($this->object, PMA_Message::rawNotice('test<&>')); + } + + /** + * test rawSuccess method + */ + public function testRawSuccess() + { + $this->object = new PMA_Message('', PMA_Message::SUCCESS); + $this->object->setMessage('test<&>'); + + $this->assertEquals($this->object, PMA_Message::rawSuccess('test<&>')); + } + + /** + * testing isSuccess method + */ + public function testIsSuccess() + { + $this->assertFalse($this->object->isSuccess()); + $this->assertTrue($this->object->isSuccess(true)); + } + + /** + * testing isNotice method + */ + public function testIsNotice() + { + $this->assertTrue($this->object->isNotice()); + $this->object->isWarning(true); + $this->assertFalse($this->object->isNotice()); + $this->assertTrue($this->object->isNotice(true)); + } + + /** + * testing isWarning method + */ + public function testIsWarning() + { + $this->assertFalse($this->object->isWarning()); + $this->assertTrue($this->object->isWarning(true)); + } + + /** + * testing isError method + */ + public function testIsError() + { + $this->assertFalse($this->object->isError()); + $this->assertTrue($this->object->isError(true)); + } + + /** + * testign setter of message + */ + public function testSetMessage() + { + $this->object->setMessage('test&<>', false); + $this->assertEquals('test&<>', $this->object->getMessage()); + $this->object->setMessage('test&<>', true); + $this->assertEquals('test&<>', $this->object->getMessage()); + } + + /** + * testing setter of string + */ + public function testSetString() + { + $this->object->setString('test&<>', false); + $this->assertEquals('test&<>', $this->object->getString()); + $this->object->setString('test&<>', true); + $this->assertEquals('test&<>', $this->object->getString()); + } + + /** + * testing add param method + */ + public function testAddParam() + { + $this->object->addParam(PMA_Message::notice('test')); + $this->assertEquals(array(PMA_Message::notice('test')), $this->object->getParams()); + $this->object->addParam('test', true); + $this->assertEquals(array(PMA_Message::notice('test'), 'test'), $this->object->getParams()); + $this->object->addParam('test', false); + $this->assertEquals(array(PMA_Message::notice('test'), 'test', PMA_Message::notice('test')), $this->object->getParams()); + } + + /** + * testing add string method + */ + public function testAddString() + { + $this->object->addString('test', '*'); + $this->assertEquals(array('*', PMA_Message::notice('test')), $this->object->getAddedMessages()); + $this->object->addString('test', ''); + $this->assertEquals(array('*', PMA_Message::notice('test'), '', PMA_Message::notice('test')), $this->object->getAddedMessages()); + } + + /** + * testing add messages method + */ + public function testAddMessages() + { + $this->object->addMessages(array('test', PMA_Message::rawWarning('test')), '&'); + $this->assertEquals(array('&', PMA_Message::rawNotice('test'), '&', PMA_Message::rawWarning('test')), $this->object->getAddedMessages()); + } + + /** + * testing add message method + */ + public function testAddMessage() + { + $this->object->addMessage('test', ''); + $this->assertEquals(array(PMA_Message::rawNotice('test')), $this->object->getAddedMessages()); + $this->object->addMessage('test'); + $this->assertEquals(array(PMA_Message::rawNotice('test'), ' ', PMA_Message::rawNotice('test')), $this->object->getAddedMessages()); + $this->object->addMessage(PMA_Message::rawWarning('test'), '&'); + $this->assertEquals(array(PMA_Message::rawNotice('test'), ' ', PMA_Message::rawNotice('test'), '&', PMA_Message::rawWarning('test')), $this->object->getAddedMessages()); + } + + /** + * testing setter of params + */ + public function testSetParams() + { + $this->object->setParams('test&<>'); + $this->assertEquals('test&<>', $this->object->getParams()); + $this->object->setParams('test&<>', true); + $this->assertEquals('test&<>', $this->object->getParams()); + } + + /** + * testing sanitize method + */ + public function testSanitize() + { + $this->object->setString('test&string<>', false); + $this->assertEquals('test&string<>', PMA_Message::sanitize($this->object)); + $this->assertEquals(array('test&string<>', 'test&string<>'), PMA_Message::sanitize(array($this->object, $this->object))); + } + + public function decodeBBDataProvider() + { + return array( + array('[i]test[/i][i]aa[i/][em]test[/em]', 'testaa[i/]test'), + array('[b]test[/b][strong]test[/strong]', 'testtest'), + array('[tt]test[/tt][code]test[/code]', 'testtest'), + array('[kbd]test[/kbd][br][sup]test[/sup]', 'test
test') + ); + } + + /** + * testing decodeBB method + * @dataProvider decodeBBDataProvider + */ + + public function testDecodeBB($actual, $expected) + { + $this->assertEquals($expected, PMA_Message::decodeBB($actual)); + } + + /** + * testing format method + */ + public function testFormat() + { + $this->assertEquals('test string', PMA_Message::format('test string')); + $this->assertEquals('test string', PMA_Message::format('test string', 'a')); + $this->assertEquals('test string', PMA_Message::format('test string', array())); + $this->assertEquals('test string', PMA_Message::format('%s string', array('test'))); + + } + + /** + * testing getHash method + */ + public function testGetHash() + { + $this->object->setString('<&>test', false); + $this->object->setMessage('<&>test', false); + $this->assertEquals(md5(PMA_Message::NOTICE . '<&>test<&>test'), $this->object->getHash()); + } + + /** + * getMessage test - with empty message and with non-empty string - not key in globals + * additional params are defined + */ + public function testGetMessageWithoutMessageWithStringWithParams() + { + $this->object->setMessage(''); + $this->object->setString('test string %s %s'); + $this->object->addParam('test param 1'); + $this->object->addParam('test param 2'); + $this->assertEquals('test string test param 1 test param 2', $this->object->getMessage()); + } + + /** + * getMessage test - with empty message and with empty string + */ + public function testGetMessageWithoutMessageWithEmptyString() + { + $this->object->setMessage(''); + $this->object->setString(''); + $this->assertEquals('', $this->object->getMessage()); + } + + /** + * getMessage test - with empty message and with string, which is key to GLOBALS + * additional messages are defined + */ + public function testGetMessageWithoutMessageWithGlobalStringWithAddMessages() + { + $GLOBALS['key'] = 'test message'; + $this->object->setMessage(''); + $this->object->setString('key'); + $this->object->addMessage('test message 2', ' - '); + $this->object->addMessage('test message 3', '&'); + $this->assertEquals('test message - test message 2&test message 3', $this->object->getMessage()); + unset($GLOBALS['key']); + } + + /** + * getMessage test - message is defined + * message with BBCode defined + */ + public function testGetMessageWithMessageWithBBCode() + { + $this->object->setMessage('[kbd]test[/kbd] [a@./Documentation.html#cfg_Example@_blank]test[/a]'); + $this->assertEquals('test test', $this->object->getMessage()); + } + + /** + * getLevel test + */ + public function testGetLevel() + { + $this->assertEquals('notice', $this->object->getLevel()); + $this->object->setNumber(PMA_Message::SUCCESS); + $this->assertEquals('success', $this->object->getLevel()); + $this->object->setNumber(PMA_Message::ERROR); + $this->assertEquals('error', $this->object->getLevel()); + $this->object->setNumber(PMA_Message::WARNING); + $this->assertEquals('warning', $this->object->getLevel()); + } + + /** + * testing display method (output string and _is_displayed varible) + */ + public function testDisplay() + { + $this->assertFalse($this->object->isDisplayed()); + $this->object->setMessage('Test Message'); + + $this->expectOutputString('
Test Message
'); + $this->object->display(); + + $this->assertTrue($this->object->isDisplayed()); + } + + /** + * getDisplay test + */ + public function testGetDisplay() + { + $this->object->setMessage('Test Message'); + $this->assertEquals('
Test Message
', $this->object->getDisplay()); + } + + /** + * isDisplayed test + */ + public function testIsDisplayed() + { + $this->assertFalse($this->object->isDisplayed(false)); + $this->assertTrue($this->object->isDisplayed(true)); + $this->assertTrue($this->object->isDisplayed(false)); + } +} +?> diff --git a/test/PMA_headerLocation_test.php b/test/PMA_headerLocation_test.php new file mode 100644 index 000000000..42a791a50 --- /dev/null +++ b/test/PMA_headerLocation_test.php @@ -0,0 +1,305 @@ + + * @version $Id$ + */ + +/** + * Tests core. + */ +require_once 'PHPUnit/Framework.php'; +require_once 'PHPUnit/Extensions/OutputTestCase.php'; + +/** + * Include to test. + */ +require_once './libraries/common.lib.php'; +require_once './libraries/url_generating.lib.php'; +require_once './libraries/core.lib.php'; + +/** + * Test function sending headers. + * Warning - these tests set constants, so it can interfere with other tests + * If you have runkit extension, then it is possible to back changes made on constants + * rest of options can be tested only with apd, when functions header and headers_sent are redefined + * rename_function() of header and headers_sent may cause CLI error report in Windows XP (but tests are done correctly) + * additional functions which were created during tests must be stored to coverage test e.g. + * + * rename_function('headers_sent', 'headers_sent'.str_replace(array('.', ' '),array('', ''),microtime())); + * + * @package phpMyAdmin-test + */ + +class PMA_headerLocation_test extends PHPUnit_Extensions_OutputTestCase +{ + + protected $oldIISvalue; + protected $oldSIDvalue; + protected $runkitExt; + protected $apdExt; + + + + public function __construct() + { + parent::__construct(); + $this->runkitExt = false; + if (function_exists("runkit_constant_redefine")) + $this->runkitExt = true; + + $this->apdExt = false; + if (function_exists("rename_function")) + $this->apdExt = true; + + + if ($this->apdExt && !$GLOBALS['test_header']) { + + // using apd extension to overriding header and headers_sent functions for test purposes + $GLOBALS['test_header'] = 1; + + // rename_function() of header and headers_sent may cause CLI error report in Windows XP + rename_function('header', 'test_header'); + rename_function('headers_sent', 'test_headers_sent'); + + // solution from: http://unixwars.com/2008/11/29/override_function-in-php/ to overriding more than one function + + $substs = array( + 'header' => 'if (isset($GLOBALS["header"])) $GLOBALS["header"] .= $a; else $GLOBALS["header"] = $a;', + 'headers_sent' => 'return false;' + ); + + $args = array( + 'header' => '$a', + 'headers_sent' => '' + ); + + foreach ($substs as $func => $ren_func) { + if (function_exists("__overridden__")) + rename_function("__overridden__", str_replace(array('.', ' '),array('', ''),microtime())); + override_function($func, $args[$func], $substs[$func]); + rename_function("__overridden__", str_replace(array('.', ' '),array('', ''),microtime())); + } + + } + } + + public function __destruct() + { + // rename_function may causes CLI error report in Windows XP, but nothing more happen + + if ($this->apdExt && $GLOBALS['test_header']) { + $GLOBALS['test_header'] = 0; + + rename_function('header', 'header'.str_replace(array('.', ' '),array('', ''),microtime())); + rename_function('headers_sent', 'headers_sent'.str_replace(array('.', ' '),array('', ''),microtime())); + + rename_function('test_header', 'header'); + rename_function('test_headers_sent', 'headers_sent'); + } + } + + public function setUp() + { + // cleaning constants + if ($this->runkitExt) { + + $this->oldIISvalue = 'non-defined'; + + if (defined('PMA_IS_IIS')) { + $this->oldIISvalue = PMA_IS_IIS; + runkit_constant_redefine('PMA_IS_IIS', NULL); + } + else { + runkit_constant_add('PMA_IS_IIS', NULL); + } + + + $this->oldSIDvalue = 'non-defined'; + + if (defined('SID')) { + $this->oldSIDvalue = SID; + runkit_constant_redefine('SID', NULL); + } + else { + runkit_constant_add('SID', NULL); + } + + } + } + + + public function tearDown() + { + // cleaning constants + if ($this->runkitExt) { + + if ($this->oldIISvalue != 'non-defined') + runkit_constant_redefine('PMA_IS_IIS', $this->oldIISvalue); + elseif (defined('PMA_IS_IIS')) { + runkit_constant_remove('PMA_IS_IIS'); + } + + if ($this->oldSIDvalue != 'non-defined') + runkit_constant_redefine('SID', $this->oldSIDvalue); + elseif (defined('SID')) { + runkit_constant_remove('SID'); + } + } + + if ($this->apdExt) + unset($GLOBALS['header']); + + } + + + public function testSendHeaderLocationWithSidUrlWithQuestionMark() + { + if ($this->runkitExt && $this->apdExt) { + + runkit_constant_redefine('SID', md5('test_hash')); + + $testUri = 'http://testurl.com/test.php?test=test'; + $separator = PMA_get_arg_separator(); + + $header = 'Location: ' . $testUri . $separator . SID; + + PMA_sendHeaderLocation($testUri); // sets $GLOBALS['header'] + $this->assertEquals($header, $GLOBALS['header']); + + } else { + $this->markTestSkipped('Cannot redefine constant/function - missing APD or/and runkit extension'); + } + + } + + public function testSendHeaderLocationWithSidUrlWithoutQuestionMark() + { + if ($this->runkitExt && $this->apdExt) { + + runkit_constant_redefine('SID', md5('test_hash')); + + $testUri = 'http://testurl.com/test.php'; + $separator = PMA_get_arg_separator(); + + $header = 'Location: ' . $testUri . '?' . SID; + + PMA_sendHeaderLocation($testUri); // sets $GLOBALS['header'] + $this->assertEquals($header, $GLOBALS['header']); + + } else { + $this->markTestSkipped('Cannot redefine constant/function - missing APD or/and runkit extension'); + } + + } + + public function testSendHeaderLocationWithoutSidWithIis() + { + if ($this->runkitExt && $this->apdExt) { + + runkit_constant_redefine('PMA_IS_IIS', true); + runkit_constant_add('PMA_COMING_FROM_COOKIE_LOGIN', true); + + $testUri = 'http://testurl.com/test.php'; + $separator = PMA_get_arg_separator(); + + $header = 'Refresh: 0; ' . $testUri; + + PMA_sendHeaderLocation($testUri); // sets $GLOBALS['header'] + + // cleaning constant + runkit_constant_remove('PMA_COMING_FROM_COOKIE_LOGIN'); + + $this->assertEquals($header, $GLOBALS['header']); + + } else { + $this->markTestSkipped('Cannot redefine constant/function - missing APD or/and runkit extension'); + } + + } + + public function testSendHeaderLocationWithoutSidWithoutIis() + { + if ($this->apdExt) { + + $testUri = 'http://testurl.com/test.php'; + $header = 'Location: ' . $testUri; + + PMA_sendHeaderLocation($testUri); // sets $GLOBALS['header'] + $this->assertEquals($header, $GLOBALS['header']); + + } else { + $this->markTestSkipped('Cannot redefine constant/function - missing APD or/and runkit extension'); + } + + } + + public function testSendHeaderLocationIisLongUri() + { + if (defined('PMA_IS_IIS') && $this->runkitExt) + runkit_constant_redefine('PMA_IS_IIS', true); + elseif (!defined('PMA_IS_IIS')) + define('PMA_IS_IIS', true); + else + $this->markTestSkipped('Cannot redefine constant/function - missing APD or/and runkit extension'); + + + // over 600 chars + $testUri = 'http://testurl.com/test.php?testlonguri=over600chars&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test&test=test'; + + $GLOBALS['strGo'] = 'test link'; + + $header = "- - -\n" . + "\n" . + "\n" . + "\n" . + "\n" . + "\n" . + "\n" . + "\n" . + "\n"; + + + $this->expectOutputString($header); + + PMA_sendHeaderLocation($testUri); + } + + /** + * other output tests + */ + + public function testWriteReloadNavigation() + { + $GLOBALS['reload'] = true; + $GLOBALS['db'] = 'test_db'; + + $url = './navigation.php?db='.$GLOBALS['db']; + $write = "\n" . '' . "\r\n "; + + $this->expectOutputString($write); + PMA_reloadNavigation(); + + $this->assertFalse(isset($GLOBALS['reload'])); + unset($GLOBALS['db']); + } +} +?> diff --git a/test/PMA_whichCrlf_test.php b/test/PMA_whichCrlf_test.php new file mode 100644 index 000000000..831bc11b8 --- /dev/null +++ b/test/PMA_whichCrlf_test.php @@ -0,0 +1,72 @@ + + * @package phpMyAdmin-test + * @version $Id: PMA_whichCrlf_test.php + */ + +/** + * Tests core. + */ +require_once 'PHPUnit/Framework.php'; + +/** + * Include to test. + */ +require_once './libraries/common.lib.php'; + +/** + * Test whichCrlf function. + * + */ +class PMA_whichCrlf_test extends PHPUnit_Framework_TestCase +{ + + /** + * @using runkit pecl extension + * if not define PMA_USR_OS, then define it as Win + * if installed runkit, then constant will not change + */ + + public function testWhichCrlf() + { + $runkit = function_exists('runkit_constant_redefine'); + if ($runkit && defined('PMA_USR_OS')) + $pma_usr_os = PMA_USR_OS; + + if (defined('PMA_USR_OS') && !$runkit) { + + if (PMA_USR_OS == 'Win') + $this->assertEquals("\r\n", PMA_whichCrlf()); + else + $this->assertEquals("\n", PMA_whichCrlf()); + + $this->markTestIncomplete('Cannot redefine constant'); + + } else { + + if ($runkit) + define('PMA_USR_OS', 'Linux'); + $this->assertEquals("\n", PMA_whichCrlf()); + + if ($runkit) + runkit_constant_redefine('PMA_USR_OS', 'Win'); + else + define('PMA_USR_OS', 'Win'); + $this->assertEquals("\r\n", PMA_whichCrlf()); + + } + + if ($runkit) { + if (isset($pma_usr_os)) + runkit_constant_redefine('PMA_USR_OS', 'Win'); + else + runkit_constant_remove('PMA_USR_OS'); + } + } + +} +?>