Initial commit

This commit is contained in:
2022-11-21 09:47:28 +01:00
commit 76cec83d26
11652 changed files with 1980467 additions and 0 deletions

View File

@ -0,0 +1,46 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for bookmark.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
/**
* tests for bookmark.lib.php
*
* @package PhpMyAdmin-test
*/
class FilesTest extends PHPUnit_Framework_TestCase
{
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*
* @access protected
* @return void
*/
public function setUp()
{
}
public function testJsMessages()
{
ob_start();
$GLOBALS['pmaThemeImage'] = '';
$cfg = array(
'AllowUserDropDatabase' => true,
'GridEditing' => 'click',
);
require 'js/messages.php';
$out = ob_get_contents();
ob_end_clean();
$this->assertContains('var PMA_messages = new Array();', $out);
}
}

View File

@ -0,0 +1,582 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for FromDisplay.tpl.php
*
* @package PhpMyAdmin-test
*/
use PMA\libraries\Theme;
require_once 'libraries/config/FormDisplay.tpl.php';
require_once 'libraries/user_preferences.lib.php';
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/js_escape.lib.php';
/**
* Tests for FromDisplay.tpl.php
*
* @package PhpMyAdmin-test
*/
class PMA_FormDisplay_Tpl_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_displayFormTop()
*
* @return void
*/
public function testDisplayFormTop()
{
$_SERVER['REQUEST_URI'] = 'https://www.phpmyadmin.net';
$GLOBALS['cfg']['ServerDefault'] = '';
$result = PMA_displayFormTop(null, 'posted', array(1));
$this->assertContains(
'<form method="get" action="https://www.phpmyadmin.net" ' .
'class="config-form disableAjax">',
$result
);
$this->assertContains(
'<input type="hidden" name="tab_hash" value="" />',
$result
);
$this->assertContains(
'<input type="hidden" name="lang" value="en" />',
$result
);
$this->assertContains(
'<input type="hidden" name="token" value="token" />',
$result
);
$this->assertContains(
'<input type="hidden" name="0" value="1" />',
$result
);
}
/**
* Test for PMA_displayTabsTop()
*
* @return void
*/
public function testDisplayTabsTop()
{
$result = PMA_displayTabsTop(array('one', 'two'));
$this->assertContains(
'<ul class="tabs"',
$result
);
$this->assertContains(
'<a href="#0"',
$result
);
$this->assertContains(
'<a href="#1"',
$result
);
$this->assertContains(
'<div class="tabs_contents"',
$result
);
}
/**
* Test for PMA_displayFieldsetTop()
*
* @return void
*/
public function testDisplayFieldsetTop()
{
$attributes = array('name' => 'attrname');
$errors = array('e1', 'e2');
$result = PMA_displayFieldsetTop("TitleTest", "DescTest", $errors, $attributes);
$this->assertContains(
'<fieldset class="optbox" name="attrname">',
$result
);
$this->assertContains(
'<legend>',
$result
);
$this->assertContains(
'<p>',
$result
);
$this->assertContains(
'<dl class="errors">',
$result
);
$this->assertContains(
'<dd>',
$result
);
$this->assertContains(
'<table width="100%" cellspacing="0">',
$result
);
}
/**
* Test for PMA_displayInput()
*
* @return void
*/
public function testDisplayInput()
{
if (! PMA_HAS_RUNKIT) {
$this->markTestSkipped('Cannot modify constant');
}
$_SESSION['PMA_Theme'] = new Theme();
$GLOBALS['pmaThemeImage'] = 'testImage';
$GLOBALS['_FormDislayGroup'] = 1;
$opts = array();
$opts['errors'] = array('e1');
$opts['userprefs_allow'] = false;
$opts['setvalue'] = ':group';
$opts['doc'] = "https://example.com/";
$opts['comment'] = "testComment";
$opts['comment_warning'] = true;
$opts['show_restore_default'] = true;
$result = PMA_displayInput(
'test/path', 'testName', 'text', 'val',
'desc', false, $opts
);
$this->assertContains(
'<tr class="group-header-field group-header-1 disabled-field">',
$result
);
$this->assertContains(
'<label for="test/path">',
$result
);
$this->assertContains(
'<a href="https://example.com/" target="documentation"',
$result
);
$this->assertContains(
'<img src="testImageb_help.png" title="Documentation" ' .
'alt="Documentation" /',
$result
);
$this->assertContains(
'<span class="disabled-notice"',
$result
);
$this->assertContains(
'<small>',
$result
);
$this->assertContains(
'<input type="text" size="40" name="test/path" id="test/path" ' .
'class="custom field-error" value="val" />',
$result
);
$this->assertContains(
'<span class="field-comment-mark field-comment-warning" '
. 'title="testComment">',
$result
);
$this->assertContains(
'<a class="restore-default" href="#test/path"',
$result
);
$this->assertContains(
'<dl class="inline_errors"><dd>e1</dd></dl>',
$result
);
// second case
define('PMA_SETUP', true);
$GLOBALS['_FormDislayGroup'] = 0;
$GLOBALS['cfg']['ThemePath'] = 'themePath';
$opts = array();
$opts['errors'] = array();
$opts['setvalue'] = 'setVal';
$opts['comment'] = "testComment";
$opts['show_restore_default'] = true;
$opts['userprefs_comment'] = 'userprefsComment';
$opts['userprefs_allow'] = true;
$result = PMA_displayInput(
'test/path', 'testName', 'checkbox', 'val',
'', false, $opts
);
$this->assertContains(
'<tr class="group-field group-field-1">',
$result
);
$this->assertContains(
'<input type="checkbox" name="test/path" id="test/path" ' .
'checked="checked" />',
$result
);
$this->assertContains(
'<a class="userprefs-comment" title="userprefsComment">',
$result
);
$this->assertContains(
'<td class="userprefs-allow" title="Allow users to customize ' .
'this value">',
$result
);
$this->assertContains(
'<a class="set-value" href="#test/path=setVal" ' .
'title="Set value: setVal" style="display:none">',
$result
);
// short_text
$GLOBALS['_FormDislayGroup'] = 0;
$GLOBALS['cfg']['ThemePath'] = 'themePath';
$opts = array();
$opts['errors'] = array();
$result = PMA_displayInput(
'test/path', 'testName', 'short_text', 'val',
'', true, $opts
);
$this->assertContains(
'<input type="text" size="25" name="test/path" id="test/path" ' .
'value="val" />',
$result
);
// number_text
$result = PMA_displayInput(
'test/path', 'testName', 'number_text', 'val',
'', true, $opts
);
$this->assertContains(
'<input type="number" name="test/path" ' .
'id="test/path" value="val" />',
$result
);
// select case 1
$opts['values_escaped'] = true;
$opts['values_disabled'] = array(1, 2);
$opts['values'] = array(
1 => 'test',
'key1' => true,
'key2' => false,
);
$result = PMA_displayInput(
'test/path', 'testName', 'select', true,
'', true, $opts
);
$this->assertContains(
'<select name="test/path" id="test/path">',
$result
);
$this->assertContains(
'<option value="1" selected="selected" disabled="disabled">',
$result
);
$this->assertContains(
'<option value="key1">',
$result
);
$this->assertContains(
'<option value="key2">',
$result
);
// select case 2
$opts['values_escaped'] = false;
$opts['values_disabled'] = array(1, 2);
$opts['values'] = array(
'a<b' => 'c&d',
'key1' => true,
'key2' => false,
);
$result = PMA_displayInput(
'test/path', 'testName', 'select', false,
'', true, $opts
);
$this->assertContains(
'<select name="test/path" id="test/path">',
$result
);
// assertContains doesn't seem to work with htmlentities
$this->assertContains(
'<option value="a&lt;b">c&amp;d</option>',
$result
);
// list
$result = PMA_displayInput(
'test/path', 'testName', 'list', array('foo', 'bar'),
'', true, $opts
);
$this->assertContains(
'<textarea cols="40" rows="5" name="test/path" id="test/path">',
$result
);
runkit_constant_remove('PMA_SETUP');
}
/**
* Test for PMA_displayGroupHeader()
*
* @return void
*/
public function testDisplayGroupHeader()
{
if (! PMA_HAS_RUNKIT) {
$this->markTestSkipped('Cannot modify constant');
}
$this->assertNull(
PMA_displayGroupHeader('')
);
$GLOBALS['_FormDisplayGroup'] = 3;
if (!defined('PMA_SETUP')) {
define('PMA_SETUP', true);
}
$result = PMA_displayGroupHeader('headerText');
$this->assertContains(
'<tr class="group-header group-header-4">',
$result
);
// without PMA_SETUP
runkit_constant_remove('PMA_SETUP');
$GLOBALS['_FormDisplayGroup'] = 3;
$result = PMA_displayGroupHeader('headerText');
$this->assertContains(
'<tr class="group-header group-header-4">',
$result
);
}
/**
* Test for PMA_displayGroupFooter()
*
* @return void
*/
public function testDisplayGroupFooter()
{
$GLOBALS['_FormDisplayGroup'] = 3;
PMA_displayGroupFooter();
$this->assertEquals(
2,
$GLOBALS['_FormDisplayGroup']
);
}
/**
* Test for PMA_displayFieldsetBottom()
*
* @return void
*/
public function testDisplayFieldsetBottom()
{
if (! PMA_HAS_RUNKIT) {
$this->markTestSkipped('Cannot modify constant');
}
// with PMA_SETUP
if (!defined('PMA_SETUP')) {
define('PMA_SETUP', true);
}
$result = PMA_displayFieldsetBottom();
$this->assertContains(
'<td colspan="3" class="lastrow">',
$result
);
$this->assertContains(
'<input type="submit" name="submit_save" value="Apply"',
$result
);
$this->assertContains(
'<input type="button" name="submit_reset" value="Reset" />',
$result
);
$this->assertContains(
'</fieldset>',
$result
);
// without PMA_SETUP
runkit_constant_remove('PMA_SETUP');
$result = PMA_displayFieldsetBottom();
$this->assertContains(
'<td colspan="2" class="lastrow">',
$result
);
}
/**
* Test for PMA_displayFieldsetBottomSimple()
*
* @return void
*/
public function testDisplayFieldsetBottomSimple()
{
$result = PMA_displayFieldsetBottomSimple();
$this->assertEquals(
'</table></fieldset>',
$result
);
}
/**
* Test for PMA_displayTabsBottom()
*
* @return void
*/
public function testDisplayTabsBottom()
{
$result = PMA_displayTabsBottom();
$this->assertEquals(
"</div>\n",
$result
);
}
/**
* Test for PMA_displayFormBottom()
*
* @return void
*/
public function testDisplayFormBottom()
{
$result = PMA_displayFormBottom();
$this->assertEquals(
"</form>\n",
$result
);
}
/**
* Test for PMA_addJsValidate()
*
* @return void
*/
public function testAddJsValidate()
{
$validators = array(
'one' => array('\\\';', '\r\n\\\'<scrIpt></\' + \'script>'),
'two' => array()
);
$js = array();
PMA_addJsValidate('testID', $validators, $js);
$this->assertEquals(
array(
'validateField(\'testID\', \'PMA_\\\';\', true, '
. '[\'\\\\r\\\\n\\\\\\\''
. '<scrIpt></\\\' + \\\'script>\'])',
'validateField(\'testID\', \'PMA_\', true)'
),
$js
);
}
/**
* Test for PMA_displayJavascript()
*
* @return void
*/
public function testDisplayJavascript()
{
$this->assertNull(
PMA_displayJavascript(array())
);
$result = PMA_displayJavascript(array('var i = 1', 'i++'));
$this->assertEquals(
'<script type="text/javascript">' . "\n"
. 'if (typeof configInlineParams === "undefined"'
. ' || !Array.isArray(configInlineParams)) '
. 'configInlineParams = [];' . "\n"
. 'configInlineParams.push(function() {' . "\n"
. 'var i = 1;' . "\n"
. 'i++;' . "\n"
. '});' . "\n"
. 'if (typeof configScriptLoaded !== "undefined"'
. ' && configInlineParams) loadInlineConfig();'
. "\n" . '</script>',
$result
);
}
/**
* Test for PMA_displayErrors()
*
* @return void
*/
public function testDisplayErrors()
{
$errors = array('<err1>', '&err2');
$result = PMA_displayErrors('err"Name1"', $errors);
$this->assertEquals(
'<dl><dt>err&quot;Name1&quot;</dt>' .
'<dd>&lt;err1&gt;</dd><dd>&amp;err2</dd></dl>',
$result
);
}
}

View File

@ -0,0 +1,129 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for methods under Formset processing library
*
* @package PhpMyAdmin-test
*/
/*
* Include to test
*/
require_once 'setup/lib/form_processing.lib.php';
/**
* tests for methods under Formset processing library
*
* @package PhpMyAdmin-test
*/
class PMA_Form_Processing_Test extends PHPUnit_Framework_TestCase
{
/**
* Prepares environment for the test.
*
* @return void
*/
public function setUp()
{
$GLOBALS['server'] = 1;
$GLOBALS['cfg']['ServerDefault'] = 1;
}
/**
* Test for process_formset()
*
* @return void
*/
public function testProcessFormSet()
{
if (!defined('PMA_TEST_HEADERS')) {
$this->markTestSkipped(
'Cannot redefine constant/function - missing runkit extension'
);
}
// case 1
$formDisplay = $this->getMockBuilder('PMA\libraries\config\FormDisplay')
->disableOriginalConstructor()
->setMethods(array('process', 'getDisplay'))
->getMock();
$formDisplay->expects($this->once())
->method('process')
->with(false)
->will($this->returnValue(false));
$formDisplay->expects($this->once())
->method('getDisplay')
->with(true, true);
PMA_Process_formset($formDisplay);
// case 2
$formDisplay = $this->getMockBuilder('PMA\libraries\config\FormDisplay')
->disableOriginalConstructor()
->setMethods(array('process', 'hasErrors', 'displayErrors'))
->getMock();
$formDisplay->expects($this->once())
->method('process')
->with(false)
->will($this->returnValue(true));
$formDisplay->expects($this->once())
->method('hasErrors')
->with()
->will($this->returnValue(true));
ob_start();
PMA_Process_formset($formDisplay);
$result = ob_get_clean();
$this->assertContains(
'<div class="error">',
$result
);
$this->assertContains(
'<a href="?lang=en&amp;token=token&amp;page=&amp;mode=revert">',
$result
);
$this->assertContains(
'<a class="btn" href="index.php?lang=en&amp;token=token">',
$result
);
$this->assertContains(
'<a class="btn" href="?lang=en&amp;token=token&amp;page=&amp;mode=edit">',
$result
);
// case 3
$formDisplay = $this->getMockBuilder('PMA\libraries\config\FormDisplay')
->disableOriginalConstructor()
->setMethods(array('process', 'hasErrors'))
->getMock();
$formDisplay->expects($this->once())
->method('process')
->with(false)
->will($this->returnValue(true));
$formDisplay->expects($this->once())
->method('hasErrors')
->with()
->will($this->returnValue(false));
PMA_Process_formset($formDisplay);
$this->assertEquals(
array('HTTP/1.1 303 See Other', 'Location: index.php?lang=en&amp;token=token'),
$GLOBALS['header']
);
}
}

View File

@ -0,0 +1,74 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for PMA_GIS_modifyQuery method
*
* @package PhpMyAdmin-test
*/
/*
* Include to test
*/
//require_once 'libraries/tbl_gis_visualization.lib.php';
/**
* Tests for PMA_GIS_modifyQuery method
*
* @package PhpMyAdmin-test
*/
class PMA_GIS_ModifyQueryTest extends PHPUnit_Framework_TestCase
{
//@todo: Move this test to GIS_Visualization's
/**
* Test PMA_GIS_modifyQuery method
*
* @internal param string $sql_query query to modify
* @internal param array $settings visualization settings
* @internal param string $modified_query modified query
*
* @return void
*
* @dataProvider provider
*/
public function testModifyQuery(/*$sql_query, $settings, $modified_query*/)
{
// $this->assertEquals(
// PMA_GIS_modifyQuery($sql_query, $settings),
// $modified_query
// );
$this->markTestIncomplete('Not yet implemented!');
}
/**
* data provider for testModifyQuery
*
* @return array data for testModifyQuery
*/
public function provider()
{
return array(
// with label column
array(
"SELECT * FROM `foo` WHERE `bar` = `zoo`",
array('spatialColumn' => 'moo', 'labelColumn' => 'noo'),
"SELECT `noo`, ASTEXT(`moo`) AS `moo`, SRID(`moo`) AS `srid` "
. "FROM (SELECT * FROM `foo` WHERE `bar` = `zoo`) AS `temp_gis`"
),
// with no label column
array(
"SELECT * FROM `foo` WHERE `bar` = `zoo`",
array('spatialColumn' => 'moo'),
"SELECT ASTEXT(`moo`) AS `moo`, SRID(`moo`) AS `srid` "
. "FROM (SELECT * FROM `foo` WHERE `bar` = `zoo`) AS `temp_gis`"
),
// with spatial column generated on the fly
array(
"SELECT name, PointFromText( Concat( 'POINT (', geo_lat, ' ', geo_lon, ')' ) ) AS coordinates FROM users",
array('spatialColumn' => 'coordinates', 'labelColumn' => 'name'),
"SELECT `name`, ASTEXT(`coordinates`) AS `coordinates`, SRID(`coordinates`) AS `srid` "
. "FROM (SELECT name, PointFromText( Concat( 'POINT (', geo_lat, ' ', geo_lon, ')' ) ) AS coordinates FROM users) AS `temp_gis`"
),
);
}
}

View File

@ -0,0 +1,276 @@
<?php
/**
* Tests for libraries/pmd_common.php
*
* @package PhpMyAdmin-test
*/
require_once 'libraries/database_interface.inc.php';
/**
* Tests for libraries/pmd_common.php
*
* @package PhpMyAdmin-test
*/
class PMA_PMD_CommonTest extends PHPUnit_Framework_TestCase
{
/**
* Setup for test cases
*
* @return void
*/
public function setup()
{
$GLOBALS['server'] = 1;
$GLOBALS['controllink'] = 2;
$_SESSION = array(
'relation' => array(
'1' => array(
'PMA_VERSION' => PMA_VERSION,
'db' => 'pmadb',
'pdf_pages' => 'pdf_pages',
'pdfwork' => true,
'table_coords' => 'table_coords'
)
)
);
include_once 'libraries/relation.lib.php';
include_once 'libraries/pmd_common.php';
}
/**
* Test for PMA_getTablePositions()
*
* @return void
*/
public function testGetTablePositions()
{
$pg = 1;
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->any())->method('escapeString')
->will($this->returnArgument(0));
$dbi->expects($this->once())
->method('fetchResult')
->with(
"
SELECT CONCAT_WS('.', `db_name`, `table_name`) AS `name`,
`x` AS `X`,
`y` AS `Y`,
1 AS `V`,
1 AS `H`
FROM `pmadb`.`table_coords`
WHERE pdf_page_number = " . $pg,
'name',
null,
2,
PMA\libraries\DatabaseInterface::QUERY_STORE
);
$GLOBALS['dbi'] = $dbi;
PMA_getTablePositions($pg);
}
/**
* Test for PMA_getPageName()
*
* @return void
*/
public function testGetPageName()
{
$pg = 1;
$pageName = 'pageName';
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->any())->method('escapeString')
->will($this->returnArgument(0));
$dbi->expects($this->once())
->method('fetchResult')
->with(
"SELECT `page_descr` FROM `pmadb`.`pdf_pages`"
. " WHERE `page_nr` = " . $pg,
null,
null,
2,
PMA\libraries\DatabaseInterface::QUERY_STORE
)
->will($this->returnValue(array($pageName)));
$GLOBALS['dbi'] = $dbi;
$result = PMA_getPageName($pg);
$this->assertEquals($pageName, $result);
}
/**
* Test for PMA_deletePage()
*
* @return void
*/
public function testDeletePage()
{
$pg = 1;
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->exactly(2))
->method('query')
->willReturnOnConsecutiveCalls(
true,
true
);
$dbi->expects($this->any())->method('escapeString')
->will($this->returnArgument(0));
$GLOBALS['dbi'] = $dbi;
$result = PMA_deletePage($pg);
$this->assertEquals(true, $result);
}
/**
* Test for testGetDefaultPage() when there is a default page
* (a page having the same name as database)
*
* @return void
*/
public function testGetDefaultPage()
{
$db = 'db';
$default_pg = '2';
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->once())
->method('fetchResult')
->with(
"SELECT `page_nr` FROM `pmadb`.`pdf_pages`"
. " WHERE `db_name` = '" . $db . "'"
. " AND `page_descr` = '" . $db . "'",
null,
null,
2,
PMA\libraries\DatabaseInterface::QUERY_STORE
)
->will($this->returnValue(array($default_pg)));
$dbi->expects($this->any())->method('escapeString')
->will($this->returnArgument(0));
$GLOBALS['dbi'] = $dbi;
$result = PMA_getDefaultPage($db);
$this->assertEquals($default_pg, $result);
}
/**
* Test for testGetDefaultPage() when there is no default page
*
* @return void
*/
public function testGetDefaultPageWithNoDefaultPage()
{
$db = 'db';
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->once())
->method('fetchResult')
->with(
"SELECT `page_nr` FROM `pmadb`.`pdf_pages`"
. " WHERE `db_name` = '" . $db . "'"
. " AND `page_descr` = '" . $db . "'",
null,
null,
2,
PMA\libraries\DatabaseInterface::QUERY_STORE
)
->will($this->returnValue(array()));
$dbi->expects($this->any())->method('escapeString')
->will($this->returnArgument(0));
$GLOBALS['dbi'] = $dbi;
$result = PMA_getDefaultPage($db);
$this->assertEquals(-1, $result);
}
/**
* Test for testGetLoadingPage() when there is a default page
*
* @return void
*/
public function testGetLoadingPageWithDefaultPage()
{
$db = 'db';
$default_pg = '2';
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->once())
->method('fetchResult')
->with(
"SELECT `page_nr` FROM `pmadb`.`pdf_pages`"
. " WHERE `db_name` = '" . $db . "'"
. " AND `page_descr` = '" . $db . "'",
null,
null,
2,
PMA\libraries\DatabaseInterface::QUERY_STORE
)
->will($this->returnValue(array($default_pg)));
$dbi->expects($this->any())->method('escapeString')
->will($this->returnArgument(0));
$GLOBALS['dbi'] = $dbi;
$result = PMA_getLoadingPage($db);
$this->assertEquals($default_pg, $result);
}
/**
* Test for testGetLoadingPage() when there is no default page
*
* @return void
*/
public function testGetLoadingPageWithNoDefaultPage()
{
$db = 'db';
$first_pg = '1';
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->exactly(2))
->method('fetchResult')
->willReturnOnConsecutiveCalls(
array(),
array($first_pg)
);
$dbi->expects($this->any())->method('escapeString')
->will($this->returnArgument(0));
$GLOBALS['dbi'] = $dbi;
$result = PMA_getLoadingPage($db);
$this->assertEquals($first_pg, $result);
}
}

View File

@ -0,0 +1,397 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for methods under setup/lib/index.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test
*/
use PMA\libraries\config\ConfigFile;
use PMA\libraries\config\ServerConfigChecks;
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/config/config_functions.lib.php';
require_once 'setup/lib/index.lib.php';
require_once 'libraries/sanitizing.lib.php';
/**
* tests for methods under setup/lib/index.lib.php
*
* @package PhpMyAdmin-test
*/
class PMA_SetupIndex_Test extends PHPUnit_Framework_TestCase
{
/**
* SetUp for test cases
*
* @return void
*/
public function setup()
{
$GLOBALS['cfg']['ProxyUrl'] = '';
}
/**
* Test for PMA_messagesBegin()
*
* @return void
*/
public function testPMAmessagesBegin()
{
$_SESSION['messages'] = array(
array(
array('foo'),
array('bar')
)
);
PMA_messagesBegin();
$this->assertEquals(
array(
array(
array(
0 => 'foo',
'fresh' => false,
'active' => false
),
array(
0 => 'bar',
'fresh' => false,
'active' => false
)
)
),
$_SESSION['messages']
);
// case 2
unset($_SESSION['messages']);
PMA_messagesBegin();
$this->assertEquals(
array(
'error' => array(),
'notice' => array()
),
$_SESSION['messages']
);
}
/**
* Test for PMA_messagesSet
*
* @return void
*/
public function testPMAmessagesSet()
{
PMA_messagesSet('type', '123', 'testTitle', 'msg');
$this->assertEquals(
array(
'fresh' => true,
'active' => true,
'title' => 'testTitle',
'message' => 'msg'
),
$_SESSION['messages']['type']['123']
);
}
/**
* Test for PMA_messagesEnd
*
* @return void
*/
public function testPMAmessagesEnd()
{
$_SESSION['messages'] = array(
array(
array('msg' => 'foo', 'active' => false),
array('msg' => 'bar', 'active' => true),
)
);
PMA_messagesEnd();
$this->assertEquals(
array(
array(
'1' => array(
'msg' => 'bar',
'active' => 1
)
)
),
$_SESSION['messages']
);
}
/**
* Test for PMA_messagesShowHtml
*
* @return void
*/
public function testPMAMessagesShowHTML()
{
$_SESSION['messages'] = array(
'type' => array(
array('title' => 'foo', 'message' => '123', 'fresh' => false),
array('title' => 'bar', 'message' => '321', 'fresh' => true),
)
);
ob_start();
PMA_messagesShowHtml();
$result = ob_get_clean();
$this->assertContains(
'<div class="type" id="0"><h4>foo</h4>123</div>',
$result
);
$this->assertContains(
'<div class="type" id="1"><h4>bar</h4>321</div>',
$result
);
$this->assertContains(
'<script type="text/javascript">',
$result
);
$this->assertContains(
"hiddenMessages.push('0');",
$result
);
$this->assertContains(
"</script>",
$result
);
}
/**
* Test for PMA_checkConfigRw
*
* @return void
*/
public function testPMACheckConfigRw()
{
if (! PMA_HAS_RUNKIT) {
$this->markTestSkipped('Cannot redefine constant');
}
$redefine = null;
$GLOBALS['cfg']['AvailableCharsets'] = array();
$GLOBALS['server'] = 0;
$GLOBALS['ConfigFile'] = new ConfigFile();
if (!defined('SETUP_CONFIG_FILE')) {
define('SETUP_CONFIG_FILE', 'test/test_data/configfile');
} else {
$redefine = 'SETUP_CONFIG_FILE';
runkit_constant_redefine(
'SETUP_CONFIG_FILE',
'test/test_data/configfile'
);
}
$is_readable = false;
$is_writable = false;
$file_exists = false;
PMA_checkConfigRw($is_readable, $is_writable, $file_exists);
$this->assertTrue(
$is_readable
);
$this->assertTrue(
$is_writable
);
$this->assertFalse(
$file_exists
);
runkit_constant_redefine(
'SETUP_CONFIG_FILE',
'test/test_data/test.file'
);
PMA_checkConfigRw($is_readable, $is_writable, $file_exists);
$this->assertTrue(
$is_readable
);
$this->assertTrue(
$is_writable
);
$this->assertTrue(
$file_exists
);
if ($redefine !== null) {
runkit_constant_redefine('SETUP_CONFIG_FILE', $redefine);
} else {
runkit_constant_remove('SETUP_CONFIG_FILE');
}
}
/**
* Test for ServerConfigChecks::performConfigChecks
*
* @return void
* @group medium
*/
public function testServerConfigChecksPerformConfigChecks()
{
$GLOBALS['cfg']['AvailableCharsets'] = array();
$GLOBALS['cfg']['ServerDefault'] = 0;
$GLOBALS['server'] = 0;
$cf = new ConfigFile();
$GLOBALS['ConfigFile'] = $cf;
$reflection = new \ReflectionProperty('PMA\libraries\config\ConfigFile', '_id');
$reflection->setAccessible(true);
$sessionID = $reflection->getValue($cf);
$_SESSION[$sessionID]['Servers'] = array(
'1' => array(
'host' => 'localhost',
'ssl' => false,
'extension' => 'mysql',
'auth_type' => 'config',
'user' => 'username',
'password' => 'password',
'AllowRoot' => true,
'AllowNoPassword' => true,
)
);
$_SESSION[$sessionID]['AllowArbitraryServer'] = true;
$_SESSION[$sessionID]['LoginCookieValidity'] = 5000;
$_SESSION[$sessionID]['LoginCookieStore'] = 4000;
$_SESSION[$sessionID]['SaveDir'] = true;
$_SESSION[$sessionID]['TempDir'] = true;
$_SESSION[$sessionID]['GZipDump'] = true;
$_SESSION[$sessionID]['BZipDump'] = true;
$_SESSION[$sessionID]['ZipDump'] = true;
$noticeArrayKeys = array(
'TempDir',
'SaveDir',
'LoginCookieValidity',
'AllowArbitraryServer',
'Servers/1/AllowNoPassword',
'Servers/1/auth_type',
'Servers/1/ssl'
);
$errorArrayKeys = array(
'LoginCookieValidity'
);
if (@!function_exists('gzopen') || @!function_exists('gzencode')) {
$errorArrayKeys[] = 'GZipDump';
}
if (@!function_exists('bzopen') || @!function_exists('bzcompress')) {
$errorArrayKeys[] = 'BZipDump';
}
if (!@function_exists('zip_open')) {
$errorArrayKeys[] = 'ZipDump_import';
}
if (!@function_exists('gzcompress')) {
$errorArrayKeys[] = 'ZipDump_export';
}
$configChecker = new ServerConfigChecks($GLOBALS['ConfigFile']);
$configChecker->performConfigChecks();
foreach ($noticeArrayKeys as $noticeKey) {
$this->assertArrayHasKey(
$noticeKey,
$_SESSION['messages']['notice']
);
}
foreach ($errorArrayKeys as $errorKey) {
$this->assertArrayHasKey(
$errorKey,
$_SESSION['messages']['error']
);
}
// Case 2
unset($_SESSION['messages']);
unset($_SESSION[$sessionID]);
$_SESSION[$sessionID]['Servers'] = array(
'1' => array(
'host' => 'localhost',
'ssl' => true,
'extension' => 'mysqli',
'auth_type' => 'cookie',
'AllowRoot' => false
)
);
$_SESSION[$sessionID]['AllowArbitraryServer'] = false;
$_SESSION[$sessionID]['LoginCookieValidity'] = -1;
$_SESSION[$sessionID]['LoginCookieStore'] = 0;
$_SESSION[$sessionID]['SaveDir'] = '';
$_SESSION[$sessionID]['TempDir'] = '';
$_SESSION[$sessionID]['GZipDump'] = false;
$_SESSION[$sessionID]['BZipDump'] = false;
$_SESSION[$sessionID]['ZipDump'] = false;
$configChecker = new ServerConfigChecks($GLOBALS['ConfigFile']);
$configChecker->performConfigChecks();
$this->assertArrayHasKey(
'blowfish_secret_created',
$_SESSION['messages']['notice']
);
foreach ($noticeArrayKeys as $noticeKey) {
$this->assertArrayNotHasKey(
$noticeKey,
$_SESSION['messages']['notice']
);
}
$this->assertArrayNotHasKey(
'error',
$_SESSION['messages']
);
// Case 3
$_SESSION[$sessionID]['blowfish_secret'] = 'sec';
$_SESSION[$sessionID]['Servers'] = array(
'1' => array(
'host' => 'localhost',
'auth_type' => 'cookie'
)
);
$configChecker = new ServerConfigChecks($GLOBALS['ConfigFile']);
$configChecker->performConfigChecks();
$this->assertArrayHasKey(
'blowfish_warnings2',
$_SESSION['messages']['error']
);
}
}

View File

@ -0,0 +1,108 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for bookmark.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/relation.lib.php';
/**
* tests for bookmark.lib.php
*
* @package PhpMyAdmin-test
*/
class PMA_Bookmark_Test extends PHPUnit_Framework_TestCase
{
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*
* @access protected
* @return void
*/
public function setUp()
{
$GLOBALS['cfg']['Server']['user'] = 'root';
$GLOBALS['cfg']['Server']['pmadb'] = 'phpmyadmin';
$GLOBALS['cfg']['Server']['bookmarktable'] = 'pma_bookmark';
$GLOBALS['server'] = 1;
include_once 'libraries/bookmark.lib.php';
}
/**
* Test for PMA_Bookmark_getParams
*
* @return void
*/
public function testGetParams()
{
$this->assertEquals(
false,
PMA_Bookmark_getParams()
);
}
/**
* Test for PMA_Bookmark_getList
*
* @return void
*/
public function testGetList()
{
$this->assertEquals(
array(),
PMA_Bookmark_getList('phpmyadmin')
);
}
/**
* Test for PMA_Bookmark_get
*
* @return void
*/
public function testGet()
{
$this->assertEquals(
'',
PMA_Bookmark_get('phpmyadmin', '1')
);
}
/**
* Test for PMA_Bookmark_save
*
* @return void
*/
public function testSave()
{
$bookmark = array(
'dbase' => 'phpmyadmin',
'user' => 'phpmyadmin',
'query' => 'SELECT "phpmyadmin"',
'label' => 'phpmyadmin',
);
$this->assertfalse(PMA_Bookmark_save($bookmark));
}
/**
* Test for PMA_Bookmark_delete
*
* @return void
*/
public function testDelete()
{
$this->assertFalse(
PMA_Bookmark_delete('1')
);
}
}

View File

@ -0,0 +1,335 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for libraries/browse_foreigners.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/browse_foreigners.lib.php';
require_once 'libraries/url_generating.lib.php';
/**
* Tests for libraries/browse_foreigners.lib.php
*
* @package PhpMyAdmin-test
*/
class PMA_BrowseForeignersTest extends PHPUnit_Framework_TestCase
{
/**
* Setup for test cases
*
* @return void
*/
public function setup()
{
$GLOBALS['cfg']['MaxRows'] = 25;
}
/**
* Test for PMA_getForeignLimit
*
* @return void
*/
function testGetForeignLimit()
{
$this->assertNull(
PMA_getForeignLimit('Show all')
);
$this->assertEquals(
'LIMIT 0, 25 ',
PMA_getForeignLimit(null)
);
$_REQUEST['pos'] = 10;
$this->assertEquals(
'LIMIT 10, 25 ',
PMA_getForeignLimit(null)
);
$GLOBALS['cfg']['MaxRows'] = 50;
$this->assertEquals(
'LIMIT 10, 50 ',
PMA_getForeignLimit(null)
);
$this->assertEquals(
'LIMIT 10, 50 ',
PMA_getForeignLimit('xyz')
);
}
/**
* Test for PMA_getHtmlForShowAll
*
* @return void
*/
function testGetHtmlForShowAll()
{
$this->assertEquals(
'',
PMA_getHtmlForShowAll(null)
);
$foreignData = array();
$foreignData['disp_row'] = array();
$GLOBALS['cfg']['ShowAll'] = false;
$this->assertEquals(
'',
PMA_getHtmlForShowAll($foreignData)
);
$GLOBALS['cfg']['ShowAll'] = true;
$foreignData['the_total'] = 0;
$this->assertEquals(
'',
PMA_getHtmlForShowAll($foreignData)
);
$foreignData['the_total'] = 30;
$this->assertEquals(
'<input type="submit" id="foreign_showAll" '
. 'name="foreign_showAll" '
. 'value="' . 'Show all' . '" />',
PMA_getHtmlForShowAll($foreignData)
);
}
/**
* Test for PMA_getHtmlForGotoPage
*
* @return void
*/
function testGetHtmlForGotoPage()
{
$this->assertEquals(
'',
PMA_getHtmlForGotoPage(null)
);
$_REQUEST['pos'] = 15;
$foreignData = array();
$foreignData['disp_row'] = array();
$foreignData['the_total'] = 5;
$this->assertEquals(
'',
PMA_getHtmlForGotoPage($foreignData)
);
$foreignData['the_total'] = 30;
$result = PMA_getHtmlForGotoPage($foreignData);
$this->assertStringStartsWith(
'Page number:',
$result
);
$this->assertStringEndsWith(
'</select>',
$result
);
$this->assertContains(
'<select class="pageselector ajax" name="pos"',
$result
);
$this->assertContains(
'<option selected="selected" '
. 'style="font-weight: bold" value="0">',
$result
);
$this->assertContains(
'<option value="25"',
$result
);
}
/**
* Test for PMA_getHtmlForColumnElement
*
* @return void
*/
function testGetHtmlForColumnElement()
{
$cssClass = '';
$isSelected = false;
$keyname = '';
$description = 'foo';
$title = '';
$result = PMA_getHtmlForColumnElement(
$cssClass, $isSelected, $keyname,
$description, $title
);
$this->assertContains(
'<td>',
$result
);
$this->assertContains(
'<a class="foreign_value" data-key="" href="#" '
. 'title="Use this value">',
$result
);
$cssClass = 'class="baz"';
$isSelected = true;
$keyname = 'bar';
$title = 'foo';
$result = PMA_getHtmlForColumnElement(
$cssClass, $isSelected, $keyname,
$description, $title
);
$this->assertContains(
'<td class="baz">',
$result
);
$this->assertContains(
'<strong>',
$result
);
$this->assertContains(
'<a class="foreign_value" data-key="bar" href="#" '
. 'title="Use this value: foo">',
$result
);
}
/**
* Test for PMA_getDescriptionAndTitle
*
* @return void
*/
function testGetDescriptionAndTitle()
{
$GLOBALS['cfg']['LimitChars'] = 30;
$desc = 'foobar<baz';
$this->assertEquals(
array('foobar&lt;baz', ''),
PMA_getDescriptionAndTitle($desc)
);
$GLOBALS['cfg']['LimitChars'] = 5;
$this->assertEquals(
array('fooba...', 'foobar&lt;baz'),
PMA_getDescriptionAndTitle($desc)
);
}
/**
* Test for PMA_getHtmlForRelationalFieldSelection
*
* @return void
*/
function testGetHtmlForRelationalFieldSelection()
{
$db = '';
$table = '';
$field = 'foo';
$foreignData = array();
$foreignData['disp_row'] = '';
$fieldkey = 'bar';
$current_value = '';
$_REQUEST['rownumber'] = 1;
$_REQUEST['foreign_filter'] = '5';
$result = PMA_getHtmlForRelationalFieldSelection(
$db, $table, $field, $foreignData, $fieldkey, $current_value
);
$this->assertContains(
'<form class="ajax" '
. 'id="browse_foreign_form" name="browse_foreign_from" '
. 'action="browse_foreigners.php" method="post">',
$result
);
$this->assertContains(
'<fieldset>',
$result
);
$this->assertContains(
'<input type="hidden" name="field" value="foo" />',
$result
);
$this->assertContains(
'<input type="hidden" name="fieldkey" value="bar" />',
$result
);
$this->assertContains(
'<input type="hidden" name="rownumber" value="1" />',
$result
);
$this->assertContains(
'<span class="formelement">',
$result
);
$this->assertContains(
'<label for="input_foreign_filter">',
$result
);
$this->assertContains(
'<input type="text" name="foreign_filter" '
. 'id="input_foreign_filter" '
. 'value="5" data-old="5" '
. '/>',
$result
);
$this->assertContains(
'<input type="submit" name="submit_foreign_filter" value="Go" />',
$result
);
$this->assertContains(
'<span class="formelement">',
$result
);
$this->assertContains(
'<table width="100%" id="browse_foreign_table">',
$result
);
$foreignData['disp_row'] = array();
$foreignData['the_total'] = 5;
$GLOBALS['cfg']['ShowAll'] = false;
$result = PMA_getHtmlForRelationalFieldSelection(
$db, $table, $field, $foreignData, $fieldkey, $current_value
);
$this->assertContains(
'<table width="100%" id="browse_foreign_table">',
$result
);
$this->assertContains(
'<th>',
$result
);
}
}

View File

@ -0,0 +1,680 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for central_columns.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
use PMA\libraries\TypesMySQL;
$GLOBALS['server'] = 1;
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/relation.lib.php';
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/mysql_charsets.inc.php';
require_once 'libraries/central_columns.lib.php';
/**
* tests for central_columns.lib.php
*
* @package PhpMyAdmin-test
*/
class PMA_Central_Columns_Test extends PHPUnit_Framework_TestCase
{
private $_columnData = array(
array(
'col_name' => "id", "col_type" => 'integer',
'col_length' => 0, 'col_isNull' => 0,
'col_extra' => 'UNSIGNED,auto_increment',
'col_default' => 1, 'col_collation' => ''
),
array('col_name' => "col1", 'col_type' => 'varchar',
'col_length' => 100, 'col_isNull' => 1, 'col_extra' => 'BINARY',
'col_default' => 1, 'col_collation' => ''
),
array(
'col_name' => "col2", 'col_type' => 'DATETIME',
'col_length' => 0, 'col_isNull' => 1,
'col_extra' => 'on update CURRENT_TIMESTAMP',
'col_default' => 'CURRENT_TIMESTAMP', 'col_collation' => ''
)
);
private $_modifiedColumnData = array(
array(
'col_name' => "id", "col_type" => 'integer',
'col_length' => 0, 'col_isNull' => 0, 'col_extra' => 'auto_increment',
'col_default' => 1, 'col_collation' => '', 'col_attribute' => 'UNSIGNED'
),
array('col_name' => "col1", 'col_type' => 'varchar',
'col_length' => 100, 'col_isNull' => 1, 'col_extra' => '',
'col_default' => 1, 'col_collation' => '', 'col_attribute' => 'BINARY'
),
array(
'col_name' => "col2", 'col_type' => 'DATETIME',
'col_length' => 0, 'col_isNull' => 1, 'col_extra' => '',
'col_default' => 'CURRENT_TIMESTAMP', 'col_collation' => '',
'col_attribute' => 'on update CURRENT_TIMESTAMP'
)
);
/**
* prepares environment for tests
*
* @return void
*/
public function setUp()
{
$GLOBALS['PMA_Types'] = new TypesMySQL();
$GLOBALS['cfg']['Server']['user'] = 'pma_user';
$GLOBALS['cfg']['Server']['DisableIS'] = true;
$GLOBALS['cfg']['MaxRows'] = 10;
$GLOBALS['cfg']['ServerDefault'] = "PMA_server";
$GLOBALS['cfg']['ActionLinksMode'] = 'icons';
$GLOBALS['pmaThemeImage'] = 'image';
$GLOBALS['cfg']['CharEditing'] = '';
$GLOBALS['cfg']['LimitChars'] = 50;
$GLOBALS['db'] = 'PMA_db';
$GLOBALS['table'] = 'PMA_table';
//$_SESSION
$GLOBALS['server'] = 1;
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
$_SESSION['relation'][1] = array(
'PMA_VERSION' => PMA_VERSION,
'centralcolumnswork' => true,
'relwork' => 1,
'db' => 'phpmyadmin',
'relation' => 'relation',
'central_columns' => 'pma_central_columns'
);
// mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$GLOBALS['dbi'] = $dbi;
// set some common expectations
$dbi->expects($this->any())
->method('selectDb')
->will($this->returnValue(true));
$dbi->expects($this->any())
->method('getColumns')
->will(
$this->returnValue(
array(
"id"=>array("Type"=>"integer", "Null"=>"NO"),
"col1"=>array("Type"=>'varchar(100)', "Null"=>"YES"),
"col2"=>array("Type"=>'DATETIME', "Null"=>"NO")
)
)
);
$dbi->expects($this->any())
->method('getColumnNames')
->will($this->returnValue(array("id", "col1", "col2")));
$dbi->expects($this->any())
->method('tryQuery')
->will($this->returnValue(true));
$dbi->expects($this->any())
->method('getTables')
->will(
$this->returnValue(array("PMA_table", "PMA_table1", "PMA_table2"))
);
$dbi->expects($this->any())->method('escapeString')
->will($this->returnArgument(0));
}
/**
* Test for PMA_centralColumnsGetParams
*
* @return void
*/
public function testPMACentralColumnsGetParams()
{
$this->assertSame(
array(
'user' => 'pma_user',
'db' => 'phpmyadmin',
'table' => 'pma_central_columns'
),
PMA_centralColumnsGetParams()
);
}
/**
* Test for PMA_getColumnsList
*
* @return void
*/
public function testPMAGetColumnsList()
{
$GLOBALS['dbi']->expects($this->exactly(2))
->method('fetchResult')
->willReturnOnConsecutiveCalls(
$this->_columnData,
array_slice($this->_columnData, 1, 2)
);
$this->assertEquals(
$this->_modifiedColumnData,
PMA_getColumnsList('phpmyadmin')
);
$this->assertEquals(
array_slice($this->_modifiedColumnData, 1, 2),
PMA_getColumnsList('phpmyadmin', 1, 2)
);
}
/**
* Test for PMA_getCentralColumnsCount
*
* @return void
*/
function testPMAGetCentralColumnsCount()
{
$GLOBALS['dbi']->expects($this->once())
->method('fetchResult')
->with(
"SELECT count(db_name) FROM `pma_central_columns` "
. "WHERE db_name = 'phpmyadmin';",
null, null, $GLOBALS['controllink']
)
->will(
$this->returnValue(array(3))
);
$this->assertEquals(
3,
PMA_getCentralColumnsCount('phpmyadmin')
);
}
/**
* Test for PMA_syncUniqueColumns
*
* @return void
*/
public function testPMASyncUniqueColumns()
{
$_REQUEST['db'] = 'PMA_db';
$_REQUEST['table'] = 'PMA_table';
$this->assertTrue(
PMA_syncUniqueColumns(array('PMA_table'))
);
}
/**
* Test for PMA_deleteColumnsFromList
*
* @return void
*/
public function testPMADeleteColumnsFromList()
{
$_REQUEST['db'] = 'PMA_db';
$_REQUEST['table'] = 'PMA_table';
// when column exists in the central column list
$GLOBALS['dbi']->expects($this->at(4))
->method('fetchResult')
->with(
"SELECT col_name FROM `pma_central_columns` "
. "WHERE db_name = 'PMA_db' AND col_name IN ('col1');",
null, null, $GLOBALS['controllink']
)
->will(
$this->returnValue(array('col1'))
);
$GLOBALS['dbi']->expects($this->at(7))
->method('tryQuery')
->with(
"DELETE FROM `pma_central_columns` "
. "WHERE db_name = 'PMA_db' AND col_name IN ('col1');",
$GLOBALS['controllink']
)
->will(
$this->returnValue(array('col1'))
);
$this->assertTrue(
PMA_deleteColumnsFromList(array("col1"), false)
);
// when column does not exist in the central column list
$this->assertInstanceOf(
'PMA\libraries\Message', PMA_deleteColumnsFromList(array('column1'), false)
);
$this->assertInstanceOf(
'PMA\libraries\Message', PMA_deleteColumnsFromList(array('PMA_table'))
);
}
/**
* Test for PMA_makeConsistentWithList
*
* @return void
*/
public function testPMAMakeConsistentWithList()
{
$GLOBALS['dbi']->expects($this->any())
->method('fetchResult')
->will(
$this->returnValue($this->_columnData)
);
$GLOBALS['dbi']->expects($this->any())
->method('fetchValue')
->will(
$this->returnValue('PMA_table=CREATE table `PMA_table` (id integer)')
);
$this->assertTrue(
PMA_makeConsistentWithList("phpmyadmin", array('PMA_table'))
);
}
/**
* Test for PMA_getCentralColumnsFromTable
*
* @return void
*/
public function testPMAGetCentralColumnsFromTable()
{
$db = 'PMA_db';
$table = 'PMA_table';
$GLOBALS['dbi']->expects($this->once())
->method('fetchResult')
->with(
"SELECT col_name FROM `pma_central_columns` "
. "WHERE db_name = 'PMA_db' AND col_name IN ('id','col1','col2');",
null, null, $GLOBALS['controllink']
)
->will(
$this->returnValue(array('id','col1'))
);
$this->assertEquals(
array("id", "col1"),
PMA_getCentralColumnsFromTable($db, $table)
);
}
/**
* Test for PMA_getCentralColumnsFromTable with $allFields = true
*
* @return void
*/
public function testPMAGetCentralColumnsFromTableWithAllFields()
{
$db = 'PMA_db';
$table = 'PMA_table';
$GLOBALS['dbi']->expects($this->once())
->method('fetchResult')
->with(
"SELECT * FROM `pma_central_columns` "
. "WHERE db_name = 'PMA_db' AND col_name IN ('id','col1','col2');",
null, null, $GLOBALS['controllink']
)
->will(
$this->returnValue(array_slice($this->_columnData, 0, 2))
);
$this->assertEquals(
array_slice($this->_modifiedColumnData, 0, 2),
PMA_getCentralColumnsFromTable($db, $table, true)
);
}
/**
* Test for PMA_updateOneColumn
*
* @return void
*/
public function testPMAUpdateOneColumn()
{
$this->assertTrue(
PMA_updateOneColumn(
"phpmyadmin", "", "", "", "", "", "", "", "", ""
)
);
$this->assertTrue(
PMA_updateOneColumn(
"phpmyadmin", "col1", "", "", "", "", "", "", "", ""
)
);
}
/**
* Test for PMA_updateMultipleColumn
*
* @return void
*/
public function testPMAUpdateMultipleColumn()
{
$_POST['db'] = 'phpmyadmin';
$_POST['orig_col_name'] = array("col1","col2");
$_POST['field_name'] = array("col1","col2");
$_POST['field_default_type'] = array("","");
$_POST['col_extra'] = array("","");
$_POST['field_length'] = array("","");
$_POST['field_attribute'] = array("","");
$_POST['field_type'] = array("","");
$_POST['field_collation'] = array("","");
$this->assertTrue(
PMA_updateMultipleColumn()
);
}
/**
* Test for PMA_getHTMLforEditingPage
*
* @return void
*/
public function testPMAGetHTMLforEditingPage()
{
$GLOBALS['dbi']->expects($this->any())
->method('fetchResult')
->with(
"SELECT * FROM `pma_central_columns` "
. "WHERE db_name = 'phpmyadmin' AND col_name IN ('col1','col2');",
null, null, $GLOBALS['controllink']
)
->will(
$this->returnValue($this->_columnData)
);
$result = PMA_getHTMLforEditingPage(
array("col1", "col2"), 'phpmyadmin'
);
$this->assertContains(
'<form',
$result
);
$header_cells = array(
__('Name'), __('Type'), __('Length/Values'), __('Default'),
__('Collation'), __('Attributes'), __('Null'), __('A_I')
);
$this->assertContains(
PMA_getCentralColumnsEditTableHeader($header_cells), $result
);
$list_detail_cols = PMA_findExistingColNames(
'phpmyadmin', "'col1','col2'", true
);
$this->assertContains(
PMA_getHTMLforCentralColumnsEditTableRow(
$list_detail_cols[0], false, 0
), $result
);
$this->assertContains(
PMA_getCentralColumnsEditTableFooter(), $result
);
}
/**
* Test for PMA_getHTMLforTableNavigation
*
* @return void
*/
public function testPMAGetHTMLforTableNavigation()
{
$result = PMA_getHTMLforTableNavigation(0, 0, 'phpmyadmin');
$this->assertContains(
'<table',
$result
);
$this->assertContains(
__('Search this table'),
$result
);
$result_1 = PMA_getHTMLforTableNavigation(25, 10, 'phpmyadmin');
$this->assertContains(
'<form action="db_central_columns.php" method="post">'
. PMA_URL_getHiddenInputs(
'phpmyadmin'
),
$result_1
);
$this->assertContains(
'<input type="submit" name="navig"'
. ' class="ajax" '
. 'value="&lt" />',
$result_1
);
$this->assertContains(
PMA\libraries\Util::pageselector(
'pos', 10, 2, 3
),
$result_1
);
$this->assertContains(
'<input type="submit" name="navig"'
. ' class="ajax" '
. 'value="&gt" />',
$result_1
);
}
/**
* Test for PMA_getCentralColumnsTableHeader
*
* @return void
*/
public function testPMAGetCentralColumnsTableHeader()
{
$this->assertContains(
'<thead',
PMA_getCentralColumnsTableHeader(
'column_heading', __('Click to sort'), 2
)
);
}
/**
* Test for PMA_getCentralColumnsListRaw
*
* @return void
*/
public function testPMAGetCentralColumnsListRaw()
{
$GLOBALS['dbi']->expects($this->once())
->method('fetchResult')
->with(
"SELECT * FROM `pma_central_columns` "
. "WHERE db_name = 'phpmyadmin';",
null, null, $GLOBALS['controllink']
)
->will(
$this->returnValue($this->_columnData)
);
$this->assertEquals(
json_encode($this->_modifiedColumnData),
PMA_getCentralColumnsListRaw('phpmyadmin', '')
);
}
/**
* Test for PMA_getCentralColumnsListRaw with a table name
*
* @return void
*/
public function testPMAGetCentralColumnsListRawWithTable()
{
$GLOBALS['dbi']->expects($this->once())
->method('fetchResult')
->with(
"SELECT * FROM `pma_central_columns` "
. "WHERE db_name = 'phpmyadmin' AND col_name "
. "NOT IN ('id','col1','col2');",
null, null, $GLOBALS['controllink']
)
->will(
$this->returnValue($this->_columnData)
);
$this->assertEquals(
json_encode($this->_modifiedColumnData),
PMA_getCentralColumnsListRaw('phpmyadmin', 'table1')
);
}
/**
* Test for PMA_getHTMLforAddNewColumn
*
* @return void
*/
public function testPMAGetHTMLforAddNewColumn()
{
$result = PMA_getHTMLforAddNewColumn('phpmyadmin');
$this->assertContains(
'<form',
$result
);
$this->assertContains(
'<table',
$result
);
$this->assertContains(
__('Add new column'),
$result
);
$this->assertContains(
PMA_URL_getHiddenInputs('phpmyadmin'),
$result
);
}
/**
* Test for PMA_configErrorMessage
*
* @return void
*/
public function testPMAConfigErrorMessage()
{
$this->assertInstanceOf(
'PMA\libraries\Message',
PMA_configErrorMessage()
);
}
/**
* Test for PMA_findExistingColNames
*
* @return void
*/
public function testPMAFindExistingColNames()
{
$GLOBALS['dbi']->expects($this->once())
->method('fetchResult')
->with(
"SELECT * FROM `pma_central_columns` WHERE db_name = 'phpmyadmin'"
. " AND col_name IN ('col1');",
null, null, $GLOBALS['controllink']
)
->will(
$this->returnValue(array_slice($this->_columnData, 1, 1))
);
$this->assertEquals(
array_slice($this->_modifiedColumnData, 1, 1),
PMA_findExistingColNames('phpmyadmin', "'col1'", true)
);
}
/**
* Test for PMA_getHTMLforTableDropdown
*
* @return void
*/
public function testPMAGetHTMLforTableDropdown()
{
$db = 'PMA_db';
$result = PMA_getHTMLforTableDropdown($db);
$this->assertContains(
'<select name="table-select" id="table-select"',
$result
);
$this->assertContains(
'<option value="PMA_table"',
$result
);
}
/**
* Test for PMA_getHTMLforColumnDropdown
*
* @return void
*/
public function testPMAGetHTMLforColumnDropdown()
{
$db = 'PMA_db';
$selected_tbl = 'PMA_table';
$result = PMA_getHTMLforColumnDropdown($db, $selected_tbl);
$this->assertEquals(
'<option value="id">id</option><option value="col1">col1</option>'
. '<option value="col2">col2</option>',
$result
);
}
/**
* Test for PMA_getHTMLforAddCentralColumn
*
* @return void
*/
public function testPMAGetHTMLforAddCentralColumn()
{
$result = PMA_getHTMLforAddCentralColumn(20, 0, 'phpmyadmin');
$this->assertContains(
'<table',
$result
);
$this->assertContains(
'<form',
$result
);
$this->assertContains(
PMA_URL_getHiddenInputs('phpmyadmin')
. '<input type="hidden" name="add_column" value="add">'
. '<input type="hidden" name="pos" value="0" />'
. '<input type="hidden" name="total_rows" value="20"/>',
$result
);
}
/**
* Test for PMA_getCentralColumnsTableFooter
*
* @return void
*/
public function testPMAGetCentralColumnsTableFooter()
{
$pmaThemeImage = "pmaThemeImage";
$text_dir = "text_dir";
if (!defined("PMA_USR_BROWSER_AGENT")) {
define("PMA_USR_BROWSER_AGENT", "other");
}
$result = PMA_getCentralColumnsTableFooter($pmaThemeImage, $text_dir);
$this->assertContains(
'<input type="checkbox" id="tableslistcontainer_checkall" class="checkall_box"',
$result
);
$this->assertContains("With selected:", $result);
$this->assertContains(
'<button class="mult_submit change_central_columns"',
$result
);
}
}

View File

@ -0,0 +1,65 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for Charset Conversions
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
$cfg['RecodingEngine'] = null;
require_once 'libraries/charset_conversion.lib.php';
require_once 'libraries/iconv_wrapper.lib.php';
/**
* Tests for Charset Conversions
*
* @package PhpMyAdmin-test
*/
class PMA_Charset_Conversion_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_convertString
*
* @return void
* @test
*
* @group medium
*/
public function testCharsetConversion()
{
$this->assertEquals(
'test',
PMA_convertString('UTF-8', 'UTF-8', 'test')
);
// 6 represents an arbitrary value for testing the default case
$GLOBALS['PMA_recoding_engine'] = 6;
$this->assertEquals(
'test',
PMA_convertString('UTF-8', 'flat', 'test')
);
// TODO: remove function_exists if recode_string exists on server
if (@function_exists('recode_string')) {
$GLOBALS['PMA_recoding_engine'] = PMA_CHARSET_RECODE;
$this->assertEquals(
'Only That ecole & Can Be My Blame',
PMA_convertString(
'UTF-8', 'flat', 'Only That école & Can Be My Blame'
)
);
}
$GLOBALS['PMA_recoding_engine'] = PMA_CHARSET_ICONV;
$GLOBALS['cfg']['IconvExtraParams'] = '//TRANSLIT';
$this->assertEquals(
"This is the Euro symbol 'EUR'.",
PMA_convertString(
'UTF-8', 'ISO-8859-1', "This is the Euro symbol '€'."
)
);
}
}

View File

@ -0,0 +1,301 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for check_user_privileges.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
$GLOBALS['server'] = 1;
$GLOBALS['cfg']['Server']['DisableIS'] = false;
require_once 'libraries/Util.php';
require_once 'libraries/Tracker.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/check_user_privileges.lib.php';
/**
* tests for check_user_privileges.lib.php
*
* @package PhpMyAdmin-test
*/
class PMA_CheckUserPrivileges_Test extends PHPUnit_Framework_TestCase
{
/**
* prepares environment for tests
*
* @return void
*/
public function setUp()
{
$GLOBALS['col_priv'] = false;
$GLOBALS['db_priv'] = false;
$GLOBALS['proc_priv'] = false;
$GLOBALS['table_priv'] = false;
$GLOBALS['is_reload_priv'] = false;
}
public function testPMA_getItemsFromShowGrantsRow()
{
// TEST CASE 1
$show_grants_full_row = "GRANT ALL PRIVILEGES ON *.* "
. "TO 'root'@'localhost' WITH GRANT OPTION";
list(
$show_grants_str,
$show_grants_dbname,
$show_grants_tblname
) = PMA_getItemsFromShowGrantsRow(
$show_grants_full_row
);
$this->assertEquals(
"ALL PRIVILEGES",
$show_grants_str
);
$this->assertEquals(
"*",
$show_grants_dbname
);
$this->assertEquals(
"*",
$show_grants_tblname
);
// TEST CASE 2
$show_grants_full_row = "GRANT ALL PRIVILEGES ON `mysql`.* TO "
. "'root'@'localhost' WITH GRANT OPTION";
list(
$show_grants_str,
$show_grants_dbname,
$show_grants_tblname
) = PMA_getItemsFromShowGrantsRow(
$show_grants_full_row
);
$this->assertEquals(
"ALL PRIVILEGES",
$show_grants_str
);
$this->assertEquals(
"mysql",
$show_grants_dbname
);
$this->assertEquals(
"*",
$show_grants_tblname
);
// TEST CASE 3
$show_grants_full_row = "GRANT SELECT, INSERT, UPDATE, DELETE "
. "ON `mysql`.`columns_priv` TO 'root'@'localhost'";
list(
$show_grants_str,
$show_grants_dbname,
$show_grants_tblname
) = PMA_getItemsFromShowGrantsRow(
$show_grants_full_row
);
$this->assertEquals(
"SELECT, INSERT, UPDATE, DELETE",
$show_grants_str
);
$this->assertEquals(
"mysql",
$show_grants_dbname
);
$this->assertEquals(
"columns_priv",
$show_grants_tblname
);
}
/**
* Test for PMA_checkRequiredPrivilegesForAdjust
*
* @return void
*/
public function testPMA_checkRequiredPrivilegesForAdjust()
{
// TEST CASE 1
$show_grants_full_row = "GRANT ALL PRIVILEGES ON *.* "
. "TO 'root'@'localhost' WITH GRANT OPTION";
list(
$show_grants_str,
$show_grants_dbname,
$show_grants_tblname
) = PMA_getItemsFromShowGrantsRow(
$show_grants_full_row
);
// call the to-be-tested function
PMA_checkRequiredPrivilegesForAdjust(
$show_grants_str,
$show_grants_dbname,
$show_grants_tblname
);
$this->assertEquals(
true,
$GLOBALS['col_priv']
);
$this->assertEquals(
true,
$GLOBALS['db_priv']
);
$this->assertEquals(
true,
$GLOBALS['proc_priv']
);
$this->assertEquals(
true,
$GLOBALS['table_priv']
);
// re-initialise the privileges
$this->setUp();
// TEST CASE 2
$show_grants_full_row = "GRANT ALL PRIVILEGES ON `mysql`.* TO "
. "'root'@'localhost' WITH GRANT OPTION";
list(
$show_grants_str,
$show_grants_dbname,
$show_grants_tblname
) = PMA_getItemsFromShowGrantsRow(
$show_grants_full_row
);
// call the to-be-tested function
PMA_checkRequiredPrivilegesForAdjust(
$show_grants_str,
$show_grants_dbname,
$show_grants_tblname
);
$this->assertEquals(
true,
$GLOBALS['col_priv']
);
$this->assertEquals(
true,
$GLOBALS['db_priv']
);
$this->assertEquals(
true,
$GLOBALS['proc_priv']
);
$this->assertEquals(
true,
$GLOBALS['table_priv']
);
// re-initialise the privileges
$this->setUp();
// TEST CASE 3
$show_grants_full_row = "GRANT SELECT, INSERT, UPDATE, DELETE ON "
. "`mysql`.* TO 'root'@'localhost'";
list(
$show_grants_str,
$show_grants_dbname,
$show_grants_tblname
) = PMA_getItemsFromShowGrantsRow(
$show_grants_full_row
);
// call the to-be-tested function
PMA_checkRequiredPrivilegesForAdjust(
$show_grants_str,
$show_grants_dbname,
$show_grants_tblname
);
$this->assertEquals(
true,
$GLOBALS['col_priv']
);
$this->assertEquals(
true,
$GLOBALS['db_priv']
);
$this->assertEquals(
true,
$GLOBALS['proc_priv']
);
$this->assertEquals(
true,
$GLOBALS['table_priv']
);
// re-initialise the privileges
$this->setUp();
// TEST CASE 4
$show_grants_full_row = "GRANT SELECT, INSERT, UPDATE, DELETE ON "
. "`mysql`.`db` TO 'root'@'localhost'";
list(
$show_grants_str,
$show_grants_dbname,
$show_grants_tblname
) = PMA_getItemsFromShowGrantsRow(
$show_grants_full_row
);
// call the to-be-tested function
PMA_checkRequiredPrivilegesForAdjust(
$show_grants_str,
$show_grants_dbname,
$show_grants_tblname
);
$this->assertEquals(
false,
$GLOBALS['col_priv']
);
$this->assertEquals(
true,
$GLOBALS['db_priv']
);
$this->assertEquals(
false,
$GLOBALS['proc_priv']
);
$this->assertEquals(
false,
$GLOBALS['table_priv']
);
}
}

View File

@ -0,0 +1,84 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for Config Functions
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/config/config_functions.lib.php';
require_once 'libraries/sanitizing.lib.php';
/**
* Tests for Config Functions
*
* @package PhpMyAdmin-test
*/
class PMA_Config_Functions_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_lang
*
* @return void
* @test
*/
public function testPMALang()
{
$this->assertEquals(
"&lt;a attr='value'&gt;test&lt;/a&gt;",
PMA_lang("<a attr='value'>test</a>")
);
$GLOBALS["strConfiglangKeyFooBar"] = "<a attr='value'>[em]test[/em]</a>";
$this->assertEquals(
"&lt;a attr='value'&gt;<em>test</em>&lt;/a&gt;",
PMA_lang("langKeyFooBar")
);
$this->assertEquals(
"1988-08-01",
PMA_lang("%04d-%02d-%02d", "1988", "8", "1")
);
}
/**
* Test for PMA_langName
*
* @return void
* @test
*/
public function testLangName()
{
$canonicalPath = "Servers/1/2test";
$this->assertEquals(
"Servers_2test_name",
PMA_langName($canonicalPath)
);
$this->assertEquals(
"returnsDefault",
PMA_langName($canonicalPath, "name", "returnsDefault")
);
$GLOBALS["strConfigServers_2test_name"] = "<a>msg</a>";
$this->assertEquals(
"<a>msg</a>",
PMA_langName($canonicalPath)
);
$GLOBALS["strConfigServers_2test_desc"] = "<a>msg</a>";
$this->assertEquals(
"&lt;a&gt;msg&lt;/a&gt;",
PMA_langName($canonicalPath, "desc")
);
}
}

View File

@ -0,0 +1,223 @@
<?php
/**
* Tests for libraries/db_designer.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/db_designer.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/relation.lib.php';
require_once 'libraries/plugin_interface.lib.php';
/**
* Tests for libraries/db_designer.lib.php
*
* @package PhpMyAdmin-test
*/
class PMA_DesignerTest extends PHPUnit_Framework_TestCase
{
/**
* Setup for test cases
*
* @return void
*/
public function setup()
{
$GLOBALS['server'] = 1;
$GLOBALS['cfg']['ServerDefault'] = 1;
$GLOBALS['cfg']['PDFPageSizes'] = array('A3', 'A4');
$GLOBALS['cfg']['PDFDefaultPageSize'] = 'A4';
$GLOBALS['cfg']['Schema']['pdf_orientation'] = 'L';
$GLOBALS['cfg']['Schema']['pdf_paper'] = 'A4';
$_SESSION = array(
'relation' => array(
'1' => array(
'PMA_VERSION' => PMA_VERSION,
'db' => 'pmadb',
'pdf_pages' => 'pdf_pages',
'pdfwork' => true
)
),
' PMA_token ' => 'token'
);
}
/**
* Mocks database interaction for tests.
*
* @param string $db database name
*
* @return void
*/
private function _mockDatabaseInteraction($db)
{
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->once())
->method('tryQuery')
->with(
"SELECT `page_nr`, `page_descr` FROM `pmadb`.`pdf_pages`"
. " WHERE db_name = '" . $db . "' ORDER BY `page_descr`",
2,
PMA\libraries\DatabaseInterface::QUERY_STORE,
false
)
->will($this->returnValue('dummyRS'));
$dbi->expects($this->exactly(3))
->method('fetchAssoc')
->willReturnOnConsecutiveCalls(
array('page_nr' => '1', 'page_descr' => 'page1'),
array('page_nr' => '2', 'page_descr' => 'page2'),
false
);
$dbi->expects($this->any())
->method('escapeString')
->will($this->returnArgument(0));
$GLOBALS['dbi'] = $dbi;
}
/**
* Test for PMA_getPageIdsAndNames()
*
* @return void
*/
public function testGetPageIdsAndNames()
{
$db = 'db';
$this->_mockDatabaseInteraction($db);
$result = PMA_getPageIdsAndNames($db);
$this->assertEquals(
array(
'1' => 'page1',
'2' => 'page2'
),
$result
);
}
/**
* Test for PMA_getHtmlForEditOrDeletePages()
*
* @return void
*/
public function testGetHtmlForEditOrDeletePages()
{
$db = 'db';
$operation = 'edit';
$this->_mockDatabaseInteraction($db);
$result = PMA_getHtmlForEditOrDeletePages($db, $operation);
$this->assertContains(
'<input type="hidden" name="operation" value="' . $operation . '" />',
$result
);
$this->assertContains(
'<select name="selected_page" id="selected_page">',
$result
);
$this->assertContains('<option value="0">', $result);
$this->assertContains('<option value="1">', $result);
$this->assertContains('page1', $result);
$this->assertContains('<option value="2">', $result);
$this->assertContains('page2', $result);
}
/**
* Test for PMA_getHtmlForPageSaveAs()
*
* @return void
*/
public function testGetHtmlForPageSaveAs()
{
$db = 'db';
$this->_mockDatabaseInteraction($db);
$result = PMA_getHtmlForPageSaveAs($db);
$this->assertContains(
'<input type="hidden" name="operation" value="savePage" />',
$result
);
$this->assertContains(
'<select name="selected_page" id="selected_page">',
$result
);
$this->assertContains('<option value="0">', $result);
$this->assertContains('<option value="1">', $result);
$this->assertContains('page1', $result);
$this->assertContains('<option value="2">', $result);
$this->assertContains('page2', $result);
$this->assertContains(
'<input type="radio" name="save_page" id="save_page_same" value="same"'
. ' checked="checked" />',
$result
);
$this->assertContains(
'<input type="radio" name="save_page" id="save_page_new" value="new" />',
$result
);
$this->assertContains(
'<input type="text" name="selected_value" id="selected_value" />',
$result
);
}
/**
* Test for PMA_getHtmlForSchemaExport()
*
* @return void
*/
public function testGetHtmlForSchemaExport()
{
$db = 'db';
$page = 2;
$result = PMA_getHtmlForSchemaExport($db, $page);
// export type
$this->assertContains(
'<select id="plugins" name="export_type">',
$result
);
// hidden field
$this->assertContains(
'<input type="hidden" name="page_number" value="' . $page . '" />',
$result
);
// orientation
$this->assertContains(
'<select name="pdf_orientation" id="select_pdf_orientation">',
$result
);
$this->assertContains(
'<option value="L" selected="selected">Landscape</option>',
$result
);
$this->assertContains('<option value="P">Portrait</option>', $result);
// paper size
$this->assertContains(
'<select name="pdf_paper" id="select_pdf_paper">',
$result
);
$this->assertContains('<option value="A3">A3</option>', $result);
$this->assertContains(
'<option value="A4" selected="selected">A4</option>',
$result
);
}
}

View File

@ -0,0 +1,116 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for display_change_password.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/display_change_password.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/js_escape.lib.php';
require_once 'libraries/config.default.php';
/**
* class PMA_DisplayChangePassword_Test
*
* this class is for testing display_change_password.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_DisplayChangePassword_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for setUp
*
* @return void
*/
public function setUp()
{
//$GLOBALS
$GLOBALS['PMA_Config'] = new PMA\libraries\Config();
$GLOBALS['PMA_Config']->enableBc();
$GLOBALS['cfg']['MaxRows'] = 10;
$GLOBALS['cfg']['ServerDefault'] = "PMA_server";
$GLOBALS['cfg']['TableNavigationLinksMode'] = 'icons';
$GLOBALS['cfg']['LimitChars'] = 100;
$GLOBALS['cfg']['ActionLinksMode'] = 'icons';
$GLOBALS['cfg']['Server']['host'] = "localhost";
$GLOBALS['cfg']['Server']['user'] = "pma_user";
$GLOBALS['cfg']['ShowHint'] = true;
$GLOBALS['cfg']['ActionLinksMode'] = 'icons';
$GLOBALS['cfg']['Server']['DisableIS'] = false;
$GLOBALS['PMA_PHP_SELF'] = "server_privileges.php";
$GLOBALS['server'] = 0;
$GLOBALS['pmaThemeImage'] = 'image';
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
$_SESSION['relation'][$GLOBALS['server']] = "relation";
}
/**
* Test for PMA_getHtmlForChangePassword
*
* @return void
*/
public function testPMAGetHtmlForChangePassword()
{
$username = "pma_username";
$hostname = "pma_hostname";
//Call the test function
$html = PMA_getHtmlForChangePassword('change_pw', $username, $hostname);
//PMA_PHP_SELF
$this->assertContains(
$GLOBALS['PMA_PHP_SELF'],
$html
);
//PMA_URL_getHiddenInputs
$this->assertContains(
PMA_URL_getHiddenInputs(),
$html
);
//$username & $hostname
$this->assertContains(
htmlspecialchars($username),
$html
);
$this->assertContains(
htmlspecialchars($hostname),
$html
);
//labels
$this->assertContains(
__('Change password'),
$html
);
$this->assertContains(
__('No Password'),
$html
);
$this->assertContains(
__('Password:'),
$html
);
$this->assertContains(
__('Password:'),
$html
);
}
}

View File

@ -0,0 +1,107 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for display_create_table.lib.php
*
* @package PhpMyAdmin-test
*/
use PMA\libraries\Theme;
$GLOBALS['server'] = 0;
$GLOBALS['cfg']['Server']['DisableIS'] = false;
$GLOBALS['cfg']['DBG']['sql'] = false;
/*
* Include to test.
*/
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/display_create_table.lib.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/js_escape.lib.php';
/**
* class PMA_DisplayCreateTable_Test
*
* this class is for testing display_create_table.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_DisplayCreateTable_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for setUp
*
* @return void
*/
public function setUp()
{
//$GLOBALS
$GLOBALS['server'] = 0;
$GLOBALS['cfg']['MaxRows'] = 10;
$GLOBALS['cfg']['ServerDefault'] = "PMA_server";
$GLOBALS['cfg']['TableNavigationLinksMode'] = 'icons';
$GLOBALS['cfg']['LimitChars'] = 100;
$GLOBALS['cfg']['ActionLinksMode'] = 'icons';
$GLOBALS['cfg']['Server']['host'] = "localhost";
$GLOBALS['cfg']['Server']['user'] = "pma_user";
$GLOBALS['cfg']['ShowHint'] = true;
$GLOBALS['cfg']['ActionLinksMode'] = 'icons';
$GLOBALS['PMA_PHP_SELF'] = "server_privileges.php";
$GLOBALS['pmaThemeImage'] = 'image';
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
$_SESSION['relation'][$GLOBALS['server']] = "relation";
}
/**
* Test for PMA_getHtmlForCreateTable
*
* @return void
*/
public function testPMAGetHtmlForCreateTable()
{
$db = "pma_db";
//Call the test function
$html = PMA_getHtmlForCreateTable($db);
//getImage
$this->assertContains(
PMA\libraries\Util::getImage('b_table_add.png'),
$html
);
//__('Create table')
$this->assertContains(
__('Create table'),
$html
);
//PMA_URL_getHiddenInputs
$this->assertContains(
PMA_URL_getHiddenInputs($db),
$html
);
//label
$this->assertContains(
__('Name'),
$html
);
$this->assertContains(
__('Number of columns'),
$html
);
//button
$this->assertContains(
__('Go'),
$html
);
}
}

View File

@ -0,0 +1,338 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for display_export.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/display_export.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/charset_conversion.lib.php';
require_once 'libraries/plugin_interface.lib.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/js_escape.lib.php';
require_once 'libraries/relation.lib.php';
/**
* class PMA_DisplayExport_Test
*
* this class is for testing display_export.lib.php functions
*
* @package PhpMyAdmin-test
* @group large
*/
class PMA_DisplayExport_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for setUp
*
* @return void
*/
public function setUp()
{
//$GLOBALS
$GLOBALS['cfg']['MaxRows'] = 10;
$GLOBALS['cfg']['ExecTimeLimit'] = 300;
$GLOBALS['cfg']['ServerDefault'] = "PMA_server";
$GLOBALS['cfg']['TableNavigationLinksMode'] = 'icons';
$GLOBALS['cfg']['LimitChars'] = 100;
$GLOBALS['cfg']['ActionLinksMode'] = 'icons';
$GLOBALS['cfg']['Server']['host'] = "localhost";
$GLOBALS['cfg']['Server']['user'] = "pma_user";
$GLOBALS['cfg']['ShowHint'] = true;
$GLOBALS['cfg']['ActionLinksMode'] = 'icons';
$GLOBALS['cfg']['ZipDump'] = true;
$GLOBALS['cfg']['GZipDump'] = false;
$GLOBALS['cfg']['BZipDump'] = false;
$GLOBALS['cfg']['Export']['asfile'] = true;
$GLOBALS['cfg']['Export']['file_template_server'] = "file_template_server";
$GLOBALS['PMA_PHP_SELF'] = PMA_getenv('PHP_SELF');
$GLOBALS['PMA_recoding_engine'] = "InnerDB";
$GLOBALS['server'] = 0;
$GLOBALS['table'] = "table";
$GLOBALS['pmaThemeImage'] = 'image';
$GLOBALS['db'] = "PMA";
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
$_SESSION['relation'][$GLOBALS['server']] = "";
$pmaconfig = $this->getMockBuilder('PMA\libraries\Config')
->disableOriginalConstructor()
->getMock();
$pmaconfig->expects($this->any())
->method('getUserValue')
->will($this->returnValue('user value for test'));
$GLOBALS['PMA_Config'] = $pmaconfig;
}
/**
* Test for PMA_getHtmlForHiddenInput
*
* @return void
*/
public function testPMAGetHtmlForHiddenInput()
{
$export_type = "server";
$db = "PMA";
$table = "PMA_test";
$single_table_str = "PMA_single_str";
$sql_query_str = "sql_query_str";
//Call the test function
$html = PMA_getHtmlForHiddenInput(
$export_type,
$db,
$table,
$single_table_str,
$sql_query_str
);
//validate 1: PMA_URL_getHiddenInputs
//$single_table
$this->assertContains(
'<input type="hidden" name="single_table" value="TRUE"',
$html
);
//$export_type
$this->assertContains(
'<input type="hidden" name="export_type" value="server"',
$html
);
$this->assertContains(
'<input type="hidden" name="export_method" value="quick"',
$html
);
}
/**
* Test for PMA_getHtmlForExportOptions
*
* @return void
*/
public function testPMAGetHtmlForExportOptions()
{
global $cfg;
$cfg['Export']['method'] = "XML";
$cfg['SaveDir'] = "/tmp";
$export_type = "server";
$db = "PMA";
$table = "PMA_test";
$multi_values_str = "multi_values_str";
$num_tables_str = "10";
$unlim_num_rows_str = "unlim_num_rows_str";
$single_table = "single_table";
$GLOBALS['dbi']->cacheTableContent(array($db, $table, 'ENGINE'), 'MERGE');
$columns_info = array(
'test_column1' => array(
'COLUMN_NAME' => 'test_column1'
),
'test_column2' => array(
'COLUMN_NAME' => 'test_column2'
)
);
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->any())->method('getColumnsFull')
->will($this->returnValue($columns_info));
$GLOBALS['dbi'] = $dbi;
/* Scan for plugins */
$export_list = PMA_getPlugins(
"export",
'libraries/plugins/export/',
array(
'export_type' => $export_type,
'single_table' => isset($single_table)
)
);
//Call the test function
$html = PMA_getHtmlForExportOptions(
$export_type,
$db,
$table,
$multi_values_str,
$num_tables_str,
$export_list,
$unlim_num_rows_str
);
//validate 2: PMA_getHtmlForExportOptionsMethod
$this->assertContains(
$cfg['Export']['method'],
$html
);
$this->assertContains(
'<div class="exportoptions" id="quick_or_custom">',
$html
);
$this->assertContains(
__('Export method:'),
$html
);
$this->assertContains(
__('Custom - display all possible options'),
$html
);
//validate 3: PMA_getHtmlForExportOptionsSelection
$this->assertContains(
'<div class="exportoptions" id="databases_and_tables">',
$html
);
$this->assertContains(
'<h3>' . __('Databases:') . '</h3>',
$html
);
$this->assertContains(
$multi_values_str,
$html
);
//validate 4: PMA_getHtmlForExportOptionsQuickExport
$this->assertContains(
'<input type="checkbox" name="onserver" value="saveit" ',
$html
);
$dir = htmlspecialchars(PMA\libraries\Util::userDir($cfg['SaveDir']));
$this->assertContains(
'Save on server in the directory <b>' . $dir . '</b>',
$html
);
//validate 5: PMA_getHtmlForAliasModalDialog
$this->assertContains(
'<div id="alias_modal" class="hide" title="'
. 'Rename exported databases/tables/columns">',
$html
);
$this->assertContains(
'Select database',
$html
);
$this->assertContains(
'Select table',
$html
);
$this->assertContains(
'New database name',
$html
);
$this->assertContains(
'New table name',
$html
);
$this->assertContains(
'test_column',
$html
);
//validate 6: PMA_getHtmlForExportOptionsOutput
$this->assertContains(
'<div class="exportoptions" id="output">',
$html
);
$this->assertContains(
'user value for test',
$html
);
//validate 7: PMA_getHtmlForExportOptionsFormat
$this->assertContains(
'<div class="exportoptions" id="format">',
$html
);
$this->assertContains(
'<h3>' . __('Format:') . '</h3>',
$html
);
}
/**
* Test for PMA_getHtmlForAliasModalDialog
*
* @return void
*/
public function testPMAGetHtmlForAliasModalDialog()
{
$columns_info = array(
'test\'_db' => array(
'test_<b>table' => array(
'co"l1' => array(
'COLUMN_NAME' => 'co"l1'
),
'col<2' => array(
'COLUMN_NAME' => 'col<2'
)
)
)
);
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->any())->method('getColumnsFull')
->will($this->returnValue($columns_info));
$GLOBALS['dbi'] = $dbi;
$html = PMA_getHtmlForAliasModalDialog();
$this->assertContains(
'<div id="alias_modal" class="hide" title="'
. 'Rename exported databases/tables/columns">',
$html
);
$this->assertContains(
'test\'_db',
$html
);
$this->assertContains(
'test_&lt;b&gt;table',
$html
);
$this->assertContains(
'col&lt;2',
$html
);
$this->assertContains(
'co&quot;l1',
$html
);
$this->assertContains(
'<hr/>',
$html
);
$name_attr = 'aliases[test\'_db][tables][test_&lt;b&gt;table][alias]';
$id_attr = mb_substr(md5($name_attr), 0, 12);
$this->assertContains(
'<input type="text" value="" name="' . $name_attr . '" '
. 'id="' . $id_attr . '" placeholder="'
. 'test_&lt;b&gt;table alias" class="" disabled="disabled"/>',
$html
);
}
}

View File

@ -0,0 +1,54 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for javascript escaping.
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/js_escape.lib.php';
/**
* Test for javascript escaping.
*
* @package PhpMyAdmin-test
*/
class PMA_EscapeJsString_Test extends PHPUnit_Framework_TestCase
{
/**
* PMA_escapeJsString tests
*
* @param string $target expected output
* @param string $source string to be escaped
*
* @return void
* @dataProvider escapeDataProvider
*/
public function testEscape($target, $source)
{
$this->assertEquals($target, PMA_escapeJsString($source));
}
/**
* Data provider for testEscape
*
* @return array data for testEscape test case
*/
public function escapeDataProvider()
{
return array(
array('\\\';', '\';'),
array('\r\n\\\'<scrIpt></\' + \'script>', "\r\n'<scrIpt></sCRIPT>"),
array('\\\';[XSS]', '\';[XSS]'),
array(
'</\' + \'script></head><body>[HTML]',
'</SCRIPT></head><body>[HTML]'
),
array('\"\\\'\\\\\\\'\"', '"\'\\\'"'),
array("\\\\\'\'\'\'\'\'\'\'\'\'\'\'\\\\", "\\''''''''''''\\")
);
}
}

View File

@ -0,0 +1,110 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for export.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/export.lib.php';
/**
* class PMA_Export_Test
*
* this class is for testing export.lib.php functions
*
* @package PhpMyAdmin-test
* @group large
*/
class PMA_Export_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for setUp
*
* @return void
*/
public function setUp()
{
}
/**
* Test for PMA_mergeAliases
*
* @return void
*/
public function testPMAMergeAliases()
{
$aliases1 = array(
'test_db' => array(
'alias' => 'aliastest',
'tables' => array(
'foo' => array(
'alias' => 'foobar',
'columns' => array(
'bar' => 'foo',
'baz' => 'barbaz'
)
),
'bar' => array(
'alias' => 'foobaz',
'columns' => array(
'a' => 'a_alias',
'b' => 'b'
)
)
)
)
);
$aliases2 = array(
'test_db' => array(
'alias' => 'test',
'tables' => array(
'foo' => array(
'columns' => array(
'bar' => 'foobar'
)
),
'baz' => array(
'columns' => array(
'a' => 'x'
)
)
)
)
);
$expected = array(
'test_db' => array(
'alias' => 'test',
'tables' => array(
'foo' => array(
'alias' => 'foobar',
'columns' => array(
'bar' => 'foobar',
'baz' => 'barbaz'
)
),
'bar' => array(
'alias' => 'foobaz',
'columns' => array(
'a' => 'a_alias',
'b' => 'b'
)
),
'baz' => array(
'columns' => array(
'a' => 'x'
)
)
)
)
);
$actual = PMA_mergeAliases($aliases1, $aliases2);
$this->assertEquals($expected, $actual);
}
}

View File

@ -0,0 +1,130 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for PMA_URL_getCommon()
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/url_generating.lib.php';
/**
* tests for PMA_URL_getCommon()
*
* @package PhpMyAdmin-test
*/
class PMA_GenerateCommonURL_Test extends PHPUnit_Framework_TestCase
{
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*
* @access protected
* @return void
*/
public function setUp()
{
unset($_COOKIE['pma_lang'], $_COOKIE['pma_collation_connection']);
}
/**
* Test for PMA_URL_getCommon for DB only
*
* @return void
*/
public function testDbOnly()
{
$GLOBALS['server'] = 'x';
$GLOBALS['collation_connection'] = 'x';
$GLOBALS['cfg']['ServerDefault'] = 'y';
$separator = PMA_URL_getArgSeparator();
$expected = 'server=x' . htmlentities($separator)
. 'lang=en' . htmlentities($separator)
. 'collation_connection=x' . htmlentities($separator)
. 'token=token'
;
$expected = '?db=db'
. htmlentities($separator) . $expected;
$this->assertEquals($expected, PMA_URL_getCommon(array('db' => 'db')));
}
/**
* Test for PMA_URL_getCommon with new style
*
* @return void
*/
public function testNewStyle()
{
$GLOBALS['server'] = 'x';
$GLOBALS['collation_connection'] = 'x';
$GLOBALS['cfg']['ServerDefault'] = 'y';
$separator = PMA_URL_getArgSeparator();
$expected = 'server=x' . htmlentities($separator)
. 'lang=en' . htmlentities($separator)
. 'collation_connection=x' . htmlentities($separator)
. 'token=token'
;
$expected = '?db=db'
. htmlentities($separator) . 'table=table'
. htmlentities($separator) . $expected;
$params = array('db' => 'db', 'table' => 'table');
$this->assertEquals($expected, PMA_URL_getCommon($params));
}
/**
* Test for PMA_URL_getCommon with alternate divider
*
* @return void
*/
public function testWithAlternateDivider()
{
$GLOBALS['server'] = 'x';
$GLOBALS['collation_connection'] = 'x';
$GLOBALS['cfg']['ServerDefault'] = 'y';
$separator = PMA_URL_getArgSeparator();
$expected = 'server=x' . $separator
. 'lang=en' . $separator
. 'collation_connection=x' . $separator
. 'token=token'
;
$expected = '#ABC#db=db' . $separator . 'table=table' . $separator
. $expected;
$this->assertEquals(
$expected,
PMA_URL_getCommon(
array('db' => 'db', 'table' => 'table'), 'text', '#ABC#'
)
);
}
/**
* Test for PMA_URL_getCommon
*
* @return void
*/
public function testDefault()
{
$GLOBALS['server'] = 'x';
$GLOBALS['collation_connection'] = 'x';
$GLOBALS['cfg']['ServerDefault'] = 'y';
$separator = PMA_URL_getArgSeparator();
$expected = '?server=x' . htmlentities($separator)
. 'lang=en' . htmlentities($separator)
. 'collation_connection=x' . htmlentities($separator)
. 'token=token'
;
$this->assertEquals($expected, PMA_URL_getCommon());
}
}

View File

@ -0,0 +1,71 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for Charset Conversions for IBM AIX compliant codes
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/iconv_wrapper.lib.php';
/**
* Tests for Charset Conversions for IBM AIX compliant codes
*
* @package PhpMyAdmin-test
*/
class PMA_Iconv_Wrapper_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_convertAIXMapCharsets
*
* @param string $in_charset Non IBM-AIX-Compliant in-charset
* @param string $out_charset Non IBM-AIX-Compliant out-charset
* @param string $in_charset_mapped IBM-AIX-Compliant in-charset
* @param string $out_charset_mapped IBM-AIX-Compliant out-charset
*
* @return void
* @test
* @dataProvider iconvDataProvider
*/
public function testIconvMapCharsets($in_charset, $out_charset,
$in_charset_mapped, $out_charset_mapped
) {
$this->assertEquals(
array($in_charset_mapped, $out_charset_mapped),
PMA_convertAIXMapCharsets($in_charset, $out_charset)
);
}
/**
* Data provider for testIconvMapCharsets
*
* @return array data for testIconvMapCharsets test case
*/
public function iconvDataProvider()
{
return array(
array(
'UTF-8',
'ISO-8859-1//IGNORE',
'UTF-8',
'ISO-8859-1//IGNORE'
),
array(
'UTF-8',
'ISO-8859-1//TRANSLIT',
'UTF-8',
'ISO8859-1'
),
array('UTF-8',
'ISO-8859-9',
'UTF-8',
'ISO8859-9'
)
);
}
}

View File

@ -0,0 +1,487 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA_checkTimeout()
* from libraries/import.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
/*
* we must set $GLOBALS['server'] here
* since 'check_user_privileges.lib.php' will use it globally
*/
$GLOBALS['server'] = 0;
/*
* Include to test.
*/
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/import.lib.php';
require_once 'libraries/url_generating.lib.php';
/**
* Tests for import functions
*
* @package PhpMyAdmin-test
*/
class PMA_Import_Test extends PHPUnit_Framework_TestCase
{
/**
* Prepares environment for the test.
*
* @return void
*/
public function setUp()
{
$GLOBALS['cfg']['ServerDefault'] = '';
}
/**
* Test for PMA_checkTimeout
*
* @return void
*/
function testCheckTimeout()
{
global $timestamp, $maximum_time, $timeout_passed;
//Reinit values.
$timestamp = time();
$maximum_time = 0;
$timeout_passed = false;
$this->assertFalse(PMA_checkTimeout());
//Reinit values.
$timestamp = time();
$maximum_time = 0;
$timeout_passed = true;
$this->assertFalse(PMA_checkTimeout());
//Reinit values.
$timestamp = time();
$maximum_time = 30;
$timeout_passed = true;
$this->assertTrue(PMA_checkTimeout());
//Reinit values.
$timestamp = time()-15;
$maximum_time = 30;
$timeout_passed = false;
$this->assertFalse(PMA_checkTimeout());
//Reinit values.
$timestamp = time()-60;
$maximum_time = 30;
$timeout_passed = false;
$this->assertTrue(PMA_checkTimeout());
}
/**
* Test for PMA_lookForUse
*
* @return void
*/
function testLookForUse()
{
$this->assertEquals(
array(null, null),
PMA_lookForUse(null, null, null)
);
$this->assertEquals(
array('myDb', null),
PMA_lookForUse(null, 'myDb', null)
);
$this->assertEquals(
array('myDb', true),
PMA_lookForUse(null, 'myDb', true)
);
$this->assertEquals(
array('myDb', true),
PMA_lookForUse('select 1 from myTable', 'myDb', true)
);
$this->assertEquals(
array('anotherDb', true),
PMA_lookForUse('use anotherDb', 'myDb', false)
);
$this->assertEquals(
array('anotherDb', true),
PMA_lookForUse('use anotherDb', 'myDb', true)
);
$this->assertEquals(
array('anotherDb', true),
PMA_lookForUse('use `anotherDb`;', 'myDb', true)
);
}
/**
* Test for PMA_getColumnAlphaName
*
* @param string $expected Expected result of the function
* @param int $num The column number
*
* @return void
*
* @dataProvider provGetColumnAlphaName
*/
function testGetColumnAlphaName($expected, $num)
{
$this->assertEquals($expected, PMA_getColumnAlphaName($num));
}
/**
* Data provider for testGetColumnAlphaName
*
* @return array
*/
function provGetColumnAlphaName()
{
return array(
array('A', 1),
array('Z', 0),
array('AA', 27),
array('AZ', 52),
array('BA', 53),
array('BB', 54),
);
}
/**
* Test for PMA_getColumnNumberFromName
*
* @param int $expected Expected result of the function
* @param string|null $name column name(i.e. "A", or "BC", etc.)
*
* @return void
*
* @dataProvider provGetColumnNumberFromName
*/
function testGetColumnNumberFromName($expected, $name)
{
$this->assertEquals($expected, PMA_getColumnNumberFromName($name));
}
/**
* Data provider for testGetColumnNumberFromName
*
* @return array
*/
function provGetColumnNumberFromName()
{
return array(
array(1, 'A'),
array(26, 'Z'),
array(27, 'AA'),
array(52, 'AZ'),
array(53, 'BA'),
array(54, 'BB'),
);
}
/**
* Test for PMA_getDecimalPrecision
*
* @param int $expected Expected result of the function
* @param string|null $size Size of field
*
* @return void
*
* @dataProvider provGetDecimalPrecision
*/
function testGetDecimalPrecision($expected, $size)
{
$this->assertEquals($expected, PMA_getDecimalPrecision($size));
}
/**
* Data provider for testGetDecimalPrecision
*
* @return array
*/
function provGetDecimalPrecision()
{
return array(
array(2, '2,1'),
array(6, '6,2'),
array(6, '6,0'),
array(16, '16,2'),
);
}
/**
* Test for PMA_getDecimalScale
*
* @param int $expected Expected result of the function
* @param string|null $size Size of field
*
* @return void
*
* @dataProvider provGetDecimalScale
*/
function testGetDecimalScale($expected, $size)
{
$this->assertEquals($expected, PMA_getDecimalScale($size));
}
/**
* Data provider for testGetDecimalScale
*
* @return array
*/
function provGetDecimalScale()
{
return array(
array(1, '2,1'),
array(2, '6,2'),
array(0, '6,0'),
array(20, '30,20'),
);
}
/**
* Test for PMA_getDecimalSize
*
* @param array $expected Expected result of the function
* @param string|null $cell Cell content
*
* @return void
*
* @dataProvider provGetDecimalSize
*/
function testGetDecimalSize($expected, $cell)
{
$this->assertEquals($expected, PMA_getDecimalSize($cell));
}
/**
* Data provider for testGetDecimalSize
*
* @return array
*/
function provGetDecimalSize()
{
return array(
array(array(2, 1, '2,1'), '2.1'),
array(array(2, 1, '2,1'), '6.2'),
array(array(3, 1, '3,1'), '10.0'),
array(array(4, 2, '4,2'), '30.20'),
);
}
/**
* Test for PMA_detectType
*
* @param int $expected Expected result of the function
* @param int|null $type Last cumulative column type (VARCHAR or INT or
* BIGINT or DECIMAL or NONE)
* @param string|null $cell String representation of the cell for which a
* best-fit type is to be determined
*
* @return void
*
* @dataProvider provDetectType
*/
function testDetectType($expected, $type, $cell)
{
$this->assertEquals($expected, PMA_detectType($type, $cell));
}
/**
* Data provider for testDetectType
*
* @return array
*/
function provDetectType()
{
return array(
array(NONE, null, 'NULL'),
array(NONE, NONE, 'NULL'),
array(INT, INT, 'NULL'),
array(VARCHAR, VARCHAR, 'NULL'),
array(VARCHAR, null, null),
array(VARCHAR, INT, null),
array(INT, INT, '10'),
array(DECIMAL, DECIMAL, '10.2'),
array(DECIMAL, INT, '10.2'),
array(BIGINT, BIGINT, '2147483648'),
array(BIGINT, INT, '2147483648'),
array(VARCHAR, VARCHAR, 'test'),
array(VARCHAR, INT, 'test'),
);
}
/**
* Test for PMA_getMatchedRows.
*
* @return void
*/
function testPMAGetMatchedRows()
{
$GLOBALS['db'] = 'PMA';
//mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$update_query = 'UPDATE `table_1` '
. 'SET `id` = 20 '
. 'WHERE `id` > 10';
$simulated_update_query = 'SELECT `id` FROM `table_1` WHERE `id` > 10 AND (`id` <> 20)';
$delete_query = 'DELETE FROM `table_1` '
. 'WHERE `id` > 10';
$simulated_delete_query = 'SELECT * FROM `table_1` WHERE `id` > 10';
$dbi->expects($this->any())
->method('numRows')
->with(array())
->will($this->returnValue(2));
$dbi->expects($this->any())
->method('selectDb')
->with('PMA')
->will($this->returnValue(true));
$dbi->expects($this->at(1))
->method('tryQuery')
->with($simulated_update_query)
->will($this->returnValue(array()));
$dbi->expects($this->at(4))
->method('tryQuery')
->with($simulated_delete_query)
->will($this->returnValue(array()));
$GLOBALS['dbi'] = $dbi;
$this->simulatedQueryTest($update_query, $simulated_update_query);
$this->simulatedQueryTest($delete_query, $simulated_delete_query);
}
/**
* Tests simulated UPDATE/DELETE query.
*
* @param string $sql_query SQL query
* @param string $simulated_query Simulated query
*
* @return void
*/
function simulatedQueryTest($sql_query, $simulated_query)
{
$parser = new SqlParser\Parser($sql_query);
$analyzed_sql_results = array(
'query' => $sql_query,
'parser' => $parser,
'statement' => $parser->statements[0],
);
$simulated_data = PMA_getMatchedRows($analyzed_sql_results);
// URL to matched rows.
$_url_params = array(
'db' => 'PMA',
'sql_query' => $simulated_query
);
$matched_rows_url = 'sql.php' . PMA_URL_getCommon($_url_params);
$this->assertEquals(
array(
'sql_query' => PMA\libraries\Util::formatSql(
$analyzed_sql_results['query']
),
'matched_rows' => 2,
'matched_rows_url' => $matched_rows_url
),
$simulated_data
);
}
/**
* Test for PMA_checkIfRollbackPossible
*
* @return void
*/
function testPMACheckIfRollbackPossible()
{
$GLOBALS['db'] = 'PMA';
//mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
// List of Transactional Engines.
$transactional_engines = array(
'INNODB',
'FALCON',
'NDB',
'INFINIDB',
'TOKUDB',
'XTRADB',
'SEQUENCE',
'BDB'
);
$check_query = 'SELECT `ENGINE` FROM `information_schema`.`tables` '
. 'WHERE `table_name` = "%s" '
. 'AND `table_schema` = "%s" '
. 'AND UPPER(`engine`) IN ("'
. implode('", "', $transactional_engines)
. '")';
$check_table_query = 'SELECT * FROM `%s`.`%s` '
. 'LIMIT 1';
$dbi->expects($this->at(0))
->method('tryQuery')
->with(sprintf($check_table_query, 'PMA', 'table_1'))
->will($this->returnValue(array('table')));
$dbi->expects($this->at(1))
->method('tryQuery')
->with(sprintf($check_query, 'table_1', 'PMA'))
->will($this->returnValue(true));
$dbi->expects($this->at(2))
->method('numRows')
->will($this->returnValue(1));
$dbi->expects($this->at(3))
->method('tryQuery')
->with(sprintf($check_table_query, 'PMA', 'table_2'))
->will($this->returnValue(array('table')));
$dbi->expects($this->at(4))
->method('tryQuery')
->with(sprintf($check_query, 'table_2', 'PMA'))
->will($this->returnValue(true));
$dbi->expects($this->at(5))
->method('numRows')
->will($this->returnValue(1));
$GLOBALS['dbi'] = $dbi;
$sql_query = 'UPDATE `table_1` AS t1, `table_2` t2 '
. 'SET `table_1`.`id` = `table_2`.`id` '
. 'WHERE 1';
$this->assertEquals(true, PMA_checkIfRollbackPossible($sql_query));
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,243 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for ip_allow_deny.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/ip_allow_deny.lib.php';
/**
* PMA_Ip_Allow_Deny_Test class
*
* this class is for testing ip_allow_deny.lib.php
*
* @package PhpMyAdmin-test
*/
class PMA_Ip_Allow_Deny_Test extends PHPUnit_Framework_TestCase
{
/**
* Prepares environment for the test.
*
* @return void
*/
public function setUp()
{
$GLOBALS['cfg']['Server']['user'] = "pma_username";
$GLOBALS['cfg']['Server']['AllowDeny']['rules'][]
= "allow % 255.255.255.0/4";
$GLOBALS['cfg']['Server']['AllowDeny']['rules'][]
= "allow % from 255.255.2.0/4";
$GLOBALS['cfg']['Server']['AllowDeny']['rules'][]
= "allow % from 2001:4998:c:a0d:0000:0000:4998:1020";
$GLOBALS['cfg']['Server']['AllowDeny']['rules'][]
= "allow % from 2001:4998:c:a0d:0000:0000:4998:[1001-2010]";
$GLOBALS['cfg']['Server']['AllowDeny']['rules'][]
= "allow % from 2001:4998:c:a0d:0000:0000:4998:3020/24";
$GLOBALS['cfg']['Server']['AllowDeny']['rules'][] = "deny % 255.255.0.0/8";
$GLOBALS['cfg']['Server']['AllowDeny']['rules'][]
= "deny % from 255.255.0.0/8";
include_once 'libraries/ip_allow_deny.lib.php';
}
/**
* Test for PMA_getIp
*
* @return void
*
* @dataProvider proxyIPs
*/
public function testGetIp($remote, $header, $expected, $proxyip = null)
{
unset($_SERVER['REMOTE_ADDR']);
unset($_SERVER['TEST_FORWARDED_HEADER']);
$GLOBALS['cfg']['TrustedProxies'] = array();
if (!is_null($remote)) {
$_SERVER['REMOTE_ADDR'] = $remote;
}
if (!is_null($header)) {
if (is_null($proxyip)) {
$proxyip = $remote;
}
$GLOBALS['cfg']['TrustedProxies'][$proxyip] = 'TEST_FORWARDED_HEADER';
$_SERVER['TEST_FORWARDED_HEADER'] = $header;
}
$this->assertEquals(
$expected,
PMA_getIp()
);
unset($_SERVER['REMOTE_ADDR']);
unset($_SERVER['TEST_FORWARDED_HEADER']);
$GLOBALS['cfg']['TrustedProxies'] = array();
}
/**
* Data provider for PMA_getIp tests
*
* @return array
*/
public function proxyIPs()
{
return array(
// Nothing set
array(null, null, false),
// Remote IP set
array('101.0.0.25', null, '101.0.0.25'),
// Proxy
array('101.0.0.25', '192.168.10.10', '192.168.10.10'),
// Several proxies
array('101.0.0.25', '192.168.10.1, 192.168.100.100', '192.168.10.1'),
// Invalid proxy
array('101.0.0.25', 'invalid', false),
// Direct IP with proxy enabled
array('101.0.0.25', '192.168.10.10', '101.0.0.25', '10.10.10.10'),
);
}
/**
* Test for PMA_ipMaskTest
*
* @return void
*/
public function testIpMaskTest()
{
//IPV4 testing
$testRange = "255.255.0.0/8";
$ipToTest = "10.0.0.0";
$this->assertEquals(
false,
PMA_ipMaskTest($testRange, $ipToTest)
);
$testRange = "255.255.0.0/4";
$ipToTest = "255.3.0.0";
$this->assertEquals(
true,
PMA_ipMaskTest($testRange, $ipToTest)
);
$testRange = "255.255.0.[0-10]";
$ipToTest = "255.3.0.3";
$this->assertEquals(
false,
PMA_ipMaskTest($testRange, $ipToTest)
);
$ipToTest = "255.3.0.12";
$this->assertEquals(
false,
PMA_ipMaskTest($testRange, $ipToTest)
);
//IPV6 testing
//not range
$ipToTest = "2001:4998:c:a0d:0000:0000:4998:1020";
$testRange = "2001:4998:c:a0d:0000:0000:4998:1020";
$this->assertEquals(
true,
PMA_ipMaskTest($testRange, $ipToTest)
);
$ipToTest = "2001:4998:c:a0d:0000:0000:4998:1020";
$testRange = "2001:4998:c:a0d:0000:0000:4998:2020";
$this->assertEquals(
false,
PMA_ipMaskTest($testRange, $ipToTest)
);
//range
$ipToTest = "2001:4998:c:a0d:0000:0000:4998:1020";
$testRange = "2001:4998:c:a0d:0000:0000:4998:[1001-2010]";
$this->assertEquals(
true,
PMA_ipMaskTest($testRange, $ipToTest)
);
$ipToTest = "2001:4998:c:a0d:0000:0000:4998:3020";
$testRange = "2001:4998:c:a0d:0000:0000:4998:[1001-2010]";
$this->assertEquals(
false,
PMA_ipMaskTest($testRange, $ipToTest)
);
//CDIR
$ipToTest = "2001:4998:c:a0d:0000:0000:4998:1020";
$testRange = "2001:4998:c:a0d:0000:0000:4998:[1001-2010]";
$this->assertEquals(
true,
PMA_ipMaskTest($testRange, $ipToTest)
);
$ipToTest = "2001:4998:c:a0d:0000:0000:4998:1000";
$testRange = "2001:4998:c:a0d:0000:0000:4998:3020/24";
$this->assertEquals(
false,
PMA_ipMaskTest($testRange, $ipToTest)
);
}
/**
* Test for PMA_allowDeny
*
* @return void
*/
public function testAllowDeny()
{
$_SERVER['REMOTE_ADDR'] = "";
$this->assertEquals(
false,
PMA_allowDeny("allow")
);
$_SERVER['REMOTE_ADDR'] = "255.0.1.0";
$this->assertEquals(
true,
PMA_allowDeny("allow")
);
$_SERVER['REMOTE_ADDR'] = "10.0.0.0";
$this->assertEquals(
false,
PMA_allowDeny("allow")
);
$_SERVER['REMOTE_ADDR'] = "255.255.0.1";
$this->assertEquals(
true,
PMA_allowDeny("deny")
);
$_SERVER['REMOTE_ADDR'] = "255.124.0.5";
$this->assertEquals(
true,
PMA_allowDeny("deny")
);
$_SERVER['REMOTE_ADDR'] = "122.124.0.5";
$this->assertEquals(
false,
PMA_allowDeny("deny")
);
//IPV6
$_SERVER['REMOTE_ADDR'] = "2001:4998:c:a0d:0000:0000:4998:1020";
$this->assertEquals(
true,
PMA_allowDeny("allow")
);
$_SERVER['REMOTE_ADDR'] = "2001:4998:c:a0d:0000:0000:4998:1000";
$this->assertEquals(
false,
PMA_allowDeny("allow")
);
$_SERVER['REMOTE_ADDR'] = "2001:4998:c:a0d:0000:0000:4998:1020";
$this->assertEquals(
true,
PMA_allowDeny("allow")
);
}
}

View File

@ -0,0 +1,75 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for JS variable formatting
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/js_escape.lib.php';
/**
* tests for JS variable formatting
*
* @package PhpMyAdmin-test
*/
class PMA_JS_Escape_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_getJsValue
*
* @param string $key Key
* @param string $value Value
* @param string $expected Expected output
*
* @dataProvider variables
*
* @return void
*/
public function testFormat($key, $value, $expected)
{
$this->assertEquals($expected, PMA_getJsValue($key, $value));
$this->assertEquals('foo = 100', PMA_getJsValue('foo', '100', false));
$array = array('1','2','3');
$this->assertEquals(
"foo = [\"1\",\"2\",\"3\",];\n",
PMA_getJsValue('foo', $array)
);
$this->assertEquals(
"foo = \"bar\\\"baz\";\n",
PMA_getJsValue('foo', 'bar"baz')
);
}
/**
* Test for PMA_jsFormat
*
* @return void
*/
public function testJsFormat()
{
$this->assertEquals("`foo`", PMA_jsFormat('foo'));
}
/**
* Provider for testFormat
*
* @return array
*/
public function variables()
{
return array(
array('foo', true, "foo = true;\n"),
array('foo', false, "foo = false;\n"),
array('foo', 100, "foo = 100;\n"),
array('foo', 0, "foo = 0;\n"),
array('foo', 'text', "foo = \"text\";\n"),
array('foo', 'quote"', "foo = \"quote\\\"\";\n"),
array('foo', 'apostroph\'', "foo = \"apostroph\\'\";\n"),
);
}
}

View File

@ -0,0 +1,169 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for Kanji Encoding Library
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/kanji-encoding.lib.php';
/**
* Tests for Kanji Encoding Library
*
* @package PhpMyAdmin-test
*/
class PMA_Kanji_Encoding_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_Kanji_checkEncoding
*
* @param string $encoding Encoding to set
* @param string $expected Expected encoding list
*
* @return void
* @test
* @dataProvider checkEncodingData
*/
public function testCheckEncoding($encoding, $expected)
{
mb_internal_encoding($encoding);
$this->assertTrue(PMA_Kanji_checkEncoding());
$this->assertEquals($expected, $GLOBALS['kanji_encoding_list']);
}
/**
* Data provider for testPMA_Kanji_checkEncoding
*
* @return array Test data
*/
public function checkEncodingData()
{
return array(
array('UTF-8', 'ASCII,SJIS,EUC-JP,JIS'),
array('EUC-JP', 'ASCII,EUC-JP,SJIS,JIS')
);
}
/**
* Test for PMA_Kanji_changeOrder
*
* @param string $kanji_test_list current list
* @param string $expected expected list
*
* @return void
* @test
* @dataProvider changeOrderData
*/
public function testChangeOrder($kanji_test_list, $expected)
{
$GLOBALS['kanji_encoding_list'] = $kanji_test_list;
$this->assertTrue(PMA_Kanji_changeOrder());
$this->assertEquals($expected, $GLOBALS['kanji_encoding_list']);
}
/**
* Data Provider for testPMA_Kanji_changeOrder
*
* @return array Test data
*/
public function changeOrderData()
{
return array(
array('ASCII,SJIS,EUC-JP,JIS', 'ASCII,EUC-JP,SJIS,JIS'),
array('ASCII,EUC-JP,SJIS,JIS', 'ASCII,SJIS,EUC-JP,JIS')
);
}
/**
* Test for PMA_Kanji_strConv
*
* @return void
* @test
*/
public function testStrConv()
{
$this->assertEquals(
'test',
PMA_Kanji_strConv('test', '', '')
);
$GLOBALS['kanji_encoding_list'] = 'ASCII,SJIS,EUC-JP,JIS';
$this->assertEquals(
'test è',
PMA_Kanji_strConv('test è', '', '')
);
$this->assertEquals(
mb_convert_encoding('test è', 'ASCII', 'SJIS'),
PMA_Kanji_strConv('test è', 'ASCII', '')
);
$this->assertEquals(
mb_convert_kana('全角', 'KV', 'SJIS'),
PMA_Kanji_strConv('全角', '', 'kana')
);
}
/**
* Test for PMA_Kanji_fileConv
*
* @return void
* @test
*/
public function testFileConv()
{
$file_str = "教育漢字常用漢字";
$filename = 'test.kanji';
$file = fopen($filename, 'w');
fputs($file, $file_str);
fclose($file);
$GLOBALS['kanji_encoding_list'] = 'ASCII,EUC-JP,SJIS,JIS';
$result = PMA_Kanji_fileConv($filename, 'JIS', 'kana');
$string = file_get_contents($result);
PMA_Kanji_changeOrder();
$expected = PMA_Kanji_strConv($file_str, 'JIS', 'kana');
PMA_Kanji_changeOrder();
$this->assertEquals($string, $expected);
unlink($result);
}
/**
* Test for PMA_Kanji_encodingForm
*
* @return void
* @test
*/
public function testEncodingForm()
{
$actual = PMA_Kanji_encodingForm();
$this->assertContains(
'<input type="radio" name="knjenc"',
$actual
);
$this->assertContains(
'type="radio" name="knjenc"',
$actual
);
$this->assertContains(
'<input type="radio" name="knjenc" value="EUC-JP" id="kj-euc" />',
$actual
);
$this->assertContains(
'<input type="radio" name="knjenc" value="SJIS" id="kj-sjis" />',
$actual
);
$this->assertContains(
'<input type="checkbox" name="xkana" value="kana" id="kj-kana" />',
$actual
);
}
}

View File

@ -0,0 +1,66 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for mime.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/mime.lib.php';
/**
* Test for mime detection.
*
* @package PhpMyAdmin-test
*/
class PMA_MIME_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_detectMIME
*
* @param string $test MIME to test
* @param string $output Expected output
*
* @return void
* @dataProvider providerForTestDetectMIME
*/
public function testDetectMIME($test, $output)
{
$this->assertEquals(
PMA_detectMIME($test),
$output
);
}
/**
* Provider for testPMA_detectMIME
*
* @return array data for testPMA_detectMIME
*/
public function providerForTestDetectMIME()
{
return array(
array(
'pma',
'application/octet-stream'
),
array(
'GIF',
'image/gif'
),
array(
"\x89PNG",
'image/png'
),
array(
chr(0xff) . chr(0xd8),
'image/jpeg'
),
);
}
}

View File

@ -0,0 +1,368 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for mult_submits.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/mult_submits.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/js_escape.lib.php';
require_once 'libraries/relation_cleanup.lib.php';
require_once 'libraries/relation.lib.php';
require_once 'libraries/sql.lib.php';
/**
* class PMA_MultSubmits_Test
*
* this class is for testing mult_submits.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_MultSubmits_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for setUp
*
* @return void
*/
public function setUp()
{
//$GLOBALS
$GLOBALS['cfg']['MaxRows'] = 10;
$GLOBALS['cfg']['ServerDefault'] = "server";
$GLOBALS['cfg']['RememberSorting'] = true;
$GLOBALS['cfg']['SQP'] = array();
$GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] = 1000;
$GLOBALS['cfg']['ShowSQL'] = true;
$GLOBALS['cfg']['TableNavigationLinksMode'] = 'icons';
$GLOBALS['cfg']['LimitChars'] = 100;
$GLOBALS['cfg']['Server']['DisableIS'] = false;
$GLOBALS['server'] = 0;
$GLOBALS['cfg']['ActionLinksMode'] = "both";
$GLOBALS['pmaThemeImage'] = 'image';
//_SESSION
$_SESSION['relation'][$GLOBALS['server']] = array(
'PMA_VERSION' => PMA_VERSION,
'table_coords' => "table_name",
'displaywork' => 'displaywork',
'db' => "information_schema",
'table_info' => 'table_info',
'relwork' => 'relwork',
'commwork' => 'commwork',
'pdfwork' => 'pdfwork',
'column_info' => 'column_info',
'relation' => 'relation',
);
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
//Mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->any())
->method('query')
->will($this->returnValue(true));
$GLOBALS['dbi'] = $dbi;
}
/**
* Test for PMA_getHtmlForReplacePrefixTable
*
* @return void
*/
public function testPMAGetHtmlForReplacePrefixTable()
{
$action = 'delete_row';
$_url_params = array('url_query'=>'PMA_original_url_query');
//Call the test function
$html = PMA_getHtmlForReplacePrefixTable($action, $_url_params);
//form action
$this->assertContains(
'<form id="ajax_form" action="delete_row" method="post">',
$html
);
//$PMA_URL_getHiddenInputs
$this->assertContains(
PMA_URL_getHiddenInputs($_url_params),
$html
);
//from_prefix
$this->assertContains(
'<input type="text" name="from_prefix" id="initialPrefix" />',
$html
);
}
/**
* Test for PMA_getHtmlForAddPrefixTable
*
* @return void
*/
public function testPMAGetHtmlForAddPrefixTable()
{
$action = 'delete_row';
$_url_params = array('url_query'=>'PMA_original_url_query');
//Call the test function
$html = PMA_getHtmlForAddPrefixTable($action, $_url_params);
//form action
$this->assertContains(
'<form id="ajax_form" action="' . $action . '" method="post">',
$html
);
//$_url_params
$this->assertContains(
PMA_URL_getHiddenInputs($_url_params),
$html
);
//from_prefix
$this->assertContains(
__('Add prefix'),
$html
);
}
/**
* Test for PMA_getHtmlForOtherActions
*
* @return void
*/
public function testPMAGetHtmlForOtherActions()
{
$what = 'replace_prefix_tbl';
$action = 'delete_row';
$_url_params = array('url_query'=>'PMA_original_url_query');
$full_query = 'select column from PMA_table';
//Call the test function
$html = PMA_getHtmlForOtherActions(
$what, $action, $_url_params, $full_query
);
//validate 1: form action
$this->assertContains(
'<form action="' . $action . '" method="post">',
$html
);
//validate 2: $_url_params
$this->assertContains(
PMA_URL_getHiddenInputs($_url_params),
$html
);
//validate 3: conform
$this->assertContains(
__('Do you really want to execute the following query?'),
$html
);
//validate 4: query
$this->assertContains(
'<code>' . $full_query . '</code>',
$html
);
//validate 5: button : yes or no
$this->assertContains(
__('Yes'),
$html
);
$this->assertContains(
__('No'),
$html
);
}
/**
* Test for PMA_getUrlParams
*
* @return void
*/
public function testPMAGetUrlParams()
{
$what = 'row_delete';
$reload = true;
$action = 'db_delete_row';
$db = "PMA_db";
$table = "PMA_table";
$selected = array(
"index1" => "table1"
);
$views = null;
$original_sql_query = "original_sql_query";
$original_url_query = "original_url_query";
$_url_params = PMA_getUrlParams(
$what, $reload, $action, $db, $table, $selected, $views,
$original_sql_query, $original_url_query
);
$this->assertEquals(
$what,
$_url_params['query_type']
);
$this->assertEquals(
$db,
$_url_params['db']
);
$this->assertEquals(
array('DELETE FROM `PMA_table` WHERE table1 LIMIT 1;'),
$_url_params['selected']
);
$this->assertEquals(
$original_sql_query,
$_url_params['original_sql_query']
);
$this->assertEquals(
$original_url_query,
$_url_params['original_url_query']
);
}
/**
* Test for PMA_buildOrExecuteQueryForMulti
*
* @return void
*/
public function testPMABuildOrExecuteQueryForMulti()
{
$query_type = 'row_delete';
$db = "PMA_db";
$table = "PMA_table";
$selected = array(
"table1", "table2"
);
$views = null;
$primary = null;
$from_prefix = "from_prefix";
$to_prefix = "to_prefix";
$_REQUEST['pos'] = 1000;
$_SESSION['tmpval']['pos'] = 1000;
$_SESSION['tmpval']['max_rows'] = 25;
list(
$result, $rebuild_database_list, $reload_ret,
$run_parts, $execute_query_later,,
) = PMA_buildOrExecuteQueryForMulti(
$query_type, $selected, $db, $table, $views,
$primary, $from_prefix, $to_prefix
);
//validate 1: $run_parts
$this->assertEquals(
true,
$run_parts
);
//validate 2: $result
$this->assertEquals(
true,
$result
);
//validate 3: $rebuild_database_list
$this->assertEquals(
false,
$rebuild_database_list
);
//validate 4: $reload_ret
$this->assertEquals(
null,
$reload_ret
);
$query_type = 'analyze_tbl';
list(
,,,, $execute_query_later,,
) = PMA_buildOrExecuteQueryForMulti(
$query_type, $selected, $db, $table, $views,
$primary, $from_prefix, $to_prefix
);
//validate 5: $execute_query_later
$this->assertEquals(
true,
$execute_query_later
);
}
/**
* Test for PMA_getQueryFromSelected
*
* @return void
*/
public function testPMAGetQueryFromSelected()
{
$what = "drop_tbl";
$table = "PMA_table";
$selected = array(
"table1", "table2"
);
$views = array(
"table1", "table2"
);
list($full_query, $reload, $full_query_views)
= PMA_getQueryFromSelected(
$what, $table, $selected, $views
);
//validate 1: $full_query
$this->assertContains(
"DROP VIEW `table1`, `table2`",
$full_query
);
//validate 2: $reload
$this->assertEquals(
false,
$reload
);
//validate 3: $full_query_views
$this->assertEquals(
null,
$full_query_views
);
$what = "drop_db";
list($full_query, $reload, $full_query_views)
= PMA_getQueryFromSelected(
$what, $table, $selected, $views
);
//validate 1: $full_query
$this->assertContains(
"DROP DATABASE `table1`;<br />DROP DATABASE `table2`;",
$full_query
);
//validate 2: $reload
$this->assertEquals(
true,
$reload
);
}
}

View File

@ -0,0 +1,248 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for MySQL Charsets
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/mysql_charsets.inc.php';
/**
* Tests for MySQL Charsets
*
* @package PhpMyAdmin-test
*/
class PMA_MySQL_Charsets_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_generateCharsetQueryPart
*
* @param string $collation Collation
* @param string $expected Expected Charset Query
*
* @return void
* @test
* @dataProvider charsetQueryData
*/
public function testGenerateCharsetQueryPart($collation, $expected)
{
$this->assertEquals(
$expected,
PMA_generateCharsetQueryPart($collation)
);
}
/**
* Data Provider for testPMA_generateCharsetQueryPart
*
* @return array test data
*/
public function charsetQueryData()
{
return array(
array("a_b_c_d", " CHARSET=a COLLATE a_b_c_d"),
array("a_", " CHARSET=a COLLATE a_"),
array("a", " CHARSET=a"),
);
}
/**
* Test for PMA_getDbCollation
*
* @return void
* @test
*/
public function testGetDbCollation()
{
$GLOBALS['server'] = 1;
// test case for system schema
$this->assertEquals(
'utf8_general_ci',
PMA_getDbCollation("information_schema")
);
$GLOBALS['cfg']['Server']['DisableIS'] = false;
$GLOBALS['cfg']['DBG']['sql'] = false;
$this->assertEquals(
'utf8_general_ci',
PMA_getDbCollation('pma_test')
);
}
/**
* Test case for PMA_getCollationDescr()
*
* @param string $collation Collation for which description is reqd
* @param string $desc Expected Description
*
* @return void
* @test
* @dataProvider collationDescr
*/
public function testGetCollationDescr($collation, $desc)
{
$this->assertEquals(
$desc,
PMA_getCollationDescr($collation)
);
}
/**
* Data Provider for testPMA_getCollationDescr()
*
* @return array Test data for testPMA_getCollationDescr()
*/
public function collationDescr()
{
return array(
array('binary', 'Binary'),
array('foo_bulgarian_bar', 'Bulgarian'),
array('gb2312_chinese', 'Simplified Chinese'),
array('gbk_chinese', 'Simplified Chinese'),
array('big5_chinese', 'Traditional Chinese'),
array('foo_ci_bar', 'unknown, case-insensitive'),
array('foo_cs_bar', 'unknown, case-sensitive'),
array('foo_croatian_bar', 'Croatian'),
array('foo_czech_bar', 'Czech'),
array('foo_danish_bar', 'Danish'),
array('foo_english_bar', 'English'),
array('foo_esperanto_bar', 'Esperanto'),
array('foo_estonian_bar', 'Estonian'),
array('foo_german1_bar', 'German (dictionary)'),
array('foo_german2_bar', 'German (phone book)'),
array('foo_hungarian_bar', 'Hungarian'),
array('foo_icelandic_bar', 'Icelandic'),
array('foo_japanese_bar', 'Japanese'),
array('foo_latvian_bar', 'Latvian'),
array('foo_lithuanian_bar', 'Lithuanian'),
array('foo_korean_bar', 'Korean'),
array('foo_persian_bar', 'Persian'),
array('foo_polish_bar', 'Polish'),
array('foo_roman_bar', 'West European'),
array('foo_romanian_bar', 'Romanian'),
array('foo_slovak_bar', 'Slovak'),
array('foo_slovenian_bar', 'Slovenian'),
array('foo_spanish_bar', 'Spanish'),
array('foo_spanish2_bar', 'Traditional Spanish'),
array('foo_swedish_bar', 'Swedish'),
array('foo_thai_bar', 'Thai'),
array('foo_turkish_bar', 'Turkish'),
array('foo_ukrainian_bar', 'Ukrainian'),
array('foo_unicode_bar', 'Unicode (multilingual)'),
array('ucs2', 'Unicode (multilingual)'),
array('utf8', 'Unicode (multilingual)'),
array('ascii', 'West European (multilingual)'),
array('cp850', 'West European (multilingual)'),
array('dec8', 'West European (multilingual)'),
array('hp8', 'West European (multilingual)'),
array('latin1', 'West European (multilingual)'),
array('cp1250', 'Central European (multilingual)'),
array('cp852', 'Central European (multilingual)'),
array('latin2', 'Central European (multilingual)'),
array('macce', 'Central European (multilingual)'),
array('cp866', 'Russian'),
array('koi8r', 'Russian'),
array('gb2312', 'Simplified Chinese'),
array('gbk', 'Simplified Chinese'),
array('sjis', 'Japanese'),
array('ujis', 'Japanese'),
array('cp932', 'Japanese'),
array('eucjpms', 'Japanese'),
array('cp1257', 'Baltic (multilingual)'),
array('latin7', 'Baltic (multilingual)'),
array('armscii8', 'Armenian'),
array('armscii', 'Armenian'),
array('big5', 'Traditional Chinese'),
array('cp1251', 'Cyrillic (multilingual)'),
array('cp1256', 'Arabic'),
array('euckr', 'Korean'),
array('hebrew', 'Hebrew'),
array('geostd8', 'Georgian'),
array('greek', 'Greek'),
array('keybcs2', 'Czech-Slovak'),
array('koi8u', 'Ukrainian'),
array('latin5', 'Turkish'),
array('swe7', 'Swedish'),
array('tis620', 'Thai'),
array('foobar', 'unknown'),
array('foo_test_bar', 'unknown'),
array('foo_bin_bar', 'unknown, Binary')
);
}
/**
* Test for PMA_generateCharsetDropdownBox
*
* @return void
* @test
*/
public function testGenerateCharsetDropdownBox()
{
$GLOBALS['mysql_charsets'] = array('latin1', 'latin2', 'latin3');
$GLOBALS['mysql_charsets_available'] = array(
'latin1' => true,
'latin2' => false,
'latin3' => true
);
$GLOBALS['mysql_charsets_descriptions'] = array(
'latin1' => 'abc',
'latin2' => 'def'
);
$GLOBALS['mysql_collations'] = array(
'latin1' => array(
'latin1_german1_ci',
'latin1_swedish1_ci'
),
'latin2' => array('latin1_general_ci'),
'latin3' => array()
);
$GLOBALS['mysql_collations_available'] = array(
'latin1_german1_ci' => true,
'latin1_swedish1_ci' => false,
'latin2_general_ci' => true
);
$result = PMA_generateCharsetDropdownBox();
$this->assertContains('name="collation"', $result);
$this->assertNotContains('id="', $result);
$this->assertNotContains('class="autosubmit"', $result);
$this->assertContains('<option value="">Collation', $result);
$this->assertContains('<option value=""></option>', $result);
$this->assertContains('<optgroup label="latin1', $result);
$this->assertNotContains('<optgroup label="latin2', $result);
$this->assertContains('title="latin3', $result);
$this->assertContains('title="abc', $result);
$this->assertNotContains('value="latin1_swedish1_ci"', $result);
$this->assertContains('value="latin1_german1_ci"', $result);
$this->assertNotContains('value="latin2_general1_ci"', $result);
$this->assertContains('title="German', $result);
$result = PMA_generateCharsetDropdownBox(
2, null, "test_id", "latin1", false, true
);
$this->assertContains('name="character_set"', $result);
$this->assertNotContains('Charset</option>', $result);
$this->assertContains('class="autosubmit"', $result);
$this->assertContains('id="test_id"', $result);
$this->assertContains('selected="selected">latin1', $result);
}
/**
* Test for PMA_getServerCollation
*
* @return void
* @test
*/
public function testGetServerCollation()
{
$GLOBALS['server'] = 1;
$GLOBALS['cfg']['DBG']['sql'] = false;
$this->assertEquals('utf8_general_ci', PMA_getServerCollation());
}
}

View File

@ -0,0 +1,531 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for normalization.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
use PMA\libraries\TypesMySQL;
$GLOBALS['server'] = 1;
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/relation.lib.php';
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/mysql_charsets.inc.php';
require_once 'libraries/normalization.lib.php';
/**
* tests for normalization.lib.php
*
* @package PhpMyAdmin-test
*/
class PMA_Normalization_Test extends PHPUnit_Framework_TestCase
{
/**
* prepares environment for tests
*
* @return void
*/
public function setUp()
{
$GLOBALS['cfg']['LimitChars'] = 50;
$GLOBALS['PMA_Types'] = new TypesMySQL();
$GLOBALS['cfg']['ServerDefault'] = "PMA_server";
$GLOBALS['pmaThemeImage'] = 'image';
$GLOBALS['cfg']['ShowHint'] = true;
$GLOBALS['cfg']['CharEditing'] = '';
$GLOBALS['cfg']['ActionLinksMode'] = 'icons';
$GLOBALS['db'] = 'PMA_db';
$GLOBALS['table'] = 'PMA_table';
$GLOBALS['server'] = 1;
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
//mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$GLOBALS['dbi'] = $dbi;
// set expectations
$dbi->expects($this->any())
->method('selectDb')
->will($this->returnValue(true));
$dbi->expects($this->any())
->method('getColumns')
->will(
$this->returnValue(
array(
"id"=>array("Type"=>"integer"),
"col1"=>array("Type"=>'varchar(100)'),
"col2"=>array("Type"=>'DATETIME')
)
)
);
$dbi->expects($this->any())
->method('getColumnNames')
->will($this->returnValue(array("id", "col1", "col2")));
$map = array(
array('PMA_db', 'PMA_table1', null, array()),
array(
'PMA_db', 'PMA_table', null,
array(array('Key_name'=>'PRIMARY', 'Column_name'=>'id'))
),
array(
'PMA_db', 'PMA_table2', null,
array(
array('Key_name'=>'PRIMARY', 'Column_name'=>'id'),
array('Key_name'=>'PRIMARY', 'Column_name'=>'col1')
)
),
);
$dbi->expects($this->any())
->method('getTableIndexes')
->will($this->returnValueMap($map));
$dbi->expects($this->any())
->method('tryQuery')
->will($this->returnValue(true));
$dbi->expects($this->any())
->method('fetchResult')
->will($this->returnValue(array(0)));
}
/**
* Test for PMA_getHtmlForColumnsList
*
* @return void
*/
public function testPMAGetHtmlForColumnsList()
{
$db = "PMA_db";
$table= "PMA_table";
$this->assertContains(
'<option value="id">id [ integer ]</option>',
PMA_getHtmlForColumnsList($table, $db)
);
$this->assertEquals(
'<input type="checkbox" value="col1"/>col1 [ varchar(100) ]</br>',
PMA_getHtmlForColumnsList($table, $db, 'String', 'checkbox')
);
}
/**
* Test for PMA_getHtmlForCreateNewColumn
*
* @return void
*/
public function testPMAGetHtmlForCreateNewColumn()
{
$db = "PMA_db";
$table= "PMA_table";
$num_fields = 1;
$result = PMA_getHtmlForCreateNewColumn($num_fields, $db, $table);
$this->assertContains(
'<table id="table_columns"',
$result
);
}
/**
* Test for PMA_getHtmlFor1NFStep1
*
* @return void
*/
public function testPMAGetHtmlFor1NFStep1()
{
$db = "PMA_db";
$table= "PMA_table";
$normalizedTo = '1nf';
$result = PMA_getHtmlFor1NFStep1($db, $table, $normalizedTo);
$this->assertContains(
"<h3 class='center'>"
. __('First step of normalization (1NF)') . "</h3>",
$result
);
$this->assertContains(
"<div id='mainContent'",
$result
);
$this->assertContains("<legend>" . __('Step 1.'), $result);
$this->assertContains(
'<h4',
$result
);
$this->assertContains(
'<p',
$result
);
$this->assertContains(
"<select id='selectNonAtomicCol'",
$result
);
$this->assertContains(
PMA_getHtmlForColumnsList(
$db, $table, _pgettext('string types', 'String')
), $result
);
}
/**
* Test for PMA_getHtmlContentsFor1NFStep2
*
* @return void
*/
public function testPMAGetHtmlContentsFor1NFStep2()
{
$db = "PMA_db";
$table= "PMA_table1";
$result = PMA_getHtmlContentsFor1NFStep2($db, $table);
$this->assertInternalType('array', $result);
$this->assertArrayHasKey('legendText', $result);
$this->assertArrayHasKey('headText', $result);
$this->assertArrayHasKey('subText', $result);
$this->assertArrayHasKey('hasPrimaryKey', $result);
$this->assertArrayHasKey('extra', $result);
$this->assertContains(
'<a href="#" id="createPrimaryKey">',
$result['subText']
);
$this->assertContains(
'<a href="#" id="addNewPrimary">',
$result['extra']
);
$this->assertEquals('0', $result['hasPrimaryKey']);
$this->assertContains(__('Step 1.') . 2, $result['legendText']);
$result1 = PMA_getHtmlContentsFor1NFStep2($db, 'PMA_table');
$this->assertEquals('1', $result1['hasPrimaryKey']);
}
/**
* Test for PMA_getHtmlContentsFor1NFStep4
*
* @return void
*/
public function testPMAGetHtmlContentsFor1NFStep4()
{
$db = "PMA_db";
$table= "PMA_table";
$result = PMA_getHtmlContentsFor1NFStep4($db, $table);
$this->assertInternalType('array', $result);
$this->assertArrayHasKey('legendText', $result);
$this->assertArrayHasKey('headText', $result);
$this->assertArrayHasKey('subText', $result);
$this->assertArrayHasKey('extra', $result);
$this->assertContains(__('Step 1.') . 4, $result['legendText']);
$this->assertContains(
PMA_getHtmlForColumnsList($db, $table, 'all', "checkbox"),
$result['extra']
);
$this->assertContains(
'<input type="submit" id="removeRedundant"',
$result['extra']
);
}
/**
* Test for PMA_getHtmlContentsFor1NFStep3
*
* @return void
*/
public function testPMAGetHtmlContentsFor1NFStep3()
{
$db = "PMA_db";
$table= "PMA_table";
$result = PMA_getHtmlContentsFor1NFStep3($db, $table);
$this->assertInternalType('array', $result);
$this->assertArrayHasKey('legendText', $result);
$this->assertArrayHasKey('headText', $result);
$this->assertArrayHasKey('subText', $result);
$this->assertArrayHasKey('extra', $result);
$this->assertArrayHasKey('primary_key', $result);
$this->assertContains(__('Step 1.') . 3, $result['legendText']);
$this->assertContains(
PMA_getHtmlForColumnsList($db, $table, 'all', "checkbox"),
$result['extra']
);
$this->assertContains(
'<input type="submit" id="moveRepeatingGroup"',
$result['extra']
);
$this->assertEquals(json_encode(array('id')), $result['primary_key']);
}
/**
* Test for PMA_getHtmlFor2NFstep1
*
* @return void
*/
public function testPMAGetHtmlFor2NFstep1()
{
$db = "PMA_db";
$table= "PMA_table";
$result = PMA_getHtmlFor2NFstep1($db, $table);
$this->assertInternalType('array', $result);
$this->assertArrayHasKey('legendText', $result);
$this->assertArrayHasKey('headText', $result);
$this->assertArrayHasKey('subText', $result);
$this->assertArrayHasKey('extra', $result);
$this->assertArrayHasKey('primary_key', $result);
$this->assertContains(__('Step 2.') . 1, $result['legendText']);
$this->assertEquals('id', $result['primary_key']);
$result1 = PMA_getHtmlFor2NFstep1($db, "PMA_table2");
$this->assertEquals('id, col1', $result1['primary_key']);
$this->assertContains(
'<a href="#" id="showPossiblePd"',
$result1['headText']
);
$this->assertContains(
'<input type="checkbox" name="pd" value="id"',
$result1['extra']
);
}
/**
* Test for PMA_getHtmlForNewTables2NF
*
* @return void
*/
public function testPMAGetHtmlForNewTables2NF()
{
$table= "PMA_table";
$partialDependencies = array('col1'=>array('col2'));
$result = PMA_getHtmlForNewTables2NF($partialDependencies, $table);
$this->assertContains(
'<input type="text" name="col1"',
$result
);
}
/**
* Test for PMA_createNewTablesFor2NF
*
* @return void
*/
public function testPMACreateNewTablesFor2NF()
{
$table= "PMA_table";
$db = 'PMA_db';
$tablesName = new stdClass();
$tablesName->id = 'PMA_table';
$tablesName->col1 = 'PMA_table1';
$partialDependencies = array('id'=>array('col2'));
$result = PMA_createNewTablesFor2NF(
$partialDependencies, $tablesName, $table, $db
);
$this->assertInternalType('array', $result);
$this->assertArrayHasKey('legendText', $result);
$this->assertArrayHasKey('headText', $result);
$this->assertArrayHasKey('queryError', $result);
$partialDependencies = array('id'=>array('col2'), 'col1'=>array('col2'));
$result1 = PMA_createNewTablesFor2NF(
$partialDependencies, $tablesName, $table, $db
);
$this->assertArrayHasKey('extra', $result1);
$this->assertEquals(__('End of step'), $result1['legendText']);
$this->assertEquals('', $result1['extra']);
}
/**
* Test for PMA_getHtmlForNewTables3NF
*
* @return void
*/
public function testPMAGetHtmlForNewTables3NF()
{
$tables= array("PMA_table"=>array('col1'));
$db = 'PMA_db';
$dependencies = new stdClass();
$dependencies->col1 = array('col2');
$result = PMA_getHtmlForNewTables3NF($dependencies, $tables, $db);
$this->assertEquals(
array(
'html' => '',
'newTables' => array()
), $result
);
$tables= array("PMA_table"=>array('col1', 'PMA_table'));
$dependencies->PMA_table = array('col4', 'col5');
$result1 = PMA_getHtmlForNewTables3NF($dependencies, $tables, $db);
$this->assertInternalType('array', $result1);
$this->assertContains(
'<input type="text" name="PMA_table"',
$result1['html']
);
$this->assertEquals(
array(
'PMA_table' => array (
'PMA_table' => array (
'pk' => 'col1',
'nonpk' => 'col2'
),
'table2' => array (
'pk' => 'id',
'nonpk' => 'col4, col5'
)
)
), $result1['newTables']
);
}
/**
* Test for PMA_createNewTablesFor3NF
*
* @return void
*/
public function testPMACreateNewTablesFor3NF()
{
$db = 'PMA_db';
$cols = new stdClass();
$cols->pk = 'id';
$cols->nonpk = 'col1, col2';
$cols1 = new stdClass();
$cols1->pk = 'col2';
$cols1->nonpk = 'col3, col4';
$newTables = array('PMA_table'=>array('PMA_table'=>$cols, 'table1'=>$cols1));
$result = PMA_createNewTablesFor3NF(
$newTables, $db
);
$this->assertInternalType('array', $result);
$this->assertArrayHasKey('legendText', $result);
$this->assertArrayHasKey('headText', $result);
$this->assertArrayHasKey('queryError', $result);
$newTables1 = array();
$result1 = PMA_createNewTablesFor3NF(
$newTables1, $db
);
$this->assertArrayHasKey('queryError', $result1);
$this->assertEquals(__('End of step'), $result1['legendText']);
$this->assertEquals(false, $result1['queryError']);
}
/**
* Test for PMA_moveRepeatingGroup
*
* @return void
*/
public function testPMAMoveRepeatingGroup()
{
$repeatingColumns = 'col1, col2';
$primary_columns = 'id,col1';
$newTable = 'PMA_newTable';
$newColumn = 'PMA_newCol';
$table= "PMA_table";
$db = 'PMA_db';
$result = PMA_moveRepeatingGroup(
$repeatingColumns, $primary_columns, $newTable, $newColumn, $table, $db
);
$this->assertInternalType('array', $result);
$this->assertArrayHasKey('queryError', $result);
$this->assertArrayHasKey('message', $result);
$this->assertInstanceOf(
'PMA\libraries\Message', $result['message']
);
}
/**
* Test for PMA_getHtmlFor3NFstep1
*
* @return void
*/
public function testPMAGetHtmlFor3NFstep1()
{
$db = "PMA_db";
$tables= array("PMA_table");
$result = PMA_getHtmlFor3NFstep1($db, $tables);
$this->assertInternalType('array', $result);
$this->assertArrayHasKey('legendText', $result);
$this->assertArrayHasKey('headText', $result);
$this->assertArrayHasKey('subText', $result);
$this->assertArrayHasKey('extra', $result);
$this->assertContains(__('Step 3.') . 1, $result['legendText']);
$this->assertContains(
'<form',
$result['extra']
);
$this->assertContains(
'<input type="checkbox" name="pd" value="col1"',
$result['extra']
);
$result1 = PMA_getHtmlFor3NFstep1($db, array("PMA_table2"));
$this->assertEquals(
'', $result1['subText']
);
}
/**
* Test for PMA_getHtmlForNormalizetable
*
* @return void
*/
public function testPMAGetHtmlForNormalizetable()
{
$result = PMA_getHtmlForNormalizetable();
$this->assertContains(
'<form method="post" action="normalization.php"'
. ' name="normalize" id="normalizeTable"',
$result
);
$this->assertContains(
'<input type="hidden" name="step1" value="1">', $result
);
$choices = array(
'1nf' => __('First step of normalization (1NF)'),
'2nf' => __('Second step of normalization (1NF+2NF)'),
'3nf' => __('Third step of normalization (1NF+2NF+3NF)'));
$html_tmp = PMA\libraries\Util::getRadioFields(
'normalizeTo', $choices, '1nf', true
);
$this->assertContains($html_tmp, $result);
}
/**
* Test for PMA_findPartialDependencies
*
* @return void
*/
public function testPMAFindPartialDependencies()
{
$table= "PMA_table2";
$db = 'PMA_db';
$result = PMA_findPartialDependencies($table, $db);
$this->assertContains(
'<div class="dependencies_box"',
$result
);
$this->assertContains(__('No partial dependencies found!'), $result);
}
/**
* Test for PMA_getAllCombinationPartialKeys
*
* @return void
*/
public function testPMAGetAllCombinationPartialKeys()
{
$primaryKey = array('id', 'col1', 'col2');
$result = PMA_getAllCombinationPartialKeys($primaryKey);
$this->assertEquals(
array('', 'id', 'col1', 'col1,id', 'col2', 'col2,id', 'col2,col1'),
$result
);
}
}

View File

@ -0,0 +1,254 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for operations
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
$GLOBALS['server'] = 1;
require_once 'libraries/operations.lib.php';
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/relation.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/mysql_charsets.inc.php';
/**
* tests for operations
*
* @package PhpMyAdmin-test
*/
class PMA_Operations_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up global environment.
*
* @return void
*/
public function setup()
{
$GLOBALS['table'] = 'table';
$GLOBALS['db'] = 'db';
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$GLOBALS['cfg'] = array(
'ServerDefault' => 1,
'ActionLinksMode' => 'icons',
);
$GLOBALS['cfg']['DBG']['sql'] = false;
$GLOBALS['server'] = 1;
$GLOBALS['db_priv'] = true;
$GLOBALS['table_priv'] = true;
$GLOBALS['col_priv'] = true;
$GLOBALS['proc_priv'] = true;
$GLOBALS['flush_priv'] = true;
}
/**
* Test for PMA_getHtmlForDatabaseComment
*
* @return void
*/
public function testGetHtmlForDatabaseComment()
{
$this->assertRegExp(
'/.*db_operations.php(.|[\n])*Database comment.*name="comment"([\n]|.)*/m',
PMA_getHtmlForDatabaseComment("pma")
);
}
/**
* Test for PMA_getHtmlForRenameDatabase
*
* @return void
*/
public function testGetHtmlForRenameDatabase()
{
$_REQUEST['db_collation'] = 'db1';
$html = PMA_getHtmlForRenameDatabase("pma");
$this->assertContains('db_operations.php', $html);
$this->assertRegExp(
'/.*db_rename.*Rename database to.*/',
$html
);
}
/**
* Test for PMA_getHtmlForDropDatabaseLink
*
* @return void
*/
public function testGetHtmlForDropDatabaseLink()
{
$this->assertRegExp(
'/.*DROP.DATABASE.*db_operations.php.*Drop the database.*/',
PMA_getHtmlForDropDatabaseLink("pma")
);
}
/**
* Test for PMA_getHtmlForCopyDatabase
*
* @return void
*/
public function testGetHtmlForCopyDatabase()
{
$_REQUEST['db_collation'] = 'db1';
$html = PMA_getHtmlForCopyDatabase("pma");
$this->assertRegExp('/.*db_operations.php.*/', $html);
$this->assertRegExp('/.*db_copy.*/', $html);
$this->assertRegExp('/.*Copy database to.*/', $html);
}
/**
* Test for PMA_getHtmlForChangeDatabaseCharset
*
* @return void
*/
public function testGetHtmlForChangeDatabaseCharset()
{
$_REQUEST['db_collation'] = 'db1';
$this->assertRegExp(
'/.*db_operations.php(.|[\n])*select_db_collation([\n]|.)*Collation.*/m',
PMA_getHtmlForChangeDatabaseCharset("pma", "bookmark")
);
}
/**
* Test for PMA_getHtmlForOrderTheTable
*
* @return void
*/
public function testGetHtmlForOrderTheTable()
{
$this->assertRegExp(
'/.*tbl_operations.php(.|[\n])*Alter table order by([\n]|.)*order_order.*/m',
PMA_getHtmlForOrderTheTable(
array(array('Field' => "column1"), array('Field' => "column2"))
)
);
}
/**
* Test for PMA_getHtmlForTableRow
*
* @return void
*/
public function testGetHtmlForTableRow()
{
$this->assertEquals(
'<tr><td class="vmiddle"><label for="name">lable</label></td><td><input type="checkbox" name="name" id="name" value="1"/></td></tr>',
PMA_getHtmlForTableRow("name", "lable", "value")
);
}
/**
* Test for PMA_getMaintainActionlink
*
* @return void
*/
public function testGetMaintainActionlink()
{
$this->assertRegExp(
'/.*href="sql.php.*post.*/',
PMA_getMaintainActionlink(
"post",
array("name" => 'foo', "value" => 'bar'),
array(),
'doclink'
)
);
}
/**
* Test for PMA_getHtmlForDeleteDataOrTable
*
* @return void
*/
public function testGetHtmlForDeleteDataOrTable()
{
$this->assertRegExp(
'/.*Delete data or table.*Empty the table.*Delete the table.*/m',
PMA_getHtmlForDeleteDataOrTable(
array("truncate" => 'foo'), array("drop" => 'bar')
)
);
}
/**
* Test for PMA_getDeleteDataOrTablelink
*
* @return void
*/
public function testGetDeleteDataOrTablelink()
{
$this->assertRegExp(
'/.*TRUNCATE.TABLE.foo.*id_truncate.*Truncate table.*/m',
PMA_getDeleteDataOrTablelink(
array("sql" => 'TRUNCATE TABLE foo'),
"TRUNCATE_TABLE",
"Truncate table",
"id_truncate"
)
);
}
/**
* Test for PMA_getHtmlForPartitionMaintenance
*
* @return void
*/
public function testGetHtmlForPartitionMaintenance()
{
$html = PMA_getHtmlForPartitionMaintenance(
array("partition1", "partion2"),
array("param1" => 'foo', "param2" => 'bar')
);
$this->assertRegExp('/.*action="tbl_operations.php".*/', $html);
$this->assertRegExp('/.*ANALYZE.*/', $html);
$this->assertRegExp('/.*REBUILD.*/', $html);
}
/**
* Test for PMA_getHtmlForReferentialIntegrityCheck
*
* @return void
*/
public function testGetHtmlForReferentialIntegrityCheck()
{
$this->assertRegExp(
'/.*Check referential integrity.*href="sql.php(.|[\n])*/m',
PMA_getHtmlForReferentialIntegrityCheck(
array(
array(
'foreign_db' => 'db1',
'foreign_table' => "foreign1",
'foreign_field' => "foreign2"
)
),
array("param1" => 'a', "param2" => 'b')
)
);
}
}

View File

@ -0,0 +1,511 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for relation_cleanup.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/relation.lib.php';
require_once 'libraries/relation_cleanup.lib.php';
use PMA\libraries\DatabaseInterface;
/**
* PMA_Relation_Cleanup_Test class
*
* this class is for testing relation_cleanup.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_Relation_Cleanup_Test extends PHPUnit_Framework_TestCase
{
/**
* Prepares environment for the test.
*
* @return void
*/
public function setUp()
{
$_SESSION['relation'] = array();
$GLOBALS['server'] = 1;
$GLOBALS['cfg']['Server']['user'] = "user";
$GLOBALS['cfg']['Server']['pmadb'] = "pmadb";
$GLOBALS['cfg']['Server']['bookmarktable'] = 'bookmark';
$GLOBALS['cfg']['Server']['relation'] = 'relation';
$GLOBALS['cfg']['Server']['table_info'] = 'table_info';
$GLOBALS['cfg']['Server']['table_coords'] = 'table_coords';
$GLOBALS['cfg']['Server']['column_info'] = 'column_info';
$GLOBALS['cfg']['Server']['pdf_pages'] = 'pdf_pages';
$GLOBALS['cfg']['Server']['history'] = 'history';
$GLOBALS['cfg']['Server']['recent'] = 'recent';
$GLOBALS['cfg']['Server']['favorite'] = 'favorite';
$GLOBALS['cfg']['Server']['table_uiprefs'] = 'table_uiprefs';
$GLOBALS['cfg']['Server']['tracking'] = 'tracking';
$GLOBALS['cfg']['Server']['userconfig'] = 'userconfig';
$GLOBALS['cfg']['Server']['users'] = 'users';
$GLOBALS['cfg']['Server']['usergroups'] = 'usergroups';
$GLOBALS['cfg']['Server']['navigationhiding'] = 'navigationhiding';
$GLOBALS['cfg']['Server']['savedsearches'] = 'savedsearches';
$GLOBALS['cfg']['Server']['central_columns'] = 'central_columns';
$GLOBALS['cfg']['Server']['designer_settings'] = 'designer_settings';
$GLOBALS['cfg']['Server']['export_templates'] = 'pma__export_templates';
$this->redefineRelation();
}
/**
* functions for redefine DBI_PMA_Relation_Cleanup
*
* @return void
*/
public function redefineRelation()
{
$GLOBALS['dbi'] = new DBI_PMA_Relation_Cleanup();
unset($_SESSION['relation'][$GLOBALS['server']]);
}
/**
* Test for PMA_relationsCleanupColumn
*
* @return void
* @group medium
*/
public function testPMARelationsCleanupColumn()
{
$db = "PMA";
$table = "PMA_bookmark";
$column = "name";
$this->redefineRelation();
//the $cfgRelation value before cleanup column
$cfgRelation = PMA_checkRelationsParam();
$this->assertEquals(
true,
$cfgRelation['commwork']
);
//validate PMA_getDbComments when commwork = true
$db_comments = PMA_getDbComments();
$this->assertEquals(
array('db_name0' => 'comment0','db_name1' => 'comment1'),
$db_comments
);
$this->assertEquals(
true,
$cfgRelation['displaywork']
);
//validate PMA_getDisplayField when displaywork = true
$display_field = PMA_getDisplayField($db, $table);
$this->assertEquals(
'PMA_display_field',
$display_field
);
$this->assertEquals(
true,
$cfgRelation['relwork']
);
$this->assertEquals(
'column_info',
$cfgRelation['column_info']
);
$this->assertEquals(
'table_info',
$cfgRelation['table_info']
);
$this->assertEquals(
'relation',
$cfgRelation['relation']
);
//cleanup
PMA_relationsCleanupColumn($db, $table, $column);
//the $cfgRelation value after cleanup column
$cfgRelation = PMA_checkRelationsParam();
$is_defined_column_info
= isset($cfgRelation['column_info'])? $cfgRelation['column_info'] : null;
$is_defined_table_info
= isset($cfgRelation['table_info'])? $cfgRelation['table_info'] : null;
$is_defined_relation
= isset($cfgRelation['relation'])? $cfgRelation['relation'] : null;
$this->assertEquals(
null,
$is_defined_column_info
);
$this->assertEquals(
null,
$is_defined_table_info
);
$this->assertEquals(
null,
$is_defined_relation
);
}
/**
* Test for PMA_relationsCleanupTable
*
* @return void
*/
public function testPMARelationsCleanupTable()
{
$db = "PMA";
$table = "PMA_bookmark";
$this->redefineRelation();
//the $cfgRelation value before cleanup column
$cfgRelation = PMA_checkRelationsParam();
$this->assertEquals(
'column_info',
$cfgRelation['column_info']
);
$this->assertEquals(
'table_info',
$cfgRelation['table_info']
);
$this->assertEquals(
'table_coords',
$cfgRelation['table_coords']
);
$this->assertEquals(
'relation',
$cfgRelation['relation']
);
//PMA_relationsCleanupTable
PMA_relationsCleanupTable($db, $table);
//the $cfgRelation value after cleanup column
$cfgRelation = PMA_checkRelationsParam();
$is_defined_column_info
= isset($cfgRelation['column_info'])? $cfgRelation['column_info'] : null;
$is_defined_table_info
= isset($cfgRelation['table_info'])? $cfgRelation['table_info'] : null;
$is_defined_relation
= isset($cfgRelation['relation'])? $cfgRelation['relation'] : null;
$is_defined_table_coords
= isset($cfgRelation['table_coords'])
? $cfgRelation['table_coords']
: null;
$this->assertEquals(
null,
$is_defined_column_info
);
$this->assertEquals(
null,
$is_defined_table_info
);
$this->assertEquals(
null,
$is_defined_relation
);
$this->assertEquals(
null,
$is_defined_table_coords
);
}
/**
* Test for PMA_relationsCleanupDatabase
*
* @return void
*/
public function testPMARelationsCleanupDatabase()
{
$db = "PMA";
$this->redefineRelation();
//the $cfgRelation value before cleanup column
$cfgRelation = PMA_checkRelationsParam();
$this->assertEquals(
'column_info',
$cfgRelation['column_info']
);
$this->assertEquals(
'bookmark',
$cfgRelation['bookmark']
);
$this->assertEquals(
'table_info',
$cfgRelation['table_info']
);
$this->assertEquals(
'pdf_pages',
$cfgRelation['pdf_pages']
);
$this->assertEquals(
'table_coords',
$cfgRelation['table_coords']
);
$this->assertEquals(
'relation',
$cfgRelation['relation']
);
//cleanup
PMA_relationsCleanupDatabase($db);
//the value after cleanup column
$cfgRelation = PMA_checkRelationsParam();
$is_defined_column_info
= isset($cfgRelation['column_info'])? $cfgRelation['column_info'] : null;
$is_defined_table_info
= isset($cfgRelation['table_info'])? $cfgRelation['table_info'] : null;
$is_defined_relation
= isset($cfgRelation['relation'])? $cfgRelation['relation'] : null;
$is_defined_table_coords
= isset($cfgRelation['table_coords'])
? $cfgRelation['table_coords']
: null;
$this->assertEquals(
null,
$is_defined_column_info
);
$this->assertEquals(
null,
$is_defined_table_info
);
$this->assertEquals(
null,
$is_defined_relation
);
$this->assertEquals(
null,
$is_defined_table_coords
);
}
}
/**
* DBI_PMA_Relation_Cleanup for Mock DBI class
*
* this class is for Mock DBI
*
* @package PhpMyAdmin-test
*/
class DBI_PMA_Relation_Cleanup extends DatabaseInterface
{
var $index;
var $assocIndex;
var $totalNum;
var $values = array();
var $indexs = array();
/**
* Constructor
*
*/
public function __construct()
{
$this->index = 0;
$this->assocIndex = 0;
$this->totalNum = 2;
$this->values = array(
'bookmark',
'relation',
'table_info',
'table_coords',
'column_info',
'pdf_pages',
'history',
'recent',
'table_uiprefs',
'tracking',
'userconfig',
'users',
'usergroups',
'navigationhiding',
);
$this->indexs = array(
'bookmark' => 0,
'relation' => 1,
'table_info' => 2,
'table_coords' => 3,
'column_info' => 4,
'pdf_pages' => 5,
'history' => 6,
'recent' => 7,
'table_uiprefs' => 8,
'tracking' => 9,
'userconfig' => 10,
'users' => 11,
'usergroups' => 12,
'navigationhiding' => 13,
);
}
/**
* returns array of rows with numeric keys from $result
*
* @param object $result result set identifier
*
* @return array
*/
function fetchRow($result)
{
$curr_table = array();
if ($this->index < count($this->values)) {
$curr_table[0] = $this->values[$this->index];
$this->index++;
return $curr_table;
}
$this->index = 0;
return false;
}
/**
* runs a query
*
* @param string $sql SQL query to execute
* @param mixed $link optional database link to use
* @param int $options optional query options
* @param bool $cache_affected_rows whether to cache affected rows
*
* @return mixed
*/
function query($sql, $link = null, $options = 0, $cache_affected_rows = true)
{
if (mb_stripos($sql, "column_info") !== false) {
unset($this->values[$this->indexs['column_info']]);
}
if (mb_stripos($sql, "table_info") !== false) {
unset($this->values[$this->indexs['table_info']]);
}
if (mb_stripos($sql, "table_coords") !== false) {
unset($this->values[$this->indexs['table_coords']]);
}
if (mb_stripos($sql, "relation") !== false) {
unset($this->values[$this->indexs['relation']]);
}
if (mb_stripos($sql, "pdf_pages") !== false) {
unset($GLOBALS [$this->indexs['pdf_pages']]);
}
if (mb_stripos($sql, "bookmark") !== false) {
unset($GLOBALS [$this->indexs['bookmark']]);
}
return true;
}
/**
* runs a query and returns the result
*
* @param string $query query to run
* @param resource $link mysql link resource
* @param integer $options query options
* @param bool $cache_affected_rows whether to cache affected row
*
* @return mixed
*/
public function tryQuery(
$query, $link = null, $options = 0, $cache_affected_rows = true
) {
return true;
}
/**
* selects given database
*
* @param string $dbname database name to select
* @param object $link connection object
*
* @return boolean
*/
public function selectDb($dbname, $link = null)
{
return true;
}
/**
* Frees memory associated with the result
*
* @param object $result database result
*
* @return bool
*/
public function freeResult($result)
{
return true;
}
/**
* returns only the first row from the result
*
* <code>
* $sql = 'SELECT * FROM `user` WHERE `id` = 123';
* $user = $GLOBALS['dbi']->fetchSingleRow($sql);
* // produces
* // $user = array('id' => 123, 'name' => 'John Doe')
* </code>
*
* @param string|mysql_result $result query or mysql result
* @param string $type NUM|ASSOC|BOTH
* returned array should either numeric
* associative or booth
* @param resource $link mysql link
*
* @return array|boolean first row from result
* or false if result is empty
*/
public function fetchSingleRow($result, $type = 'ASSOC', $link = null)
{
return array(
'display_field' => "PMA_display_field"
);
}
/**
* returns array of rows with associative keys from $result
*
* @param object $result result set identifier
*
* @return array
*/
public function fetchAssoc($result)
{
$assocResult = array();
if ($this->assocIndex < $this->totalNum) {
$assocResult['db_name'] = "db_name" . $this->assocIndex;
$assocResult['comment'] = "comment" . $this->assocIndex;
$this->assocIndex++;
return $assocResult;
}
$this->assocIndex = 0;
return false;
}
/**
* returns the number of rows returned by last query
*
* @param object $result result set identifier
*
* @return string|int
*/
public function numRows($result)
{
return $this->totalNum;
}
}

View File

@ -0,0 +1,334 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for relation.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/relation.lib.php';
/**
* Tests for libraries/relation.lib.php
*
* @package PhpMyAdmin-test
* @group medium
*/
class PMA_Relation_Test extends PHPUnit_Framework_TestCase
{
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*
* @access protected
* @return void
*/
public function setUp()
{
$GLOBALS['server'] = 1;
$GLOBALS['db'] = 'db';
$GLOBALS['cfg']['Server']['user'] = 'root';
$GLOBALS['cfg']['Server']['pmadb'] = 'phpmyadmin';
$GLOBALS['cfg']['ZeroConf'] = true;
$_SESSION['relation'][$GLOBALS['server']] = "PMA_relation";
$_SESSION['PMA_Theme'] = new Theme();
$_SESSION['relation'] = array();
$GLOBALS['pmaThemePath'] = $_SESSION['PMA_Theme']->getPath();
$GLOBALS['pmaThemeImage'] = 'theme/';
$GLOBALS['cfg']['ServerDefault'] = 0;
include_once 'libraries/relation.lib.php';
}
/**
* Test for PMA_queryAsControlUser
*
* @return void
*/
public function testPMAQueryAsControlUser()
{
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->once())
->method('query')
->will($this->returnValue('executeResult1'));
$dbi->expects($this->once())
->method('tryQuery')
->will($this->returnValue('executeResult2'));
$GLOBALS['dbi'] = $dbi;
$sql = "insert into PMA_bookmark A,B values(1, 2)";
$this->assertEquals(
'executeResult1',
PMA_queryAsControlUser($sql)
);
$this->assertEquals(
'executeResult2',
PMA_queryAsControlUser($sql, false)
);
}
/**
* Test for PMA_getRelationsParam & PMA_getRelationsParamDiagnostic
*
* @return void
*/
public function testPMAGetRelationsParam()
{
$relationsPara = PMA_getRelationsParam();
$this->assertEquals(
false,
$relationsPara['relwork']
);
$this->assertEquals(
false,
$relationsPara['bookmarkwork']
);
$this->assertEquals(
'root',
$relationsPara['user']
);
$this->assertEquals(
'phpmyadmin',
$relationsPara['db']
);
$retval = PMA_getRelationsParamDiagnostic($relationsPara);
//check $cfg['Servers'][$i]['pmadb']
$this->assertContains(
"\$cfg['Servers'][\$i]['pmadb']",
$retval
);
$this->assertContains(
'<strong>OK</strong>',
$retval
);
//$cfg['Servers'][$i]['relation']
$result = "\$cfg['Servers'][\$i]['pmadb'] ... </th><td class=\"right\">"
. "<span style=\"color:green\"><strong>OK</strong></span>";
$this->assertContains(
$result,
$retval
);
// $cfg['Servers'][$i]['relation']
$result = "\$cfg['Servers'][\$i]['relation'] ... </th><td class=\"right\">"
. "<span style=\"color:red\"><strong>not OK</strong></span>";
$this->assertContains(
$result,
$retval
);
// General relation features
$result = 'General relation features: <span style="color:red">Disabled</span>';
$this->assertContains(
$result,
$retval
);
// $cfg['Servers'][$i]['table_info']
$result = "\$cfg['Servers'][\$i]['table_info'] ... </th>"
. "<td class=\"right\">"
. "<span style=\"color:red\"><strong>not OK</strong></span>";
$this->assertContains(
$result,
$retval
);
// Display Features:
$result = 'Display Features: <span style="color:red">Disabled</span>';
$this->assertContains(
$result,
$retval
);
$relationsPara['db'] = false;
$retval = PMA_getRelationsParamDiagnostic($relationsPara);
$result = __('General relation features');
$this->assertContains(
$result,
$retval
);
$result = 'Configuration of pmadb… ';
$this->assertContains(
$result,
$retval
);
$result = "<strong>not OK</strong>";
$this->assertContains(
$result,
$retval
);
}
/**
* Test for PMA_getDisplayField
*
* @return void
*/
public function testPMAGetDisplayField()
{
$db = 'information_schema';
$table = 'CHARACTER_SETS';
$this->assertEquals(
'DESCRIPTION',
PMA_getDisplayField($db, $table)
);
$db = 'information_schema';
$table = 'TABLES';
$this->assertEquals(
'TABLE_COMMENT',
PMA_getDisplayField($db, $table)
);
$db = 'information_schema';
$table = 'PMA';
$this->assertEquals(
false,
PMA_getDisplayField($db, $table)
);
}
/**
* Test for PMA_getComments
*
* @return void
*/
public function testPMAGetComments()
{
$GLOBALS['cfg']['ServerDefault'] = 0;
$_SESSION['relation'] = array();
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$getColumnsResult = array(
array(
'Field' => 'field1',
'Type' => 'int(11)',
'Comment' => 'Comment1'
),
array(
'Field' => 'field2',
'Type' => 'text',
'Comment' => 'Comment1'
)
);
$dbi->expects($this->any())->method('getColumns')
->will($this->returnValue($getColumnsResult));
$GLOBALS['dbi'] = $dbi;
$db = 'information_schema';
$this->assertEquals(
array(''),
PMA_getComments($db)
);
$db = 'information_schema';
$table = 'TABLES';
$this->assertEquals(
array(
'field1' => 'Comment1',
'field2' => 'Comment1'
),
PMA_getComments($db, $table)
);
}
/**
* Test for PMA_tryUpgradeTransformations
*
* @return void
*/
public function testPMATryUpgradeTransformations()
{
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->any())
->method('tryQuery')
->will($this->returnValue(true));
$dbi->expects($this->any())
->method('numRows')
->will($this->returnValue(0));
$dbi->expects($this->any())
->method('getError')
->will($this->onConsecutiveCalls(true, false));
$GLOBALS['dbi'] = $dbi;
$GLOBALS['cfg']['Server']['pmadb'] = 'pmadb';
$GLOBALS['cfg']['Server']['column_info'] = 'column_info';
// Case 1
$actual = PMA_tryUpgradeTransformations();
$this->assertEquals(
false,
$actual
);
// Case 2
$actual = PMA_tryUpgradeTransformations();
$this->assertEquals(
true,
$actual
);
}
/**
* Test for PMA_searchColumnInForeigners
*
* @return void
*/
public function testPMASearchColumnInForeigners()
{
$foreigners = array(
'value' => array(
'master_field' => 'value',
'foreign_db' => 'GSoC14',
'foreign_table' => 'test',
'foreign_field' => 'value'
),
'foreign_keys_data' => array(
0 => array(
'constraint' => 'ad',
'index_list' => array('id', 'value'),
'ref_db_name' => 'GSoC14',
'ref_table_name' => 'table_1',
'ref_index_list' => array('id', 'value'),
'on_delete' => 'CASCADE',
'on_update' => 'CASCADE'
)
)
);
$foreigner = PMA_searchColumnInForeigners($foreigners, 'id');
$expected = array();
$expected['foreign_field'] = 'id';
$expected['foreign_db'] = 'GSoC14';
$expected['foreign_table'] = 'table_1';
$expected['constraint'] = 'ad';
$expected['on_delete'] = 'CASCADE';
$expected['on_update'] = 'CASCADE';
$this->assertEquals(
$expected,
$foreigner
);
}
}

View File

@ -0,0 +1,109 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for PMA_resultSetHasJustOneTable method
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/sql.lib.php';
/**
* Tests for PMA_resultSetHasJustOneTable method
*
* @package PhpMyAdmin-test
*/
class PMA_ResultSetHasJustOneTableTest extends PHPUnit_Framework_TestCase
{
/**
* Should return false if all columns are not from the same table
*
* @return void
*/
public function testWithMultipleTables()
{
$col1 = new stdClass;
$col1->table = 'table1';
$col2 = new stdClass;
$col2->table = 'table1';
$col3 = new stdClass;
$col3->table = 'table3';
$fields_meta = array($col1, $col2, $col3);
$this->assertFalse(PMA_resultSetHasJustOneTable($fields_meta));
// should not matter on where the odd column occurs
$fields_meta = array($col2, $col3, $col1);
$this->assertFalse(PMA_resultSetHasJustOneTable($fields_meta));
$fields_meta = array($col3, $col1, $col2);
$this->assertFalse(PMA_resultSetHasJustOneTable($fields_meta));
}
/**
* Should return true if all the columns are from the same table
*
* @return void
*/
public function testWithSameTable()
{
$col1 = new stdClass;
$col1->table = 'table1';
$col2 = new stdClass;
$col2->table = 'table1';
$col3 = new stdClass;
$col3->table = 'table1';
$fields_meta = array($col1, $col2, $col3);
$this->assertTrue(PMA_resultSetHasJustOneTable($fields_meta));
}
/**
* Should return true even if function columns (table is '') occur when others
* are from the same table.
*
* @return void
*/
public function testWithFunctionColumns()
{
$col1 = new stdClass;
$col1->table = 'table1';
$col2 = new stdClass;
$col2->table = '';
$col3 = new stdClass;
$col3->table = 'table1';
$fields_meta = array($col1, $col2, $col3);
$this->assertTrue(PMA_resultSetHasJustOneTable($fields_meta));
// should not matter on where the function column occurs
$fields_meta = array($col2, $col3, $col1);
$this->assertTrue(PMA_resultSetHasJustOneTable($fields_meta));
$fields_meta = array($col3, $col1, $col2);
$this->assertTrue(PMA_resultSetHasJustOneTable($fields_meta));
}
/**
* We can not say all the columns are from the same table if all the columns
* are funtion columns (table is '')
*
* @return void
*/
public function testWithOnlyFunctionColumns()
{
$col1 = new stdClass;
$col1->table = '';
$col2 = new stdClass;
$col2->table = '';
$col3 = new stdClass;
$col3->table = '';
$fields_meta = array($col1, $col2, $col3);
$this->assertFalse(PMA_resultSetHasJustOneTable($fields_meta));
}
}

View File

@ -0,0 +1,181 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for PMA_sanitize()
*
* @package PhpMyAdmin-test
*/
/*
* Include to test
*/
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/url_generating.lib.php';
/**
* tests for PMA_sanitize()
*
* @package PhpMyAdmin-test
*/
class PMA_Sanitize_Test extends PHPUnit_Framework_TestCase
{
/**
* Setup various pre conditions
*
* @return void
*/
function setUp()
{
}
/**
* Tests for proper escaping of XSS.
*
* @return void
*/
public function testXssInHref()
{
$this->assertEquals(
'[a@javascript:alert(\'XSS\');@target]link</a>',
PMA_sanitize('[a@javascript:alert(\'XSS\');@target]link[/a]')
);
}
/**
* Tests correct generating of link redirector.
*
* @return void
*/
public function testLink()
{
unset($GLOBALS['server']);
unset($GLOBALS['lang']);
unset($GLOBALS['collation_connection']);
$this->assertEquals(
'<a href="./url.php?url=https%3A%2F%2Fwww.phpmyadmin.net%2F" target="target">link</a>',
PMA_sanitize('[a@https://www.phpmyadmin.net/@target]link[/a]')
);
}
/**
* Tests links to documentation.
*
* @return void
*
* @dataProvider docLinks
*/
public function testDoc($link, $expected)
{
$this->assertEquals(
'<a href="./url.php?url=https%3A%2F%2Fdocs.phpmyadmin.net%2Fen%2Flatest%2F' . $expected . '" target="documentation">doclink</a>',
PMA_sanitize('[doc@' . $link . ']doclink[/doc]')
);
}
/**
* Data provider for sanitize [doc@foo] markup
*
* @return array
*/
public function docLinks()
{
return array(
array('foo', 'setup.html%23foo'),
array('cfg_TitleTable', 'config.html%23cfg_TitleTable'),
array('faq3-11', 'faq.html%23faq3-11'),
array('bookmarks@', 'bookmarks.html'),
);
}
/**
* Tests link target validation.
*
* @return void
*/
public function testInvalidTarget()
{
$this->assertEquals(
'[a@./Documentation.html@INVALID9]doc</a>',
PMA_sanitize('[a@./Documentation.html@INVALID9]doc[/a]')
);
}
/**
* Tests XSS escaping after valid link.
*
* @return void
*/
public function testLinkDocXss()
{
$this->assertEquals(
'[a@./Documentation.html" onmouseover="alert(foo)"]doc</a>',
PMA_sanitize('[a@./Documentation.html" onmouseover="alert(foo)"]doc[/a]')
);
}
/**
* Tests proper handling of multi link code.
*
* @return void
*/
public function testLinkAndXssInHref()
{
$this->assertEquals(
'<a href="./url.php?url=https%3A%2F%2Fdocs.phpmyadmin.net%2F">doc</a>[a@javascript:alert(\'XSS\');@target]link</a>',
PMA_sanitize('[a@https://docs.phpmyadmin.net/]doc[/a][a@javascript:alert(\'XSS\');@target]link[/a]')
);
}
/**
* Test escaping of HTML tags
*
* @return void
*/
public function testHtmlTags()
{
$this->assertEquals(
'&lt;div onclick=""&gt;',
PMA_sanitize('<div onclick="">')
);
}
/**
* Tests basic BB code.
*
* @return void
*/
public function testBBCode()
{
$this->assertEquals(
'<strong>strong</strong>',
PMA_sanitize('[strong]strong[/strong]')
);
}
/**
* Tests output escaping.
*
* @return void
*/
public function testEscape()
{
$this->assertEquals(
'&lt;strong&gt;strong&lt;/strong&gt;',
PMA_sanitize('[strong]strong[/strong]', true)
);
}
/**
* Test for PMA_sanitizeFilename
*
* @return void
*/
public function testSanitizeFilename()
{
$this->assertEquals(
'File_name_123',
PMA_sanitizeFilename('File_name 123')
);
}
}

View File

@ -0,0 +1,157 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for select_server.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/select_server.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/js_escape.lib.php';
/**
* PMA_SelectServer_Test class
*
* this class is for testing select_server.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_SelectServer_Test extends PHPUnit_Framework_TestCase
{
/**
* Prepares environment for the test.
*
* @return void
*/
public function setUp()
{
//$_REQUEST
$_REQUEST['log'] = "index1";
$_REQUEST['pos'] = 3;
//$GLOBALS
$GLOBALS['cfg']['MaxRows'] = 10;
$GLOBALS['server'] = 1;
$GLOBALS['cfg']['ServerDefault'] = "server";
$GLOBALS['cfg']['RememberSorting'] = true;
$GLOBALS['cfg']['SQP'] = array();
$GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] = 1000;
$GLOBALS['cfg']['ShowSQL'] = true;
$GLOBALS['cfg']['TableNavigationLinksMode'] = 'icons';
$GLOBALS['cfg']['LimitChars'] = 100;
$GLOBALS['table'] = "table";
$GLOBALS['pmaThemeImage'] = 'image';
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
}
/**
* Test for PMA_selectServer
*
* @return void
*/
public function testPMASelectServer()
{
$not_only_options = false;
$omit_fieldset = false;
$GLOBALS['cfg']['DefaultTabServer'] = "welcome";
$GLOBALS['cfg']['Servers'] = array(
'0' => array(
'host'=>'host0',
'port'=>'port0',
'only_db'=>'only_db0',
'user'=>'user0',
'auth_type'=>'config',
),
'1' => array(
'host'=>'host1',
'port'=>'port1',
'only_db'=>'only_db1',
'user'=>'user1',
'auth_type'=>'config',
),
);
//$not_only_options=false & $omit_fieldset=false
$html = PMA_selectServer($not_only_options, $omit_fieldset);
$server = $GLOBALS['cfg']['Servers']['0'];
//server items
$this->assertContains(
$server['host'],
$html
);
$this->assertContains(
$server['port'],
$html
);
$this->assertContains(
$server['only_db'],
$html
);
$this->assertContains(
$server['user'],
$html
);
$not_only_options = true;
$omit_fieldset = true;
$GLOBALS['cfg']['DisplayServersList'] = null;
//$not_only_options=true & $omit_fieldset=true
$html = PMA_selectServer($not_only_options, $omit_fieldset);
//$GLOBALS['cfg']['DefaultTabServer']
$this->assertContains(
PMA\libraries\Util::getScriptNameForOption(
$GLOBALS['cfg']['DefaultTabServer'], 'server'
),
$html
);
//labels
$this->assertContains(
__('Current server:'),
$html
);
$this->assertContains(
'(' . __('Servers') . ')',
$html
);
//server items
$server = $GLOBALS['cfg']['Servers']['0'];
$this->assertContains(
$server['host'],
$html
);
$this->assertContains(
$server['port'],
$html
);
$this->assertContains(
$server['only_db'],
$html
);
$this->assertContains(
$server['user'],
$html
);
}
}

View File

@ -0,0 +1,81 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for server_common.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/server_common.lib.php';
/**
* PMA_ServerCommon_Test class
*
* this class is for testing server_common.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_ServerCommon_Test extends PHPUnit_Framework_TestCase
{
/**
* Prepares environment for the test.
*
* @return void
*/
public function setUp()
{
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
}
/**
* Test for PMA_getHtmlForSubPageHeader
*
* @return void
*/
public function testPMAGetSubPageHeader()
{
//server_engines
$html = PMA_getHtmlForSubPageHeader("engines");
$this->assertContains(
'<img src="themes/dot.gif" title="" alt="" class="icon ic_b_engine" />',
$html
);
$this->assertContains(
'Storage Engines',
$html
);
//server_databases
$html = PMA_getHtmlForSubPageHeader("databases");
$this->assertContains(
'<img src="themes/dot.gif" title="" alt="" class="icon ic_s_db" />',
$html
);
$this->assertContains(
'Databases',
$html
);
//server_replication
$html = PMA_getHtmlForSubPageHeader("replication");
$replication_img = '<img src="themes/dot.gif" title="" '
. 'alt="" class="icon ic_s_replication" />';
$this->assertContains(
$replication_img,
$html
);
$this->assertContains(
'Replication',
$html
);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,308 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for replication_gui.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/replication.inc.php';
require_once 'libraries/replication_gui.lib.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/js_escape.lib.php';
/**
* PMA_Serverreplication_Test class
*
* this class is for testing replication_gui.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_ServerReplication_Test extends PHPUnit_Framework_TestCase
{
/**
* Prepares environment for the test.
*
* @return void
*/
public function setUp()
{
//$_REQUEST
$_REQUEST['log'] = "index1";
$_REQUEST['pos'] = 3;
$_REQUEST['mr_adduser'] = "mr_adduser";
//$GLOBALS
$GLOBALS['cfg']['MaxRows'] = 10;
$GLOBALS['cfg']['ServerDefault'] = "server";
$GLOBALS['cfg']['RememberSorting'] = true;
$GLOBALS['cfg']['SQP'] = array();
$GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] = 1000;
$GLOBALS['cfg']['ShowSQL'] = true;
$GLOBALS['cfg']['TableNavigationLinksMode'] = 'icons';
$GLOBALS['cfg']['LimitChars'] = 100;
$GLOBALS['cfg']['DBG']['sql'] = false;
$GLOBALS['cfg']['ShowHint'] = true;
$GLOBALS['table'] = "table";
$GLOBALS['url_params'] = array();
$GLOBALS['pmaThemeImage'] = 'image';
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
//Mock DBI
$slave_host = array(
array('Server_id'=>'Server_id1', 'Host'=>'Host1'),
array('Server_id'=>'Server_id2', 'Host'=>'Host2'),
);
$fetchResult = array(
array(
"SHOW SLAVE HOSTS",
null,
null,
null,
0,
$slave_host
),
);
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->any())->method('fetchResult')
->will($this->returnValueMap($fetchResult));
$fields_info = array(
"Host" => array(
"Field" => "host",
"Type" => "char(60)",
"Null" => "NO",
)
);
$dbi->expects($this->any())->method('getColumns')
->will($this->returnValue($fields_info));
$GLOBALS['dbi'] = $dbi;
}
/**
* Test for PMA_getHtmlForMasterReplication
*
* @return void
* @group medium
*/
public function testPMAGetHtmlForMasterReplication()
{
global $master_variables_alerts;
global $master_variables_oks;
global $strReplicationStatus_master;
$master_variables_alerts = null;
$master_variables_oks = null;
$strReplicationStatus_master = null;
//Call the test function
$html = PMA_getHtmlForMasterReplication();
//validate 1: Master replication
$this->assertContains(
'<legend>Master replication</legend>',
$html
);
$this->assertContains(
'This server is configured as master in a replication process.',
$html
);
//validate 2: PMA_getHtmlForReplicationStatusTable
$this->assertContains(
'<div id="replication_master_section"',
$html
);
//$master_variables
$this->assertContains(
"Binlog_Do_DB",
$html
);
$this->assertContains(
"Binlog_Ignore_DB",
$html
);
//$server_master_replication
$this->assertContains(
"master-bin.000030",
$html
);
//validate 3: PMA_getHtmlForReplicationSlavesTable
$this->assertContains(
'replication_slaves_section',
$html
);
$this->assertContains(
'<th>Server ID</th>',
$html
);
$this->assertContains(
'<th>Host</th>',
$html
);
//slave host
$this->assertContains(
'<td class="value">Server_id1</td>',
$html
);
$this->assertContains(
'<td class="value">Server_id2</td>',
$html
);
$this->assertContains(
'<td class="value">Host1</td>',
$html
);
$this->assertContains(
'<td class="value">Host2</td>',
$html
);
//Notice
$this->assertContains(
'Only slaves started with the',
$html
);
//validate 4: navigation URL
$this->assertContains(
'<a href="server_replication.php',
$html
);
$this->assertContains(
'Add slave replication user',
$html
);
//validate 5: 'Add replication slave user' form
$this->assertContains(
'<div id="master_addslaveuser_gui">',
$html
);
}
/**
* Test for PMA_getHtmlForNotServerReplication
*
* @return void
*/
public function testPMAGetHtmlForNotServerReplication()
{
//Call the test function
$html = PMA_getHtmlForNotServerReplication();
$this->assertContains(
'<legend>Master replication</legend>',
$html
);
$this->assertContains(
'This server is not configured as master in a replication process.',
$html
);
}
/**
* Test for PMA_getHtmlForSlaveConfiguration
*
* @return void
*/
public function testPMAGetHtmlForSlaveConfiguration()
{
global $server_slave_replication;
//Call the test function
$html = PMA_getHtmlForSlaveConfiguration(
true,
$server_slave_replication
);
//legend
$this->assertContains(
'<legend>Slave replication</legend>',
$html
);
$this->assertContains(
'<div id="slave_configuration_gui">',
$html
);
//notice
$this->assertContains(
'Server is configured as slave in a replication process.',
$html
);
//slave session
$this->assertContains(
'<div id="replication_slave_section"',
$html
);
//variable
$this->assertContains(
'Master_SSL_CA_Path',
$html
);
$this->assertContains(
'Master_SSL_Cert',
$html
);
$this->assertContains(
'Master_SSL_Cipher',
$html
);
$this->assertContains(
'Seconds_Behind_Master',
$html
);
}
/**
* Test for PMA_getHtmlForReplicationChangeMaster
*
* @return void
*/
public function testPMAGetHtmlForReplicationChangeMaster()
{
//Call the test function
$html = PMA_getHtmlForReplicationChangeMaster("slave_changemaster");
$this->assertContains(
'<form method="post" action="server_replication.php">',
$html
);
$this->assertContains(
'Slave configuration',
$html
);
$this->assertContains(
'Change or reconfigure master server',
$html
);
$notice = 'Make sure, you have unique server-id '
. 'in your configuration file (my.cnf)';
$this->assertContains(
$notice,
$html
);
}
}

View File

@ -0,0 +1,186 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for server_status_advisor.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\ServerStatusData;
use PMA\libraries\Theme;
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/server_status_advisor.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/js_escape.lib.php';
/**
* class PMA_ServerStatusAdvisor_Test
*
* this class is for testing server_status_advisor.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_ServerStatusAdvisor_Test extends PHPUnit_Framework_TestCase
{
/**
* Prepares environment for the test.
*
* @return void
*/
public $ServerStatusData;
/**
* Test for setUp
*
* @return void
*/
public function setUp()
{
//$_REQUEST
$_REQUEST['log'] = "index1";
$_REQUEST['pos'] = 3;
//$GLOBALS
$GLOBALS['cfg']['MaxRows'] = 10;
$GLOBALS['cfg']['ServerDefault'] = "server";
$GLOBALS['cfg']['RememberSorting'] = true;
$GLOBALS['cfg']['SQP'] = array();
$GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] = 1000;
$GLOBALS['cfg']['ShowSQL'] = true;
$GLOBALS['cfg']['TableNavigationLinksMode'] = 'icons';
$GLOBALS['cfg']['LimitChars'] = 100;
$GLOBALS['cfg']['DBG']['sql'] = false;
$GLOBALS['cfg']['Server']['host'] = "localhost";
$GLOBALS['cfg']['ShowHint'] = true;
$GLOBALS['cfg']['ActionLinksMode'] = 'icons';
$GLOBALS['PMA_PHP_SELF'] = PMA_getenv('PHP_SELF');
$GLOBALS['replication_info']['master']['status'] = false;
$GLOBALS['replication_info']['slave']['status'] = false;
$GLOBALS['table'] = "table";
$GLOBALS['pmaThemeImage'] = 'image';
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
//Mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
//this data is needed when ServerStatusData constructs
$server_status = array(
"Aborted_clients" => "0",
"Aborted_connects" => "0",
"Com_delete_multi" => "0",
"Com_create_function" => "0",
"Com_empty_query" => "0",
);
$server_variables= array(
"auto_increment_increment" => "1",
"auto_increment_offset" => "1",
"automatic_sp_privileges" => "ON",
"back_log" => "50",
"big_tables" => "OFF",
);
$fetchResult = array(
array(
"SHOW GLOBAL STATUS",
0,
1,
null,
0,
$server_status
),
array(
"SHOW GLOBAL VARIABLES",
0,
1,
null,
0,
$server_variables
),
array(
"SELECT concat('Com_', variable_name), variable_value "
. "FROM data_dictionary.GLOBAL_STATEMENTS",
0,
1,
null,
0,
$server_status
),
);
$dbi->expects($this->any())->method('fetchResult')
->will($this->returnValueMap($fetchResult));
$GLOBALS['dbi'] = $dbi;
$this->ServerStatusData = new ServerStatusData();
}
/**
* Test for PMA_getHTMLForAdvisor
*
* @return void
* @group medium
*/
public function testPMAGetHTMLForAdvisor()
{
//Call the test function
$html = PMA_getHTMLForAdvisor();
//validate 1: Advisor Instructions
$this->assertContains(
'<a href="#openAdvisorInstructions">',
$html
);
$this->assertContains(
'<div id="advisorInstructionsDialog"',
$html
);
//notice
$this->assertContains(
'The Advisor system can provide recommendations',
$html
);
$this->assertContains(
'Do note however that this system provides recommendations',
$html
);
//Advisor datas, we just validate that the Advisor Array is right
//Advisor logic related with OS should be validate on class Advisor
$this->assertContains(
'<div id="advisorData" style="display:none;">',
$html
);
//Advisor data Json encode Items
$this->assertContains(
htmlspecialchars(json_encode("parse")),
$html
);
$this->assertContains(
htmlspecialchars(json_encode("errors")),
$html
);
$this->assertContains(
htmlspecialchars(json_encode("run")),
$html
);
}
}

View File

@ -0,0 +1,432 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for PMA_server_status_monitor.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\ServerStatusData;
use PMA\libraries\Theme;
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/server_status_monitor.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/js_escape.lib.php';
/**
* class PMA_ServerStatusMonitor_Test
*
* this class is for testing PMA_server_status_monitor.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_ServerStatusMonitor_Test extends PHPUnit_Framework_TestCase
{
/**
* Prepares environment for the test.
*
* @return void
*/
public $ServerStatusData;
/**
* Test for setUp
*
* @return void
*/
public function setUp()
{
//$_REQUEST
$_REQUEST['log'] = "index1";
$_REQUEST['pos'] = 3;
//$GLOBALS
$GLOBALS['cfg']['MaxRows'] = 10;
$GLOBALS['cfg']['ServerDefault'] = "server";
$GLOBALS['cfg']['RememberSorting'] = true;
$GLOBALS['cfg']['SQP'] = array();
$GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] = 1000;
$GLOBALS['cfg']['ShowSQL'] = true;
$GLOBALS['cfg']['Server']['host'] = "localhost";
$GLOBALS['cfg']['ShowHint'] = true;
$GLOBALS['PMA_PHP_SELF'] = PMA_getenv('PHP_SELF');
$GLOBALS['replication_info']['master']['status'] = false;
$GLOBALS['replication_info']['slave']['status'] = false;
$GLOBALS['table'] = "table";
$GLOBALS['pmaThemeImage'] = 'image';
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
//Mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
//this data is needed when ServerStatusData constructs
$server_status = array(
"Aborted_clients" => "0",
"Aborted_connects" => "0",
"Com_delete_multi" => "0",
"Com_create_function" => "0",
"Com_empty_query" => "0",
);
$server_variables= array(
"auto_increment_increment" => "1",
"auto_increment_offset" => "1",
"automatic_sp_privileges" => "ON",
"back_log" => "50",
"big_tables" => "OFF",
);
$fetchResult = array(
array(
"SHOW GLOBAL STATUS",
0,
1,
null,
0,
$server_status
),
array(
"SHOW GLOBAL VARIABLES",
0,
1,
null,
0,
$server_variables
),
array(
"SELECT concat('Com_', variable_name), variable_value "
. "FROM data_dictionary.GLOBAL_STATEMENTS",
0,
1,
null,
0,
$server_status
),
);
$dbi->expects($this->any())->method('fetchResult')
->will($this->returnValueMap($fetchResult));
$GLOBALS['dbi'] = $dbi;
$this->ServerStatusData = new ServerStatusData();
}
/**
* Test for PMA_getHtmlForMonitor
*
* @return void
* @group medium
*/
public function testPMAGetHtmlForMonitor()
{
//Call the test function
$html = PMA_getHtmlForMonitor($this->ServerStatusData);
//validate 1: PMA_getHtmlForTabLinks
$this->assertContains(
'<div class="tabLinks">',
$html
);
$this->assertContains(
__('Start Monitor'),
$html
);
$this->assertContains(
__('Settings'),
$html
);
$this->assertContains(
__('Done dragging (rearranging) charts'),
$html
);
//validate 2: PMA_getHtmlForSettingsDialog
$this->assertContains(
'<div class="popupContent settingsPopup">',
$html
);
$this->assertContains(
'<a href="#settingsPopup" class="popupLink">',
$html
);
$this->assertContains(
__('Enable charts dragging'),
$html
);
$this->assertContains(
'<option>3</option>',
$html
);
//validate 3: PMA_getHtmlForInstructionsDialog
$this->assertContains(
__('Monitor Instructions'),
$html
);
$this->assertContains(
'monitorInstructionsDialog',
$html
);
//validate 4: PMA_getHtmlForAddChartDialog
$this->assertContains(
'<div id="addChartDialog"',
$html
);
$this->assertContains(
'<div id="chartVariableSettings">',
$html
);
$this->assertContains(
'<option>Processes</option>',
$html
);
$this->assertContains(
'<option>Connections</option>',
$html
);
}
/**
* Test for PMA_getHtmlForClientSideDataAndLinks
*
* @return void
*/
public function testPMAGetHtmlForClientSideDataAndLinks()
{
//Call the test function
$html = PMA_getHtmlForClientSideDataAndLinks($this->ServerStatusData);
//validate 1: PMA_getHtmlForClientSideDataAndLinks
$from = '<form id="js_data" class="hide">'
. '<input type="hidden" name="server_time"';
$this->assertContains(
$from,
$html
);
//validate 2: inputs
$this->assertContains(
'<input type="hidden" name="is_superuser"',
$html
);
$this->assertContains(
'<input type="hidden" name="server_db_isLocal"',
$html
);
$this->assertContains(
'<div id="explain_docu" class="hide">',
$html
);
}
/**
* Test for PMA_getJsonForLogDataTypeSlow
*
* @return void
*/
public function testPMAGetJsonForLogDataTypeSlow()
{
//Mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$value = array(
'sql_text' => 'insert sql_text',
'#' => 'types',
);
$value2 = array(
'sql_text' => 'update sql_text',
'#' => 'types2',
);
$dbi->expects($this->at(1))->method('fetchAssoc')
->will($this->returnValue($value));
$dbi->expects($this->at(2))->method('fetchAssoc')
->will($this->returnValue($value2));
$dbi->expects($this->at(3))->method('fetchAssoc')
->will($this->returnValue(false));
$GLOBALS['dbi'] = $dbi;
//Call the test function
$start = 0;
$end = 10;
$ret = PMA_getJsonForLogDataTypeSlow($start, $end);
$result_rows = array(
array('sql_text' => 'insert sql_text', '#' => 'types'),
array('sql_text' => 'update sql_text', '#' => 'types2')
);
$result_sum = array('insert' =>0, 'TOTAL' =>0, 'update' => 0);
$this->assertEquals(
2,
$ret['numRows']
);
$this->assertEquals(
$result_rows,
$ret['rows']
);
$this->assertEquals(
$result_sum,
$ret['sum']
);
}
/**
* Test for PMA_getJsonForLogDataTypeGeneral
*
* @return void
*/
public function testPMAGetJsonForLogDataTypeGeneral()
{
$_REQUEST['limitTypes'] = true;
//Mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$value = array(
'sql_text' => 'insert sql_text',
'#' => 'types',
'argument' => 'argument argument2',
);
$value2 = array(
'sql_text' => 'update sql_text',
'#' => 'types2',
'argument' => 'argument3 argument4',
);
$dbi->expects($this->at(1))->method('fetchAssoc')
->will($this->returnValue($value));
$dbi->expects($this->at(2))->method('fetchAssoc')
->will($this->returnValue($value2));
$dbi->expects($this->at(3))->method('fetchAssoc')
->will($this->returnValue(false));
$GLOBALS['dbi'] = $dbi;
//Call the test function
$start = 0;
$end = 10;
$ret = PMA_getJsonForLogDataTypeGeneral($start, $end);
$result_rows = array(
$value,
$value2,
);
$result_sum = array('argument' =>0, 'TOTAL' =>0, 'argument3' => 0);
$this->assertEquals(
2,
$ret['numRows']
);
$this->assertEquals(
$result_rows,
$ret['rows']
);
$this->assertEquals(
$result_sum,
$ret['sum']
);
}
/**
* Test for PMA_getJsonForLoggingVars
*
* @return void
*/
public function testPMAGetJsonForLoggingVars()
{
$_REQUEST['varName'] = "varName";
//Mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$value = array(
'sql_text' => 'insert sql_text',
'#' => 'types',
'argument' => 'argument argument2',
);
$dbi->expects($this->any())->method('fetchResult')
->will($this->returnValue($value));
$GLOBALS['dbi'] = $dbi;
//Call the test function
$ret = PMA_getJsonForLoggingVars();
//validate that, the result is the same as fetchResult
$this->assertEquals(
$value,
$ret
);
}
/**
* Test for PMA_getJsonForQueryAnalyzer
*
* @return void
*/
public function testPMAGetJsonForQueryAnalyzer()
{
$_REQUEST['database'] = "database";
$_REQUEST['query'] = 'query';
$GLOBALS['server'] = 'server';
$GLOBALS['cached_affected_rows'] = 'cached_affected_rows';
$_SESSION['cache']['server_server']['profiling_supported'] = true;
//Mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$value = array(
'sql_text' => 'insert sql_text',
'#' => 'types',
'argument' => 'argument argument2',
);
$dbi->expects($this->at(4))->method('fetchAssoc')
->will($this->returnValue($value));
$dbi->expects($this->at(5))->method('fetchAssoc')
->will($this->returnValue(false));
$GLOBALS['dbi'] = $dbi;
//Call the test function
$ret = PMA_getJsonForQueryAnalyzer();
$this->assertEquals(
'cached_affected_rows',
$ret['affectedRows']
);
$this->assertEquals(
array(),
$ret['profiling']
);
$this->assertEquals(
array($value),
$ret['explain']
);
}
}

View File

@ -0,0 +1,277 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for server_status_processes.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/server_status_processes.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/sanitizing.lib.php';
/**
* class PMA_ServerStatusProcesses_Test
*
* this class is for testing server_status_processes.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_ServerStatusProcesses_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for setUp
*
* @return void
*/
public function setUp()
{
$GLOBALS['cfg']['Server']['host'] = "localhost";
$GLOBALS['PMA_PHP_SELF'] = PMA_getenv('PHP_SELF');
$GLOBALS['replication_info']['master']['status'] = true;
$GLOBALS['replication_info']['slave']['status'] = false;
$GLOBALS['replication_types'] = array();
$GLOBALS['pmaThemeImage'] = 'image';
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
//Mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$GLOBALS['dbi'] = $dbi;
}
/**
* Test for PMA_getHtmlForProcessListAutoRefresh
*
* @return void
* @group medium
*/
public function testPMAGetHtmlForProcessListAutoRefresh()
{
$html = PMA_getHtmlForProcessListAutoRefresh();
// Test Notice
$this->assertContains(
'Note: Enabling the auto refresh here might cause '
. 'heavy traffic between the web server and the MySQL server.',
$html
);
// Test tab links
$this->assertContains(
'<div class="tabLinks">',
$html
);
$this->assertContains(
'<a id="toggleRefresh" href="#">',
$html
);
$this->assertContains(
'play',
$html
);
$this->assertContains(
'Start auto refresh</a>',
$html
);
$this->assertContains(
'<label>Refresh rate: <select',
$html
);
$this->assertContains(
'<option value="5" selected="selected">5 seconds</option>',
$html
);
}
/**
* Test for PMA_getHtmlForServerProcesslist
*
* @return void
* @group medium
*/
public function testPMAGetHtmlForServerProcessList()
{
$process = array(
"User" => "User1",
"Host" => "Host1",
"Id" => "Id1",
"db" => "db1",
"Command" => "Command1",
"Info" => "Info1",
"State" => "State1",
"Time" => "Time1"
);
$GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] = 12;
$GLOBALS['dbi']->expects($this->any())->method('fetchAssoc')
->will($this->onConsecutiveCalls($process));
$html = PMA_getHtmlForServerProcesslist();
// Test process table
$this->assertContains(
'<table id="tableprocesslist" '
. 'class="data clearfloat noclick sortable">',
$html
);
$this->assertContains(
'<th>Processes</th>',
$html
);
$this->assertContains(
'Show Full Queries',
$html
);
$this->assertContains(
'server_status_processes.php',
$html
);
$_REQUEST['full'] = true;
$_REQUEST['sort_order'] = 'ASC';
$_REQUEST['order_by_field'] = 'db';
$_REQUEST['column_name'] = 'Database';
$html = PMA_getHtmlForServerProcesslist();
$this->assertContains(
'Truncate Shown Queries',
$html
);
$this->assertContains(
'Database',
$html
);
$this->assertContains(
'DESC',
$html
);
$_REQUEST['sort_order'] = 'DESC';
$_REQUEST['order_by_field'] = 'Host';
$_REQUEST['column_name'] = 'Host';
$html = PMA_getHtmlForServerProcesslist();
$this->assertContains(
'Host',
$html
);
$this->assertContains(
'ASC',
$html
);
}
/**
* Test for PMA_getHtmlForServerProcessItem
*
* @return void
*/
public function testPMAGetHtmlForServerProcessItem()
{
//parameters
$process = array(
"user" => "User1",
"host" => "Host1",
"id" => "Id1",
"db" => "db1",
"command" => "Command1",
"info" => "Info1",
"state" => "State1",
"time" => "Time1",
);
$odd_row = true;
$show_full_sql = true;
$_REQUEST['sort_order'] = "desc";
$_REQUEST['order_by_field'] = "process";
$GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] = 12;
//Call the test function
$html = PMA_getHtmlForServerProcessItem($process, $odd_row, $show_full_sql);
//validate 1: $kill_process
$url_params = array(
'kill' => $process['id'],
'ajax_request' => true
);
$kill_process = 'server_status_processes.php'
. PMA_URL_getCommon($url_params);
$this->assertContains(
$kill_process,
$html
);
$this->assertContains(
'ajax kill_process',
$html
);
$this->assertContains(
__('Kill'),
$html
);
//validate 2: $process['User']
$this->assertContains(
htmlspecialchars($process['user']),
$html
);
//validate 3: $process['Host']
$this->assertContains(
htmlspecialchars($process['host']),
$html
);
//validate 4: $process['db']
$this->assertContains(
__('None'),
$html
);
//validate 5: $process['Command']
$this->assertContains(
htmlspecialchars($process['command']),
$html
);
//validate 6: $process['Time']
$this->assertContains(
$process['time'],
$html
);
//validate 7: $process['state']
$this->assertContains(
$process['state'],
$html
);
//validate 8: $process['info']
$this->assertContains(
$process['info'],
$html
);
unset($process['info']);
$html = PMA_getHtmlForServerProcessItem($process, $odd_row, $show_full_sql);
$this->assertContains(
'---',
$html
);
}
}

View File

@ -0,0 +1,239 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for server_status_queries.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\ServerStatusData;
use PMA\libraries\Theme;
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/server_status_queries.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/js_escape.lib.php';
/**
* class PMA_ServerStatusVariables_Test
*
* this class is for testing server_status_queries.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_ServerStatusQueries_Test extends PHPUnit_Framework_TestCase
{
/**
* Prepares environment for the test.
*
* @return void
*/
public $ServerStatusData;
/**
* Test for setUp
*
* @return void
*/
public function setUp()
{
//$GLOBALS
$GLOBALS['cfg']['MaxRows'] = 10;
$GLOBALS['cfg']['ServerDefault'] = "server";
$GLOBALS['cfg']['RememberSorting'] = true;
$GLOBALS['cfg']['SQP'] = array();
$GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] = 1000;
$GLOBALS['cfg']['ShowSQL'] = true;
$GLOBALS['cfg']['TableNavigationLinksMode'] = 'icons';
$GLOBALS['cfg']['LimitChars'] = 100;
$GLOBALS['cfg']['DBG']['sql'] = false;
$GLOBALS['cfg']['Server']['host'] = "localhost";
$GLOBALS['PMA_PHP_SELF'] = PMA_getenv('PHP_SELF');
$GLOBALS['replication_info']['master']['status'] = false;
$GLOBALS['replication_info']['slave']['status'] = false;
$GLOBALS['table'] = "table";
$GLOBALS['pmaThemeImage'] = 'image';
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
//Mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
//this data is needed when ServerStatusData constructs
$server_status = array(
"Aborted_clients" => "0",
"Aborted_connects" => "0",
"Com_delete_multi" => "0",
"Com_create_function" => "0",
"Com_empty_query" => "0",
);
$server_variables= array(
"auto_increment_increment" => "1",
"auto_increment_offset" => "1",
"automatic_sp_privileges" => "ON",
"back_log" => "50",
"big_tables" => "OFF",
);
$fetchResult = array(
array(
"SHOW GLOBAL STATUS",
0,
1,
null,
0,
$server_status
),
array(
"SHOW GLOBAL VARIABLES",
0,
1,
null,
0,
$server_variables
)
);
$dbi->expects($this->any())->method('fetchResult')
->will($this->returnValueMap($fetchResult));
$GLOBALS['dbi'] = $dbi;
$this->ServerStatusData = new ServerStatusData();
$upTime = "10h";
$this->ServerStatusData->status['Uptime'] = $upTime;
$this->ServerStatusData->used_queries = array(
"Com_change_db" => "15",
"Com_select" => "12",
"Com_set_option" => "54",
"Com_show_databases" => "16",
"Com_show_status" => "14",
"Com_show_tables" => "13",
);
}
/**
* Test for PMA_getHtmlForQueryStatistics
*
* @return void
*/
public function testPMAGetHtmlForQueryStatistics()
{
//Call the test function
$html = PMA_getHtmlForQueryStatistics($this->ServerStatusData);
$hour_factor = 3600 / $this->ServerStatusData->status['Uptime'];
$used_queries = $this->ServerStatusData->used_queries;
$total_queries = array_sum($used_queries);
$questions_from_start = sprintf(
__('Questions since startup: %s'),
PMA\libraries\Util::formatNumber($total_queries, 0)
);
//validate 1: PMA_getHtmlForQueryStatistics
$this->assertContains(
'<h3 id="serverstatusqueries">',
$html
);
$this->assertContains(
$questions_from_start,
$html
);
//validate 2: per hour
$this->assertContains(
__('per hour:'),
$html
);
$this->assertContains(
PMA\libraries\Util::formatNumber($total_queries * $hour_factor, 0),
$html
);
//validate 3:per minute
$value_per_minute = PMA\libraries\Util::formatNumber(
$total_queries * 60 / $this->ServerStatusData->status['Uptime'],
0
);
$this->assertContains(
__('per minute:'),
$html
);
$this->assertContains(
$value_per_minute,
$html
);
}
/**
* Test for PMA_getHtmlForServerStatusQueriesDetails
*
* @return void
*/
public function testPMAGetHtmlForServerStatusQueriesDetails()
{
//Call the test function
$html = PMA_getHtmlForServerStatusQueriesDetails($this->ServerStatusData);
//validate 1: PMA_getHtmlForServerStatusQueriesDetails
$this->assertContains(
__('Statements'),
$html
);
//validate 2: used queries
$this->assertContains(
htmlspecialchars("change db"),
$html
);
$this->assertContains(
'54',
$html
);
$this->assertContains(
htmlspecialchars("select"),
$html
);
$this->assertContains(
htmlspecialchars("set option"),
$html
);
$this->assertContains(
htmlspecialchars("show databases"),
$html
);
$this->assertContains(
htmlspecialchars("show status"),
$html
);
$this->assertContains(
htmlspecialchars("show tables"),
$html
);
//validate 3:serverstatusquerieschart
$this->assertContains(
'<div id="serverstatusquerieschart"></div>',
$html
);
$this->assertContains(
'<div id="serverstatusquerieschart_data"',
$html
);
}
}

View File

@ -0,0 +1,271 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for server_status.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\ServerStatusData;
use PMA\libraries\Theme;
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/server_status.lib.php';
require_once 'libraries/database_interface.inc.php';
/**
* class PMA_ServerStatus_Test
*
* this class is for testing server_status.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_ServerStatus_Test extends PHPUnit_Framework_TestCase
{
/**
* Prepares environment for the test.
*
* @return void
*/
public $ServerStatusData;
/**
* Test for setUp
*
* @return void
*/
public function setUp()
{
$GLOBALS['cfg']['Server']['host'] = "localhost";
$GLOBALS['cfg']['ShowHint'] = true;
$GLOBALS['cfg']['ActionLinksMode'] = 'icons';
$GLOBALS['PMA_PHP_SELF'] = PMA_getenv('PHP_SELF');
$GLOBALS['replication_info']['master']['status'] = true;
$GLOBALS['replication_info']['slave']['status'] = false;
$GLOBALS['replication_types'] = array();
$GLOBALS['table'] = "table";
$GLOBALS['pmaThemeImage'] = 'image';
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
//Mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
//this data is needed when ServerStatusData constructs
$server_status = array(
"Aborted_clients" => "0",
"Aborted_connects" => "0",
"Com_delete_multi" => "0",
"Com_create_function" => "0",
"Com_empty_query" => "0",
"Com_execute_sql" => 2,
"Com_stmt_execute" => 2,
);
$server_variables= array(
"auto_increment_increment" => "1",
"auto_increment_offset" => "1",
"automatic_sp_privileges" => "ON",
"back_log" => "50",
"big_tables" => "OFF",
);
$fetchResult = array(
array(
"SHOW GLOBAL STATUS",
0,
1,
null,
0,
$server_status
),
array(
"SHOW GLOBAL VARIABLES",
0,
1,
null,
0,
$server_variables
),
array(
"SELECT concat('Com_', variable_name), variable_value "
. "FROM data_dictionary.GLOBAL_STATEMENTS",
0,
1,
null,
0,
$server_status
),
);
$dbi->expects($this->at(0))
->method('tryQuery')
->with('SHOW GLOBAL STATUS')
->will($this->returnValue(true));
$dbi->expects($this->at(1))
->method('fetchRow')
->will($this->returnValue(array("Aborted_clients", "0")));
$dbi->expects($this->at(2))
->method('fetchRow')
->will($this->returnValue(array("Aborted_connects", "0")));
$dbi->expects($this->at(3))
->method('fetchRow')
->will($this->returnValue(array("Com_delete_multi", "0")));
$dbi->expects($this->at(4))
->method('fetchRow')
->will($this->returnValue(array("Com_create_function", "0")));
$dbi->expects($this->at(5))
->method('fetchRow')
->will($this->returnValue(array("Com_empty_query", "0")));
$dbi->expects($this->at(6))
->method('fetchRow')
->will($this->returnValue(false));
$dbi->expects($this->at(7))->method('freeResult');
$dbi->expects($this->any())->method('fetchResult')
->will($this->returnValueMap($fetchResult));
$GLOBALS['dbi'] = $dbi;
$this->ServerStatusData = new ServerStatusData();
}
/**
* Test for PMA_getHtmlForServerStatus
*
* @return void
* @group medium
*/
public function testPMAGetHtmlForServerStatus()
{
//parameters
$upTime = "10h";
$bytes_received = 100;
$bytes_sent = 200;
$max_used_conn = 500;
$aborted_conn = 200;
$conn = 1000;
$this->ServerStatusData->status['Uptime'] = $upTime;
$this->ServerStatusData->status['Bytes_received'] = $bytes_received;
$this->ServerStatusData->status['Bytes_sent'] = $bytes_sent;
$this->ServerStatusData->status['Max_used_connections'] = $max_used_conn;
$this->ServerStatusData->status['Aborted_connects'] = $aborted_conn;
$this->ServerStatusData->status['Connections'] = $conn;
//Call the test function
$html = PMA_getHtmlForServerStatus($this->ServerStatusData);
//validate 1: PMA_getHtmlForServerStateGeneralInfo
//traffic: $bytes_received + $bytes_sent
$traffic = $bytes_received + $bytes_sent;
$traffic_html = 'Network traffic since startup: ' . $traffic . ' B';
$this->assertContains(
$traffic_html,
$html
);
//updatetime
$upTime_html = 'This MySQL server has been running for '
. '0 days, 0 hours, 0 minutes and 10h seconds';
$this->assertContains(
$upTime_html,
$html
);
//master state
$master_html = 'This MySQL server works as <b>master</b>';
$this->assertContains(
$master_html,
$html
);
//validate 2: PMA_getHtmlForServerStateTraffic
$traffic_html = '<table id="serverstatustraffic" class="data noclick">';
$this->assertContains(
$traffic_html,
$html
);
//traffic hint
$traffic_html = 'On a busy server, the byte counters may overrun';
$this->assertContains(
$traffic_html,
$html
);
//$bytes_received
$this->assertContains(
'<td class="value">' . $bytes_received . ' B',
$html
);
//$bytes_sent
$this->assertContains(
'<td class="value">' . $bytes_sent . ' B',
$html
);
//validate 3: PMA_getHtmlForServerStateConnections
$this->assertContains(
'<th>Connections</th>',
$html
);
$this->assertContains(
'<th>&oslash; per hour</th>',
$html
);
$this->assertContains(
'<table id="serverstatusconnections" class="data noclick">',
$html
);
$this->assertContains(
'<th class="name">Max. concurrent connections</th>',
$html
);
//Max_used_connections
$this->assertContains(
'<td class="value">' . $max_used_conn,
$html
);
$this->assertContains(
'<th class="name">Failed attempts</th>',
$html
);
//Aborted_connects
$this->assertContains(
'<td class="value">' . $aborted_conn,
$html
);
$this->assertContains(
'<th class="name">Aborted</th>',
$html
);
$GLOBALS['replication_info']['master']['status'] = true;
$GLOBALS['replication_info']['slave']['status'] = true;
$this->ServerStatusData->status['Connections'] = 0;
$html = PMA_getHtmlForServerStatus($this->ServerStatusData);
$this->assertContains(
'This MySQL server works as <b>master</b> and <b>slave</b>',
$html
);
$GLOBALS['replication_info']['master']['status'] = false;
$GLOBALS['replication_info']['slave']['status'] = true;
$html = PMA_getHtmlForServerStatus($this->ServerStatusData);
$this->assertContains(
'This MySQL server works as <b>slave</b>',
$html
);
}
}

View File

@ -0,0 +1,282 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for server_status_variables.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\ServerStatusData;
use PMA\libraries\Theme;
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/server_status_variables.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/js_escape.lib.php';
/**
* class PMA_ServerStatusVariables_Test
*
* this class is for testing server_status_variables.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_ServerStatusVariables_Test extends PHPUnit_Framework_TestCase
{
/**
* Prepares environment for the test.
*
* @return void
*/
public $ServerStatusData;
/**
* Test for setUp
*
* @return void
*/
public function setUp()
{
//$_REQUEST
$_REQUEST['log'] = "index1";
$_REQUEST['pos'] = 3;
//$GLOBALS
$GLOBALS['cfg']['MaxRows'] = 10;
$GLOBALS['cfg']['ServerDefault'] = "server";
$GLOBALS['cfg']['RememberSorting'] = true;
$GLOBALS['cfg']['SQP'] = array();
$GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] = 1000;
$GLOBALS['cfg']['ShowSQL'] = true;
$GLOBALS['cfg']['TableNavigationLinksMode'] = 'icons';
$GLOBALS['cfg']['LimitChars'] = 100;
$GLOBALS['cfg']['DBG']['sql'] = false;
$GLOBALS['cfg']['Server']['host'] = "localhost";
$GLOBALS['PMA_PHP_SELF'] = PMA_getenv('PHP_SELF');
$GLOBALS['replication_info']['master']['status'] = false;
$GLOBALS['replication_info']['slave']['status'] = false;
$GLOBALS['table'] = "table";
$GLOBALS['pmaThemeImage'] = 'image';
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
//Mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
//this data is needed when ServerStatusData constructs
$server_status = array(
"Aborted_clients" => "0",
"Aborted_connects" => "0",
"Com_delete_multi" => "0",
"Com_create_function" => "0",
"Com_empty_query" => "0",
);
$server_variables= array(
"auto_increment_increment" => "1",
"auto_increment_offset" => "1",
"automatic_sp_privileges" => "ON",
"back_log" => "50",
"big_tables" => "OFF",
);
$fetchResult = array(
array(
"SHOW GLOBAL STATUS",
0,
1,
null,
0,
$server_status
),
array(
"SHOW GLOBAL VARIABLES",
0,
1,
null,
0,
$server_variables
),
array(
"SELECT concat('Com_', variable_name), variable_value "
. "FROM data_dictionary.GLOBAL_STATEMENTS",
0,
1,
null,
0,
$server_status
),
);
$dbi->expects($this->at(0))
->method('tryQuery')
->with('SHOW GLOBAL STATUS')
->will($this->returnValue(true));
$dbi->expects($this->at(1))
->method('fetchRow')
->will($this->returnValue(array("Aborted_clients", "0")));
$dbi->expects($this->at(2))
->method('fetchRow')
->will($this->returnValue(array("Aborted_connects", "0")));
$dbi->expects($this->at(3))
->method('fetchRow')
->will($this->returnValue(array("Com_delete_multi", "0")));
$dbi->expects($this->at(4))
->method('fetchRow')
->will($this->returnValue(array("Com_create_function", "0")));
$dbi->expects($this->at(5))
->method('fetchRow')
->will($this->returnValue(array("Com_empty_query", "0")));
$dbi->expects($this->at(6))
->method('fetchRow')
->will($this->returnValue(false));
$dbi->expects($this->at(7))->method('freeResult');
$dbi->expects($this->any())->method('fetchResult')
->will($this->returnValueMap($fetchResult));
$GLOBALS['dbi'] = $dbi;
$this->ServerStatusData = new ServerStatusData();
}
/**
* Test for PMA_getHtmlForFilter
*
* @return void
*/
public function testPMAGetHtmlForFilter()
{
//Call the test function
$html = PMA_getHtmlForFilter($this->ServerStatusData);
//validate 1: PMA_getHtmlForFilter
$this->assertContains(
'<fieldset id="tableFilter">',
$html
);
$this->assertContains(
'server_status_variables.php',
$html
);
//validate 2: filter
$this->assertContains(
'<label for="filterText">Containing the word:</label>',
$html
);
//validate 3:Items
$this->assertContains(
'<label for="filterAlert">Show only alert values</label>',
$html
);
$this->assertContains(
'Filter by category',
$html
);
$this->assertContains(
'Show unformatted values',
$html
);
}
/**
* Test for PMA_getHtmlForLinkSuggestions
*
* @return void
*/
public function testPMAGetHtmlForLinkSuggestions()
{
//Call the test function
$html = PMA_getHtmlForLinkSuggestions($this->ServerStatusData);
//validate 1: PMA_getHtmlForLinkSuggestions
$this->assertContains(
'<div id="linkSuggestions" class="defaultLinks"',
$html
);
//validate 2: linkSuggestions
$this->assertContains(
'<p class="notice">Related links:',
$html
);
$this->assertContains(
'Flush (close) all tables',
$html
);
$this->assertContains(
'<span class="status_binlog_cache">',
$html
);
}
/**
* Test for PMA_getHtmlForVariablesList
*
* @return void
* @group medium
*/
public function testPMAGetHtmlForVariablesList()
{
//Call the test function
$html = PMA_getHtmlForVariablesList($this->ServerStatusData);
//validate 1: PMA_getHtmlForVariablesList
$table = '<table class="data noclick" '
. 'id="serverstatusvariables">';
$this->assertContains(
$table,
$html
);
$this->assertContains(
'<th>Variable</th>',
$html
);
$this->assertContains(
'<th>Value</th>',
$html
);
$this->assertContains(
'<th>Description</th>',
$html
);
//validate 3:Items
$this->assertContains(
'<th class="name">Aborted clients',
$html
);
$this->assertContains(
'<span class="allfine">0</span>',
$html
);
$this->assertContains(
'<th class="name">Aborted connects',
$html
);
$this->assertContains(
'<th class="name">Com delete multi',
$html
);
$this->assertContains(
'<th class="name">Com create function',
$html
);
$this->assertContains(
'<th class="name">Com empty query',
$html
);
}
}

View File

@ -0,0 +1,270 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for server_user_groups.lib.php
*
* @package PhpMyAdmin-test
*/
use PMA\libraries\Theme;
require_once 'libraries/relation.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/url_generating.lib.php';
/*
* Include to test.
*/
require_once 'libraries/server_user_groups.lib.php';
/**
* Tests for server_user_groups.lib.php
*
* @package PhpMyAdmin-test
*/
class PMA_ServerUserGroupsTest extends PHPUnit_Framework_TestCase
{
/**
* Prepares environment for the test.
*
* @return void
*/
public function setUp()
{
$GLOBALS['cfg']['ServerDefault'] = 1;
$GLOBALS['cfg']['ActionLinksMode'] = 'both';
$GLOBALS['server'] = 1;
$_SESSION['relation'][$GLOBALS['server']] = array(
'PMA_VERSION' => PMA_VERSION,
'db' => 'pmadb',
'users' => 'users',
'usergroups' => 'usergroups'
);
$GLOBALS['pmaThemeImage'] = 'image';
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
}
/**
* Tests PMA_getHtmlForUserGroupsTable() function when there are no user groups
*
* @return void
* @group medium
*/
public function testGetHtmlForUserGroupsTableWithNoUserGroups()
{
$expectedQuery = "SELECT * FROM `pmadb`.`usergroups`"
. " ORDER BY `usergroup` ASC";
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->once())
->method('tryQuery')
->with($expectedQuery)
->will($this->returnValue(true));
$dbi->expects($this->once())
->method('numRows')
->withAnyParameters()
->will($this->returnValue(0));
$dbi->expects($this->once())
->method('freeResult');
$GLOBALS['dbi'] = $dbi;
$html = PMA_getHtmlForUserGroupsTable();
$this->assertNotContains(
'<table id="userGroupsTable">',
$html
);
$url_tag = '<a href="server_user_groups.php'
. PMA_URL_getCommon(array('addUserGroup' => 1));
$this->assertContains(
$url_tag,
$html
);
}
/**
* Tests PMA_getHtmlForUserGroupsTable() function when there are user groups
*
* @return void
*/
public function testGetHtmlForUserGroupsTableWithUserGroups()
{
$expectedQuery = "SELECT * FROM `pmadb`.`usergroups`"
. " ORDER BY `usergroup` ASC";
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->once())
->method('tryQuery')
->with($expectedQuery)
->will($this->returnValue(true));
$dbi->expects($this->once())
->method('numRows')
->withAnyParameters()
->will($this->returnValue(1));
$dbi->expects($this->at(2))
->method('fetchAssoc')
->withAnyParameters()
->will(
$this->returnValue(
array(
'usergroup' => 'usergroup',
'tab' => 'server_sql',
'allowed' => 'Y'
)
)
);
$dbi->expects($this->at(3))
->method('fetchAssoc')
->withAnyParameters()
->will($this->returnValue(false));
$dbi->expects($this->once())
->method('freeResult');
$GLOBALS['dbi'] = $dbi;
$html = PMA_getHtmlForUserGroupsTable();
$this->assertContains(
'<td>usergroup</td>',
$html
);
$url_tag = '<a class="" href="server_user_groups.php'
. PMA_URL_getCommon(
array(
'viewUsers'=>1, 'userGroup'=>htmlspecialchars('usergroup')
)
);
$this->assertContains(
$url_tag,
$html
);
$url_tag = '<a class="" href="server_user_groups.php'
. PMA_URL_getCommon(
array(
'editUserGroup'=>1,
'userGroup'=>htmlspecialchars('usergroup')
)
);
$this->assertContains(
$url_tag,
$html
);
$url_tag = '<a class="deleteUserGroup ajax" href="server_user_groups.php'
. PMA_URL_getCommon(
array(
'deleteUserGroup'=> 1,
'userGroup'=>htmlspecialchars('usergroup')
)
);
$this->assertContains(
$url_tag,
$html
);
}
/**
* Tests PMA_deleteUserGroup() function
*
* @return void
*/
public function testDeleteUserGroup()
{
$userDelQuery = "DELETE FROM `pmadb`.`users`"
. " WHERE `usergroup`='ug'";
$userGrpDelQuery = "DELETE FROM `pmadb`.`usergroups`"
. " WHERE `usergroup`='ug'";
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->at(1))
->method('query')
->with($userDelQuery);
$dbi->expects($this->at(3))
->method('query')
->with($userGrpDelQuery);
$dbi->expects($this->any())
->method('escapeString')
->will($this->returnArgument(0));
$GLOBALS['dbi'] = $dbi;
PMA_deleteUserGroup('ug');
}
/**
* Tests PMA_getHtmlToEditUserGroup() function
*
* @return void
*/
public function testGetHtmlToEditUserGroup()
{
// adding a user group
$html = PMA_getHtmlToEditUserGroup();
$this->assertContains(
'<input type="hidden" name="addUserGroupSubmit" value="1"',
$html
);
$this->assertContains(
'<input type="text" name="userGroup"',
$html
);
$expectedQuery = "SELECT * FROM `pmadb`.`usergroups`"
. " WHERE `usergroup`='ug'";
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->once())
->method('tryQuery')
->with($expectedQuery)
->will($this->returnValue(true));
$dbi->expects($this->exactly(2))
->method('fetchAssoc')
->willReturnOnConsecutiveCalls(
array(
'usergroup' => 'ug',
'tab' => 'server_sql',
'allowed' => 'Y'
),
false
);
$dbi->expects($this->once())
->method('freeResult');
$dbi->expects($this->any())
->method('escapeString')
->will($this->returnArgument(0));
$GLOBALS['dbi'] = $dbi;
// editing a user group
$html = PMA_getHtmlToEditUserGroup('ug');
$this->assertContains(
'<input type="hidden" name="userGroup" value="ug"',
$html
);
$this->assertContains(
'<input type="hidden" name="editUserGroupSubmit" value="1"',
$html
);
$this->assertContains(
'<input type="hidden" name="editUserGroupSubmit" value="1"',
$html
);
$this->assertContains(
'<input type="checkbox" class="checkall" checked="checked"'
. ' name="server_sql" value="Y" />',
$html
);
$this->assertContains(
'<input type="checkbox" class="checkall"'
. ' name="server_databases" value="Y" />',
$html
);
}
}

View File

@ -0,0 +1,60 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for server_users.lib.php
*
* @package PhpMyAdmin-test
*/
require_once 'libraries/url_generating.lib.php';
/*
* Include to test.
*/
require_once 'libraries/server_users.lib.php';
/**
* PMA_ServerUsers_Test class
*
* This class is for testing server_users.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_ServerUsers_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_getHtmlForSubMenusOnUsersPage
*
* @return void
*/
public function testPMAGetHtmlForSubMenusOnUsersPage()
{
$html = PMA_getHtmlForSubMenusOnUsersPage('server_privileges.php');
//validate 1: topmenu2
$this->assertContains(
'<ul id="topmenu2">',
$html
);
//validate 2: tabactive for server_privileges.php
$this->assertContains(
'<a class="tabactive" href="server_privileges.php',
$html
);
$this->assertContains(
__('User accounts overview'),
$html
);
//validate 3: not-active for server_user_groups.php
$this->assertContains(
'<a href="server_user_groups.php',
$html
);
$this->assertContains(
__('User groups'),
$html
);
}
}

View File

@ -0,0 +1,225 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for sql_query_form.lib.php
*
* @package PhpMyAdmin-test
*/
//the following definition should be used globally
use PMA\libraries\Theme;
$GLOBALS['server'] = 0;
/*
* Include to test.
*/
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/relation.lib.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/js_escape.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/sql_query_form.lib.php';
require_once 'libraries/kanji-encoding.lib.php';
require_once 'libraries/mysql_charsets.inc.php';
/**
* class PMA_SqlQueryForm_Test
*
* this class is for testing sql_query_form.lib.php functions
*
* @package PhpMyAdmin-test
*/
class PMA_SqlQueryForm_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for setUp
*
* @return void
*/
public function setUp()
{
//$GLOBALS
$GLOBALS['max_upload_size'] = 100;
$GLOBALS['PMA_PHP_SELF'] = PMA_getenv('PHP_SELF');
$GLOBALS['db'] = "PMA_db";
$GLOBALS['table'] = "PMA_table";
$GLOBALS['pmaThemeImage'] = 'image';
$GLOBALS['text_dir'] = "text_dir";
$GLOBALS['cfg']['GZipDump'] = false;
$GLOBALS['cfg']['BZipDump'] = false;
$GLOBALS['cfg']['ZipDump'] = false;
$GLOBALS['cfg']['ServerDefault'] = "default";
$GLOBALS['cfg']['TextareaAutoSelect'] = true;
$GLOBALS['cfg']['TextareaRows'] = 100;
$GLOBALS['cfg']['TextareaCols'] = 11;
$GLOBALS['cfg']['DefaultTabDatabase'] = "structure";
$GLOBALS['cfg']['RetainQueryBox'] = true;
$GLOBALS['cfg']['ActionLinksMode'] = 'both';
$GLOBALS['cfg']['DefaultTabTable'] = 'browse';
$GLOBALS['cfg']['CodemirrorEnable'] = true;
$GLOBALS['cfg']['DefaultForeignKeyChecks'] = 'default';
//_SESSION
$_SESSION['relation'][0] = array(
'PMA_VERSION' => PMA_VERSION,
'table_coords' => "table_name",
'displaywork' => 'displaywork',
'db' => "information_schema",
'table_info' => 'table_info',
'relwork' => 'relwork',
'relation' => 'relation',
'bookmarkwork' => 'bookmarkwork',
);
//$GLOBALS
$GLOBALS['cfg']['Server']['user'] = "user";
$GLOBALS['cfg']['Server']['pmadb'] = "pmadb";
$GLOBALS['cfg']['Server']['bookmarktable'] = "bookmarktable";
//$_SESSION
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$_SESSION['PMA_Theme'] = new Theme();
//Mock DBI
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$fetchResult = array("index1"=>"table1", "index2"=>"table2");
$dbi->expects($this->any())
->method('fetchResult')
->will($this->returnValue($fetchResult));
$getColumns = array(
array(
"Field" => "field1",
"Comment" => "Comment1"
)
);
$dbi->expects($this->any())
->method('getColumns')
->will($this->returnValue($getColumns));
$GLOBALS['dbi'] = $dbi;
}
/**
* Test for PMA_getHtmlForSqlQueryFormInsert
*
* @return void
*/
public function testPMAGetHtmlForSqlQueryFormInsert()
{
//Call the test function
$query = "select * from PMA";
$html = PMA_getHtmlForSqlQueryFormInsert($query);
//validate 1: query
$this->assertContains(
htmlspecialchars($query),
$html
);
//validate 2: enable auto select text in textarea
$auto_sel = ' onclick="selectContent(this, sql_box_locked, true);"';
$this->assertContains(
$auto_sel,
$html
);
//validate 3: showMySQLDocu
$this->assertContains(
PMA\libraries\Util::showMySQLDocu('SELECT'),
$html
);
//validate 4: $fields_list
$this->assertContains(
'<input type="button" value="DELETE" id="delete"',
$html
);
$this->assertContains(
'<input type="button" value="UPDATE" id="update"',
$html
);
$this->assertContains(
'<input type="button" value="INSERT" id="insert"',
$html
);
$this->assertContains(
'<input type="button" value="SELECT" id="select"',
$html
);
$this->assertContains(
'<input type="button" value="SELECT *" id="selectall"',
$html
);
//validate 5: Clear button
$this->assertContains(
'<input type="button" value="DELETE" id="delete"',
$html
);
$this->assertContains(
__('Clear'),
$html
);
}
/**
* Test for PMA_getHtmlForSqlQueryForm
*
* @return void
*/
public function testPMAGetHtmlForSqlQueryForm()
{
//Call the test function
$GLOBALS['is_upload'] = true;
$query = "select * from PMA";
$html = PMA_getHtmlForSqlQueryForm($query);
//validate 1: query
$this->assertContains(
htmlspecialchars($query),
$html
);
//validate 2: $enctype
$enctype = ' enctype="multipart/form-data"';
$this->assertContains(
$enctype,
$html
);
//validate 3: sqlqueryform
$this->assertContains(
'id="sqlqueryform" name="sqlform">',
$html
);
//validate 4: $db, $table
$table = $GLOBALS['table'];
$db = $GLOBALS['db'];
$this->assertContains(
PMA_URL_getHiddenInputs($db, $table),
$html
);
//validate 5: $goto
$goto = empty($GLOBALS['goto']) ? 'tbl_sql.php' : $GLOBALS['goto'];
$this->assertContains(
htmlspecialchars($goto),
$html
);
//validate 6: PMA_Kanji_encodingForm
$this->assertContains(
PMA_Kanji_encodingForm(),
$html
);
}
}

View File

@ -0,0 +1,202 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for libraries/sql.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/sql.lib.php';
/**
* Tests for libraries/sql.lib.php
*
* @package PhpMyAdmin-test
*/
class PMA_SqlTest extends PHPUnit_Framework_TestCase
{
/**
* Test PMA_getSqlWithLimitClause
*
* @return void
*/
public function testGetSqlWithLimitClause()
{
// Test environment.
$GLOBALS['_SESSION']['tmpval']['pos'] = 1;
$GLOBALS['_SESSION']['tmpval']['max_rows'] = 2;
$GLOBALS['db'] = 'db';
$analyzed_sql_results = PMA_parseAndAnalyze(
'SELECT * FROM test LIMIT 0, 10'
);
$this->assertEquals(
'SELECT * FROM test LIMIT 1, 2 ',
PMA_getSqlWithLimitClause($analyzed_sql_results)
);
}
/**
* Test PMA_isRememberSortingOrder
*
* @return void
*/
public function testIsRememberSortingOrder()
{
// Test environment.
$GLOBALS['cfg']['RememberSorting'] = true;
$GLOBALS['db'] = 'db';
$this->assertTrue(
PMA_isRememberSortingOrder(
PMA_parseAndAnalyze('SELECT * FROM tbl')
)
);
$this->assertFalse(
PMA_isRememberSortingOrder(
PMA_parseAndAnalyze('SELECT col FROM tbl')
)
);
$this->assertFalse(
PMA_isRememberSortingOrder(
PMA_parseAndAnalyze('SELECT 1')
)
);
$this->assertFalse(
PMA_isRememberSortingOrder(
PMA_parseAndAnalyze('SELECT col1, col2 FROM tbl')
)
);
$this->assertFalse(
PMA_isRememberSortingOrder(
PMA_parseAndAnalyze('SELECT COUNT(*) from tbl')
)
);
}
/**
* Test PMA_isAppendLimitClause
*
* @return void
*/
public function testIsAppendLimitClause()
{
// Test environment.
$GLOBALS['_SESSION']['tmpval']['max_rows'] = 10;
$GLOBALS['db'] = 'db';
$this->assertTrue(
PMA_isAppendLimitClause(
PMA_parseAndAnalyze('SELECT * FROM tbl')
)
);
$this->assertFalse(
PMA_isAppendLimitClause(
PMA_parseAndAnalyze('SELECT * from tbl LIMIT 0, 10')
)
);
}
/**
* Test PMA_isJustBrowsing
*
* @return void
*/
public function testIsJustBrowsing()
{
// Test environment.
$GLOBALS['_SESSION']['tmpval']['max_rows'] = 10;
$GLOBALS['db'] = 'db';
$this->assertTrue(
PMA_isJustBrowsing(
PMA_parseAndAnalyze('SELECT * FROM db.tbl'),
null
)
);
$this->assertTrue(
PMA_isJustBrowsing(
PMA_parseAndAnalyze('SELECT * FROM tbl WHERE 1'),
null
)
);
$this->assertFalse(
PMA_isJustBrowsing(
PMA_parseAndAnalyze('SELECT * from tbl1, tbl2 LIMIT 0, 10'),
null
)
);
}
/**
* Test PMA_isDeleteTransformationInfo
*
* @return void
*/
public function testIsDeleteTransformationInfo()
{
$this->assertTrue(
PMA_isDeleteTransformationInfo(
PMA_parseAndAnalyze('ALTER TABLE tbl DROP COLUMN col')
)
);
$this->assertTrue(
PMA_isDeleteTransformationInfo(
PMA_parseAndAnalyze('DROP TABLE tbl')
)
);
$this->assertFalse(
PMA_isDeleteTransformationInfo(
PMA_parseAndAnalyze('SELECT * from tbl')
)
);
}
/**
* Test PMA_hasNoRightsToDropDatabase
*
* @return void
*/
public function testHasNoRightsToDropDatabase()
{
$this->assertEquals(
true,
PMA_hasNoRightsToDropDatabase(
PMA_parseAndAnalyze('DROP DATABASE db'),
false,
false
)
);
$this->assertEquals(
false,
PMA_hasNoRightsToDropDatabase(
PMA_parseAndAnalyze('DROP TABLE tbl'),
false,
false
)
);
$this->assertEquals(
false,
PMA_hasNoRightsToDropDatabase(
PMA_parseAndAnalyze('SELECT * from tbl'),
false,
false
)
);
}
}

View File

@ -0,0 +1,930 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for libraries/tracking.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/tracking.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/relation.lib.php';
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/js_escape.lib.php';
/**
* Tests for libraries/tracking.lib.php
*
* @package PhpMyAdmin-test
*/
class PMA_TblTrackingTest extends PHPUnit_Framework_TestCase
{
/**
* Setup function for test cases
*
* @access protected
* @return void
*/
protected function setUp()
{
/**
* SET these to avoid undefined index error
*/
$_REQUEST['db'] = "db";
$_REQUEST['table'] = "table";
$GLOBALS['server'] = 1;
$GLOBALS['db'] = "PMA_db";
$GLOBALS['table'] = "PMA_table";
$GLOBALS['pmaThemeImage'] = "image";
$GLOBALS['cfg']['ServerDefault'] = "server";
$GLOBALS['cfg']['ActionLinksMode'] = 'both';
$GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] = 1000;
$_SESSION['relation'][$GLOBALS['server']] = array(
'PMA_VERSION' => PMA_VERSION,
'db' => 'pmadb',
'tracking' => 'tracking',
'trackingwork' => true
);
$_SESSION['PMA_Theme'] = new Theme();
$GLOBALS['cfg']['Server']['tracking_default_statements'] = 'DELETE';
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$fetchArray = array('version' => "10");
$dbi->expects($this->any())
->method('fetchArray')
->will($this->returnValue($fetchArray));
$dbi->expects($this->any())
->method('query')
->will($this->returnValue(true));
$dbi->expects($this->any())
->method('tryQuery')
->will($this->returnValue(true));
$GLOBALS['dbi'] = $dbi;
}
/**
* Tests for PMA_filterTracking() method.
*
* @return void
* @test
*/
public function testPMAFilterTracking()
{
$data = array(
array(
"date" => "20120102",
"username"=> "username1",
"statement"=>"statement1"
),
array(
"date" => "20130102",
"username"=> "username2",
"statement"=>"statement2"
),
);
$filter_ts_from = 0;
$filter_ts_to = 999999999999;
$filter_users = array("username1");
$ret = PMA_filterTracking(
$data, $filter_ts_from, $filter_ts_to, $filter_users
);
$this->assertEquals(
'username1',
$ret[0]['username']
);
$this->assertEquals(
'statement1',
$ret[0]['statement']
);
}
/**
* Tests for PMA_getHtmlForDataDefinitionAndManipulationStatements() method.
*
* @return void
* @test
*/
public function testPMAGetHtmlForDataDefinitionAndManipulationStatements()
{
$url_query = "url_query";
$last_version = 10;
$html = PMA_getHtmlForDataDefinitionAndManipulationStatements(
$url_query, $last_version, $GLOBALS['db'], array($GLOBALS['table'])
);
$this->assertContains(
'<div id="div_create_version">',
$html
);
$this->assertContains(
$url_query,
$html
);
$this->assertContains(
PMA_URL_getHiddenInputs($GLOBALS['db']),
$html
);
$item = sprintf(
__('Create version %1$s of %2$s'),
($last_version + 1),
htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table'])
);
$this->assertContains(
$item,
$html
);
$item = '<input type="checkbox" name="delete" value="true"'
. ' checked="checked" /> DELETE<br/>';
$this->assertContains(
$item,
$html
);
$this->assertContains(
__('Create version'),
$html
);
}
/**
* Tests for PMA_getHtmlForActivateDeactivateTracking() method.
*
* @return void
* @test
*/
public function testPMAGetHtmlForActivateDeactivateTracking()
{
$url_query = "url_query";
$last_version = "10";
$html = PMA_getHtmlForActivateDeactivateTracking(
'activate', $url_query, $last_version
);
$this->assertContains(
$url_query,
$html
);
$item = sprintf(
__('Activate tracking for %s'),
htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table'])
);
$this->assertContains(
$item,
$html
);
$this->assertContains(
$last_version,
$html
);
$this->assertContains(
__('Activate now'),
$html
);
$html = PMA_getHtmlForActivateDeactivateTracking(
'deactivate', $url_query, $last_version
);
$this->assertContains(
$url_query,
$html
);
$item = sprintf(
__('Deactivate tracking for %s'),
htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table'])
);
$this->assertContains(
$item,
$html
);
$this->assertContains(
$last_version,
$html
);
$this->assertContains(
__('Deactivate now'),
$html
);
}
/**
* Tests for PMA_getTableLastVersionNumber() method.
*
* @return void
* @test
*/
public function testPMAGetTableLastVersionNumber()
{
$sql_result = "sql_result";
$last_version = PMA_getTableLastVersionNumber($sql_result);
$this->assertEquals(
"10",
$last_version
);
}
/**
* Tests for PMA_getSQLResultForSelectableTables() method.
*
* @return void
* @test
*/
public function testPMAGetSQLResultForSelectableTables()
{
$ret = PMA_getSQLResultForSelectableTables();
$this->assertEquals(
true,
$ret
);
}
/**
* Tests for PMA_getHtmlForColumns() method.
*
* @return void
* @test
*/
public function testPMAGetHtmlForColumns()
{
$columns = array(
array(
'Field'=>'Field1',
'Type'=>'Type1',
'Collation'=>'Collation1',
"Null"=>'YES',
'Extra'=>'Extra1',
'Key'=>'PRI',
'Comment'=>'Comment1'
),
array(
'Field'=>'Field2',
'Type'=>'Type2',
'Collation'=>'Collation2',
"Null"=>'No',
'Extra'=>'Extra2',
'Key'=>'Key2',
'Comment'=>'Comment2'
),
);
$html = PMA_getHtmlForColumns($columns);
$this->assertContains(
__('Column'),
$html
);
$this->assertContains(
__('Type'),
$html
);
$this->assertContains(
__('Collation'),
$html
);
$this->assertContains(
__('Default'),
$html
);
$this->assertContains(
__('Comment'),
$html
);
//column1
$item1= $columns[0];
$this->assertContains(
htmlspecialchars($item1['Field']),
$html
);
$this->assertContains(
htmlspecialchars($item1['Type']),
$html
);
$this->assertContains(
htmlspecialchars($item1['Collation']),
$html
);
$this->assertContains(
'<i>NULL</i>',
$html
);
$this->assertContains(
htmlspecialchars($item1['Comment']),
$html
);
//column2
$item1= $columns[1];
$this->assertContains(
htmlspecialchars($item1['Field']),
$html
);
$this->assertContains(
htmlspecialchars($item1['Type']),
$html
);
$this->assertContains(
htmlspecialchars($item1['Collation']),
$html
);
$this->assertContains(
_pgettext('None for default', 'None'),
$html
);
$this->assertContains(
htmlspecialchars($item1['Comment']),
$html
);
}
/**
* Tests for PMA_getListOfVersionsOfTable() method.
*
* @return void
* @test
*/
public function testPMAGetListOfVersionsOfTable()
{
$ret = PMA_getListOfVersionsOfTable();
$this->assertEquals(
true,
$ret
);
}
/**
* Tests for PMA_getHtmlForTableVersionDetails() method.
*
* @return void
* @test
*/
public function testPMAGetHtmlForTableVersionDetails()
{
$sql_result = true;
$last_version = "10";
$url_params = array();
$url_query = "select * from PMA";
$pmaThemeImage = "themePath/img";
$text_dir = "ltr";
$dbi_old = $GLOBALS['dbi'];
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$fetchArray = array(
'tracking_active' => 1,
'version' => "10",
'db_name' => 'db_name',
'table_name' => 'table_name',
'date_created' => 'date_created',
'date_updated' => 'date_updated'
);
$dbi->expects($this->at(0))
->method('fetchArray')
->will($this->returnValue($fetchArray));
$dbi->expects($this->at(1))
->method('fetchArray')
->will($this->returnValue($fetchArray));
$dbi->expects($this->at(2))
->method('fetchArray')
->will($this->returnValue(false));
$GLOBALS['dbi'] = $dbi;
$ret = PMA_getHtmlForTableVersionDetails(
$sql_result, $last_version, $url_params, $url_query,
$pmaThemeImage, $text_dir
);
$this->assertContains(
__('Version'),
$ret
);
$this->assertContains(
__('Created'),
$ret
);
$this->assertContains(
__('Updated'),
$ret
);
$this->assertContains(
__('Status'),
$ret
);
$this->assertContains(
__('Action'),
$ret
);
$this->assertContains(
__('Show'),
$ret
);
$this->assertContains(
$fetchArray['version'],
$ret
);
$this->assertContains(
$fetchArray['date_created'],
$ret
);
$this->assertContains(
$fetchArray['date_updated'],
$ret
);
$this->assertContains(
__('Tracking report'),
$ret
);
$this->assertContains(
__('Structure snapshot'),
$ret
);
$html = sprintf(
__('Deactivate tracking for %s'),
htmlspecialchars($GLOBALS['db'] . '.' . $GLOBALS['table'])
);
$this->assertContains(
$html,
$ret
);
//restore DBI
$GLOBALS['dbi'] = $dbi_old;
}
/**
* Tests for PMA_getHtmlForSelectableTables() method.
*
* @return void
* @test
*/
public function testPMAGetHtmlForSelectableTables()
{
$selectable_tables_sql_result = true;
$url_query = "select * from PMA";
$dbi_old = $GLOBALS['dbi'];
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$fetchArray = array(
'tracking_active' => 1,
'version' => "10",
'db_name' => 'db_name',
'table_name' => 'table_name',
'date_created' => 'date_created',
'date_updated' => 'date_updated'
);
$dbi->expects($this->at(0))
->method('fetchArray')
->will($this->returnValue($fetchArray));
$dbi->expects($this->at(1))
->method('fetchArray')
->will($this->returnValue($fetchArray));
$dbi->expects($this->at(2))
->method('fetchArray')
->will($this->returnValue(false));
$GLOBALS['dbi'] = $dbi;
$ret = PMA_getHtmlForSelectableTables(
$selectable_tables_sql_result, $url_query
);
$this->assertContains(
htmlspecialchars($fetchArray['table_name']),
$ret
);
$this->assertContains(
htmlspecialchars($fetchArray['db_name']),
$ret
);
//restore DBI
$GLOBALS['dbi'] = $dbi_old;
}
/**
* Tests for PMA_getHtmlForTrackingReport() method.
*
* @return void
* @test
*/
public function testPMAGetHtmlForTrackingReportr()
{
$_REQUEST['version'] = 10;
$_REQUEST['date_from'] = "date_from";
$_REQUEST['date_to'] = "date_to";
$_REQUEST['users'] = "users";
$_REQUEST['logtype'] = 'logtype';
$url_query = "select * from PMA";
$data = array(
'tracking'=>'tracking',
'ddlog' => array('ddlog'),
'dmlog' => array('dmlog')
);
$url_params = array();
$selection_schema = array();
$selection_data = array();
$selection_both = array();
$filter_ts_to = array();
$filter_ts_from = array();
$filter_users = array();
$html = PMA_getHtmlForTrackingReport(
$url_query, $data, $url_params,
$selection_schema, $selection_data,
$selection_both, $filter_ts_to,
$filter_ts_from, $filter_users
);
$this->assertContains(
__('Tracking report'),
$html
);
$this->assertContains(
$url_query,
$html
);
$this->assertContains(
__('Tracking statements'),
$html
);
$this->assertContains(
$data['tracking'],
$html
);
$version = '<form method="post" action="tbl_tracking.php'
. PMA_URL_getCommon(
$url_params + array(
'report' => 'true', 'version' => $_REQUEST['version']
)
);
$this->assertContains(
$version,
$html
);
$this->assertContains(
$version,
$html
);
$this->assertContains(
__('Structure only'),
$html
);
$this->assertContains(
__('Data only'),
$html
);
$this->assertContains(
__('Structure and data'),
$html
);
$this->assertContains(
htmlspecialchars($_REQUEST['date_from']),
$html
);
$this->assertContains(
htmlspecialchars($_REQUEST['date_to']),
$html
);
$this->assertContains(
htmlspecialchars($_REQUEST['users']),
$html
);
}
/**
* Tests for PMA_getHtmlForDataManipulationStatements() method.
*
* @return void
* @test
*/
public function testPMAGetHtmlForDataManipulationStatements()
{
$_REQUEST['version'] = "10";
$data = array(
'tracking'=>'tracking',
'dmlog' => array(
array(
'statement' => 'statement',
'date' => 'date',
'username' => 'username',
)
),
'ddlog' => array('ddlog')
);
$url_params = array();
$ddlog_count = 10;
$drop_image_or_text = "text";
$filter_ts_to = 9999999999;
$filter_ts_from = 0;
$filter_users = array("*");
$html = PMA_getHtmlForDataManipulationStatements(
$data, $filter_users,
$filter_ts_from, $filter_ts_to, $url_params,
$ddlog_count, $drop_image_or_text
);
$this->assertContains(
__('Date'),
$html
);
$this->assertContains(
__('Username'),
$html
);
$this->assertContains(
__('Data manipulation statement'),
$html
);
$this->assertContains(
$data['dmlog'][0]['date'],
$html
);
$this->assertContains(
$data['dmlog'][0]['username'],
$html
);
}
/**
* Tests for PMA_getHtmlForDataDefinitionStatements() method.
*
* @return void
* @test
*/
public function testPMAGetHtmlForDataDefinitionStatements()
{
$_REQUEST['version'] = "10";
$data = array(
'tracking'=>'tracking',
'ddlog' => array(
array(
'statement' => 'statement',
'date' => 'date',
'username' => 'username',
)
),
'dmlog' => array('dmlog')
);
$filter_users = array("*");
$filter_ts_to = 9999999999;
$filter_ts_from = 0;
$url_params = array();
$drop_image_or_text = "text";
list($html, $count) = PMA_getHtmlForDataDefinitionStatements(
$data, $filter_users,
$filter_ts_from, $filter_ts_to, $url_params, $drop_image_or_text
);
$this->assertContains(
__('Date'),
$html
);
$this->assertContains(
__('Username'),
$html
);
$this->assertContains(
__('Data definition statement'),
$html
);
$this->assertContains(
__('Action'),
$html
);
//PMA_getHtmlForDataDefinitionStatement
$this->assertContains(
htmlspecialchars($data['ddlog'][0]['username']),
$html
);
$this->assertEquals(
2,
$count
);
}
/**
* Tests for PMA_getHtmlForIndexes() method.
*
* @return void
* @test
*/
public function testPMAGetHtmlForIndexes()
{
$indexs = array(
array(
'Non_unique' => 0,
'Packed' => '',
'Key_name' => 'Key_name1',
'Index_type' => 'BTREE',
'Column_name' => 'Column_name',
'Cardinality' => 'Cardinality',
'Collation' => 'Collation',
'Null' => 'Null',
'Comment' => 'Comment',
),
);
$html = PMA_getHtmlForIndexes($indexs);
$this->assertContains(
__('Indexes'),
$html
);
$this->assertContains(
__('Keyname'),
$html
);
$this->assertContains(
__('Type'),
$html
);
$this->assertContains(
__('Unique'),
$html
);
$this->assertContains(
__('Packed'),
$html
);
$this->assertContains(
__('Column'),
$html
);
$this->assertContains(
__('Cardinality'),
$html
);
// items
$this->assertContains(
htmlspecialchars($indexs[0]['Key_name']),
$html
);
$this->assertContains(
htmlspecialchars($indexs[0]['Index_type']),
$html
);
$this->assertContains(
htmlspecialchars($indexs[0]['Column_name']),
$html
);
$this->assertContains(
htmlspecialchars($indexs[0]['Cardinality']),
$html
);
$this->assertContains(
htmlspecialchars($indexs[0]['Collation']),
$html
);
}
/**
* Tests for PMA_getTrackingSet() method.
*
* @return void
* @test
*/
public function testPMAGetTrackingSet()
{
$_REQUEST['alter_table'] = false;
$_REQUEST['rename_table'] = true;
$_REQUEST['create_table'] = true;
$_REQUEST['drop_table'] = true;
$_REQUEST['create_index'] = false;
$_REQUEST['drop_index'] = true;
$_REQUEST['insert'] = true;
$_REQUEST['update'] = false;
$_REQUEST['delete'] = true;
$_REQUEST['truncate'] = true;
$tracking_set = PMA_getTrackingSet();
$this->assertEquals(
'RENAME TABLE,CREATE TABLE,DROP TABLE,DROP INDEX,INSERT,DELETE,TRUNCATE',
$tracking_set
);
//other set to true
$_REQUEST['alter_table'] = true;
$_REQUEST['rename_table'] = false;
$_REQUEST['create_table'] = false;
$_REQUEST['drop_table'] = false;
$_REQUEST['create_index'] = true;
$_REQUEST['drop_index'] = false;
$_REQUEST['insert'] = false;
$_REQUEST['update'] = true;
$_REQUEST['delete'] = false;
$_REQUEST['truncate'] = false;
$tracking_set = PMA_getTrackingSet();
$this->assertEquals(
'ALTER TABLE,CREATE INDEX,UPDATE',
$tracking_set
);
}
/**
* Tests for PMA_getEntries() method.
*
* @return void
* @test
*/
public function testPMAGetEntries()
{
$_REQUEST['logtype'] = 'schema';
$data = array(
'tracking'=>'tracking',
'ddlog' => array(
array(
'statement' => 'statement1',
'date' => 'date2',
'username' => 'username3',
)
),
'dmlog' => array(
array(
'statement' => 'statement1',
'date' => 'date2',
'username' => 'username3',
)
),
);
$filter_users = array("*");
$filter_ts_to = 9999999999;
$filter_ts_from = 0;
$entries = PMA_getEntries(
$data, $filter_ts_from, $filter_ts_to, $filter_users
);
$this->assertEquals(
'username3',
$entries[0]['username']
);
$this->assertEquals(
'statement1',
$entries[0]['statement']
);
}
}

View File

@ -0,0 +1,259 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for transformation wrappers
*
* @package PhpMyAdmin-test
*/
use PMA\libraries\Theme;
/*
* Include to test.
*/
require_once 'libraries/transformations.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/relation.lib.php';
/**
* tests for transformation wrappers
*
* @package PhpMyAdmin-test
*/
class PMA_Transformation_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up global environment.
*
* @return void
*/
public function setup()
{
$GLOBALS['table'] = 'table';
$GLOBALS['db'] = 'db';
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$GLOBALS['cfg'] = array(
'ServerDefault' => 1,
'ActionLinksMode' => 'icons',
);
$GLOBALS['server'] = 1;
$GLOBALS['cfg']['Server']['pmadb'] = 'pmadb';
$GLOBALS['cfg']['Server']['user'] = 'user';
$GLOBALS['cfg']['Server']['bookmarktable'] = '';
$GLOBALS['cfg']['Server']['relation'] = '';
$GLOBALS['cfg']['Server']['table_info'] = '';
$GLOBALS['cfg']['Server']['table_coords'] = '';
$GLOBALS['cfg']['Server']['column_info'] = 'column_info';
$GLOBALS['cfg']['DBG']['sql'] = false;
// need to clear relation test cache
unset($_SESSION['relation']);
}
/**
* Test for parsing options.
*
* @param string $input String to parse
* @param array $expected Expected result
*
* @return void
*
* @dataProvider getOptionsData
*/
public function testGetOptions($input, $expected)
{
$this->assertEquals(
$expected,
PMA_Transformation_getOptions($input)
);
}
/**
* Data provided for parsing options
*
* @return array with test data
*/
public function getOptionsData()
{
return array(
array("option1 , option2 ", array('option1 ', ' option2 ')),
array("'option1' ,' option2' ", array('option1', ' option2')),
array("'2,3' ,' ,, option ,,' ", array('2,3', ' ,, option ,,')),
array("'',,", array('', '', '')),
array('', array()),
);
}
/**
* Test for getting available types.
*
* @return void
*/
public function testGetTypes()
{
$this->assertEquals(
array (
'mimetype' => array (
'Application/Octetstream' => 'Application/Octetstream',
'Image/JPEG' => 'Image/JPEG',
'Image/PNG' => 'Image/PNG',
'Text/Plain' => 'Text/Plain',
'Text/Octetstream' => 'Text/Octetstream'
),
'transformation' => array (
0 => 'Application/Octetstream: Download',
1 => 'Application/Octetstream: Hex',
2 => 'Image/JPEG: Inline',
3 => 'Image/JPEG: Link',
4 => 'Image/PNG: Inline',
5 => 'Text/Octetstream: Sql',
6 => 'Text/Plain: Binarytoip',
7 => 'Text/Plain: Bool2Text',
8 => 'Text/Plain: Dateformat',
9 => 'Text/Plain: External',
10 => 'Text/Plain: Formatted',
11 => 'Text/Plain: Imagelink',
12 => 'Text/Plain: Json',
13 => 'Text/Plain: Sql',
14 => 'Text/Plain: Xml',
15 => 'Text/Plain: Link',
16 => 'Text/Plain: Longtoipv4',
17 => 'Text/Plain: PreApPend',
18 => 'Text/Plain: Substring',
),
'transformation_file' => array (
0 => 'output/Application_Octetstream_Download.php',
1 => 'output/Application_Octetstream_Hex.php',
2 => 'output/Image_JPEG_Inline.php',
3 => 'output/Image_JPEG_Link.php',
4 => 'output/Image_PNG_Inline.php',
5 => 'output/Text_Octetstream_Sql.php',
6 => 'output/Text_Plain_Binarytoip.php',
7 => 'output/Text_Plain_Bool2Text.php',
8 => 'output/Text_Plain_Dateformat.php',
9 => 'output/Text_Plain_External.php',
10 => 'output/Text_Plain_Formatted.php',
11 => 'output/Text_Plain_Imagelink.php',
12 => 'output/Text_Plain_Json.php',
13 => 'output/Text_Plain_Sql.php',
14 => 'output/Text_Plain_Xml.php',
15 => 'Text_Plain_Link.php',
16 => 'Text_Plain_Longtoipv4.php',
17 => 'Text_Plain_PreApPend.php',
18 => 'Text_Plain_Substring.php',
),
'input_transformation' => array(
'Image/JPEG: Upload',
'Text/Plain: FileUpload',
'Text/Plain: Iptobinary',
'Text/Plain: JsonEditor',
'Text/Plain: RegexValidation',
'Text/Plain: SqlEditor',
'Text/Plain: XmlEditor',
'Text/Plain: Link',
'Text/Plain: Longtoipv4',
'Text/Plain: PreApPend',
'Text/Plain: Substring',
),
'input_transformation_file' => array(
'input/Image_JPEG_Upload.php',
'input/Text_Plain_FileUpload.php',
'input/Text_Plain_Iptobinary.php',
'input/Text_Plain_JsonEditor.php',
'input/Text_Plain_RegexValidation.php',
'input/Text_Plain_SqlEditor.php',
'input/Text_Plain_XmlEditor.php',
'Text_Plain_Link.php',
'Text_Plain_Longtoipv4.php',
'Text_Plain_PreApPend.php',
'Text_Plain_Substring.php',
),
),
PMA_getAvailableMIMEtypes()
);
}
/**
* Tests getting mime types for table
*
* @return void
*/
public function testGetMime()
{
$_SESSION['relation'][$GLOBALS['server']]['PMA_VERSION'] = PMA_VERSION;
$_SESSION['relation'][$GLOBALS['server']]['commwork'] = true;
$_SESSION['relation'][$GLOBALS['server']]['db'] = "pmadb";
$_SESSION['relation'][$GLOBALS['server']]['column_info'] = "column_info";
$_SESSION['relation'][$GLOBALS['server']]['trackingwork'] = false;
$this->assertEquals(
array(
'o' => array(
'column_name' => 'o',
'mimetype' => 'Text/plain',
'transformation' => 'Sql',
'transformation_options' => '',
'input_transformation' => 'regex',
'input_transformation_options' => '/pma/i',
),
'col' => array(
'column_name' => 'col',
'mimetype' => 'T',
'transformation' => 'o/P',
'transformation_options' => '',
'input_transformation' => 'i/p',
'input_transformation_options' => '',
),
),
PMA_getMIME('pma_test', 'table1')
);
}
/**
* Test for PMA_clearTransformations
*
* @return void
*/
public function testClearTransformations()
{
// Mock dbi
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->any())
->method('tryQuery')
->will($this->returnValue(true));
$GLOBALS['dbi'] = $dbi;
// Case 1 : no configuration storage
$actual = PMA_clearTransformations('db');
$this->assertEquals(
false,
$actual
);
$_SESSION['relation'][$GLOBALS['server']]['PMA_VERSION'] = PMA_VERSION;
$_SESSION['relation'][$GLOBALS['server']]['column_info'] = "column_info";
$_SESSION['relation'][$GLOBALS['server']]['db'] = "pmadb";
// Case 2 : database delete
$actual = PMA_clearTransformations('db');
$this->assertEquals(
true,
$actual
);
// Case 3 : table delete
$actual = PMA_clearTransformations('db', 'table');
$this->assertEquals(
true,
$actual
);
// Case 4 : column delete
$actual = PMA_clearTransformations('db', 'table', 'col');
$this->assertEquals(
true,
$actual
);
}
}

View File

@ -0,0 +1,455 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for methods under user_preferences library
*
* @package PhpMyAdmin-test
*/
/*
* Include to test
*/
use PMA\libraries\config\ConfigFile;
require_once 'libraries/user_preferences.lib.php';
require_once 'libraries/relation.lib.php';
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/sanitizing.lib.php';
/**
* tests for methods under user_preferences library
*
* @package PhpMyAdmin-test
*/
class PMA_User_Preferences_Test extends PHPUnit_Framework_TestCase
{
/**
* Setup various pre conditions
*
* @return void
*/
function setUp()
{
$GLOBALS['server'] = 0;
$GLOBALS['PMA_PHP_SELF'] = '/phpmyadmin/';
}
/**
* Test for PMA_userprefsPageInit
*
* @return void
*/
public function testUserPrefPageInit()
{
$GLOBALS['cfg'] = array(
'Server/hide_db' => 'testval123',
'Server/only_db' => 'test213'
);
$GLOBALS['cfg']['AvailableCharsets'] = array();
$GLOBALS['forms'] = array(
'form1' => array(
array('Servers/1/hide_db', 'bar'),
array('test' => 'val')
)
);
PMA_userprefsPageInit(new ConfigFile());
$this->assertEquals(
array(
'Servers' => array(
1 => array(
'hide_db' => 'testval123'
)
)
),
$_SESSION['ConfigFile' . $GLOBALS['server']]
);
}
/**
* Test for PMA_loadUserprefs
*
* @return void
*/
public function testLoadUserprefs()
{
$_SESSION['relation'][$GLOBALS['server']]['PMA_VERSION'] = PMA_VERSION;
$_SESSION['relation'][$GLOBALS['server']]['userconfigwork'] = null;
unset($_SESSION['userconfig']);
$result = PMA_loadUserprefs();
$this->assertCount(
3,
$result
);
$this->assertEquals(
array(),
$result['config_data']
);
$this->assertEquals(
time(),
$result['mtime'],
'',
2
);
$this->assertEquals(
'session',
$result['type']
);
// case 2
$_SESSION['relation'][$GLOBALS['server']]['userconfigwork'] = 1;
$_SESSION['relation'][$GLOBALS['server']]['db'] = "pma'db";
$_SESSION['relation'][$GLOBALS['server']]['userconfig'] = "testconf";
$_SESSION['relation'][$GLOBALS['server']]['user'] = "user";
$GLOBALS['controllink'] = null;
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$query = 'SELECT `config_data`, UNIX_TIMESTAMP(`timevalue`) ts '
. 'FROM `pma\'db`.`testconf` WHERE `username` = \'user\'';
$dbi->expects($this->once())
->method('fetchSingleRow')
->with($query, 'ASSOC', null)
->will(
$this->returnValue(
array(
'ts' => '123',
'config_data' => json_encode(array(1, 2))
)
)
);
$dbi->expects($this->any())
->method('escapeString')
->will($this->returnArgument(0));
$GLOBALS['dbi'] = $dbi;
$result = PMA_loadUserprefs();
$this->assertEquals(
array(
'config_data' => array(1, 2),
'mtime' => 123,
'type' => 'db'
),
$result
);
}
/**
* Test for PMA_saveUserprefs
*
* @return void
*/
public function testSaveUserprefs()
{
$GLOBALS['server'] = 2;
$_SESSION['relation'][2]['PMA_VERSION'] = PMA_VERSION;
$_SESSION['relation'][2]['userconfigwork'] = null;
unset($_SESSION['userconfig']);
$result = PMA_saveUserprefs(array(1));
$this->assertTrue(
$result
);
$this->assertCount(
2,
$_SESSION['userconfig']
);
$this->assertEquals(
array(1),
$_SESSION['userconfig']['db']
);
/* TODO: This breaks sometimes as there might be time difference! */
$this->assertEquals(
time(),
$_SESSION['userconfig']['ts'],
'',
2
);
$assert = true;
if (isset($_SESSION['cache']['server_2']['userprefs'])) {
$assert = false;
}
$this->assertTrue(
$assert
);
// case 2
$_SESSION['relation'][$GLOBALS['server']]['userconfigwork'] = 1;
$_SESSION['relation'][$GLOBALS['server']]['db'] = "pmadb";
$_SESSION['relation'][$GLOBALS['server']]['userconfig'] = "testconf";
$_SESSION['relation'][$GLOBALS['server']]['user'] = "user";
$GLOBALS['controllink'] = null;
$query1 = 'SELECT `username` FROM `pmadb`.`testconf` '
. 'WHERE `username` = \'user\'';
$query2 = 'UPDATE `pmadb`.`testconf` SET `timevalue` = NOW(), `config_data` = \''
. json_encode(array(1)) . '\' WHERE `username` = \'user\'';
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->once())
->method('fetchValue')
->with($query1, 0, 0, null)
->will($this->returnValue(true));
$dbi->expects($this->once())
->method('tryQuery')
->with($query2, null)
->will($this->returnValue(true));
$dbi->expects($this->any())
->method('escapeString')
->will($this->returnArgument(0));
$GLOBALS['dbi'] = $dbi;
$this->assertTrue(
PMA_saveUserprefs(array(1))
);
// case 3
$query1 = 'SELECT `username` FROM `pmadb`.`testconf` '
. 'WHERE `username` = \'user\'';
$query2 = 'INSERT INTO `pmadb`.`testconf` (`username`, `timevalue`,`config_data`) '
. 'VALUES (\'user\', NOW(), \'' . json_encode(array(1)) . '\')';
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->once())
->method('fetchValue')
->with($query1, 0, 0, null)
->will($this->returnValue(false));
$dbi->expects($this->once())
->method('tryQuery')
->with($query2, null)
->will($this->returnValue(false));
$dbi->expects($this->once())
->method('getError')
->with(null)
->will($this->returnValue("err1"));
$dbi->expects($this->any())
->method('escapeString')
->will($this->returnArgument(0));
$GLOBALS['dbi'] = $dbi;
$result = PMA_saveUserprefs(array(1));
$this->assertEquals(
'Could not save configuration <br /><br /> err1',
$result->getMessage()
);
}
/**
* Test for PMA_applyUserprefs
*
* @return void
*/
public function testApplyUserprefs()
{
$GLOBALS['cfg']['UserprefsDisallow'] = array(
'test' => 'val',
'foo' => 'bar'
);
$GLOBALS['cfg']['UserprefsDeveloperTab'] = null;
$result = PMA_applyUserprefs(
array(
'DBG/sql' => true,
'ErrorHandler/display' => true,
'ErrorHandler/gather' => false,
'Servers/foobar' => '123',
'Server/hide_db' => true
)
);
$this->assertEquals(
array(
'Server' => array(
'hide_db' => 1
)
),
$result
);
}
/**
* Test for PMA_readUserprefsFieldNames
*
* @return void
*/
public function testReadUserprefsFieldNames()
{
$this->assertGreaterThan(
0,
count(PMA_readUserprefsFieldNames())
);
$forms = array(
'form1' => array(
array('Servers/1/hide_db', 'bar'),
array('test' => 'val')
)
);
$this->assertEquals(
array('Servers/1/hide_db', 'bar', 'test'),
PMA_readUserprefsFieldNames($forms)
);
}
/**
* Test for PMA_persistOption
*
* @return void
*/
public function testPersistOption()
{
$_SESSION['relation'][$GLOBALS['server']]['PMA_VERSION'] = PMA_VERSION;
$_SESSION['relation'][$GLOBALS['server']]['userconfigwork'] = null;
$_SESSION['userconfig'] = array();
$_SESSION['userconfig']['ts'] = "123";
$_SESSION['userconfig']['db'] = array(
'Server/hide_db' => true,
'Server/only_db' => true,
);
$GLOBALS['server'] = 2;
$_SESSION['relation'][2]['userconfigwork'] = null;
$this->assertNull(
PMA_persistOption('Server/hide_db', 'val', 'val')
);
$this->assertNull(
PMA_persistOption('Server/hide_db', 'val2', 'val')
);
$this->assertNull(
PMA_persistOption('Server/hide_db2', 'val', 'val')
);
}
/**
* Test for PMA_userprefsRedirect
*
* @return void
*/
public function testUserprefsRedirect()
{
if (!defined('PMA_TEST_HEADERS')) {
$this->markTestSkipped(
'Cannot redefine constant/function - missing runkit extension'
);
}
$GLOBALS['PMA_Config']->set('PmaAbsoluteUri', '');
$GLOBALS['cfg']['ServerDefault'] = 1;
$GLOBALS['lang'] = '';
$redefine = null;
if (!defined('PMA_IS_IIS')) {
define('PMA_IS_IIS', false);
} else {
$redefine = PMA_IS_IIS;
runkit_constant_redefine('PMA_IS_IIS', false);
}
PMA_userprefsRedirect(
'file.html',
array('a' => 'b'),
'h ash'
);
$this->assertContains(
'Location: /phpmyadmin/file.html?a=b&saved=1&server=0&' .
'token=token#h+ash',
$GLOBALS['header'][0]
);
if ($redefine !== null) {
runkit_constant_redefine('PMA_IS_IIS', $redefine);
} else {
runkit_constant_remove('PMA_IS_IIS');
}
}
/**
* Test for PMA_userprefsAutoloadGetHeader
*
* @return void
*/
public function testUserprefsAutoloadGetHeader()
{
$_SESSION['userprefs_autoload'] = false;
$_REQUEST['prefs_autoload'] = 'hide';
$this->assertEquals(
'',
PMA_userprefsAutoloadGetHeader()
);
$this->assertTrue(
$_SESSION['userprefs_autoload']
);
$_REQUEST['prefs_autoload'] = 'nohide';
$GLOBALS['cfg']['ServerDefault'] = 1;
$GLOBALS['PMA_PHP_SELF'] = 'phpunit';
$result = PMA_userprefsAutoloadGetHeader();
$this->assertContains(
'<form action="prefs_manage.php" method="post" class="disableAjax">',
$result
);
$this->assertContains(
'<input type="hidden" name="token" value="token"',
$result
);
$this->assertContains(
'<input type="hidden" name="json" value="" />',
$result
);
$this->assertContains(
'<input type="hidden" name="submit_import" value="1" />',
$result
);
$this->assertContains(
'<input type="hidden" name="return_url" value="phpunit?" />',
$result
);
}
}

View File

@ -0,0 +1,186 @@
<?php
/**
* Tests zip extension usage.
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/zip_extension.lib.php';
/**
* Tests zip extension usage.
*
* @package PhpMyAdmin-test
*/
class PMA_ZipExtension_Test extends PHPUnit_Framework_TestCase
{
/**
* Test zip file content
*
* @param string $file zip file
* @param string $specific_entry regular expression to match a file
* @param mixed $output expected output
*
* @dataProvider providerForTestGetZipContents
* @return void
*/
public function testGetZipContents($file, $specific_entry, $output)
{
$this->assertEquals(
PMA_getZipContents($file, $specific_entry),
$output
);
}
/**
* Provider for testGetZipContents
*
* @return array
*/
public function providerForTestGetZipContents()
{
return array(
array(
'./test/test_data/test.zip',
null,
array(
'error' => '',
'data' => 'TEST FILE' . "\n"
)
),
array(
'./test/test_data/test.zip',
'test',
array(
'error' => 'Error in ZIP archive: Could not find "test"',
'data' => ''
)
)
);
}
/**
* Test Find file in Zip Archive
*
* @param string $file_regexp regular expression for the file name to match
* @param string $file zip archive
* @param mixed $output expected output
*
* @dataProvider providerForTestFindFileFromZipArchive
* @return void
*/
public function testFindFileFromZipArchive($file_regexp, $file, $output)
{
$this->assertEquals(
PMA_findFileFromZipArchive($file_regexp, $file),
$output
);
}
/**
* Provider for testFindFileFromZipArchive
*
* @return array Test data
*/
public function providerForTestFindFileFromZipArchive()
{
return array(
array(
'/test/',
'./test/test_data/test.zip',
'test.file'
)
);
}
/**
* Test for PMA_getNoOfFilesInZip
*
* @return void
*/
public function testGetNoOfFilesInZip()
{
$this->assertEquals(
PMA_getNoOfFilesInZip('./test/test_data/test.zip'),
1
);
}
/**
* Test for PMA_zipExtract
*
* @return void
*/
public function testZipExtract()
{
$this->assertEquals(
false,
PMA_zipExtract(
'./test/test_data/test.zip', 'wrongName'
)
);
$this->assertEquals(
"TEST FILE\n",
PMA_zipExtract(
'./test/test_data/test.zip', 'test.file'
)
);
}
/**
* Test for PMA_getZipError
*
* @param int $code error code
* @param mixed $output expected output
*
* @dataProvider providerForTestGetZipError
* @return void
*/
public function testGetZipError($code, $output)
{
$this->assertEquals(
PMA_getZipError($code),
$output
);
}
/**
* Provider for testGetZipError
*
* @return array
*/
public function providerForTestGetZipError()
{
return array(
array(
1,
'Multi-disk zip archives not supported'
),
array(
5,
'Read error'
),
array(
7,
'CRC error'
),
array(
19,
'Not a zip archive'
),
array(
21,
'Zip archive inconsistent'
),
array(
404,
404
)
);
}
}

View File

@ -0,0 +1,76 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA\libraries\Util::getBrowseUploadFileBlock from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
* Test for PMA\libraries\Util::getBrowseUploadFileBlock from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_GetBrowseUploadFileBlock_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
protected function setUp()
{
$GLOBALS['is_upload'] = false;
}
/**
* Data provider for test
*
* @return array
*/
public function dataProvider()
{
return array(
array(10, __('B'), "10"),
array(100, __('B'), "100"),
array(1024, __('B'), "1,024"),
array(102400, __('KiB'), "100"),
array(10240000, __('MiB'), "10"),
array(2147483648, __('MiB'), "2,048"),
array(21474836480, __('GiB'), "20")
);
}
/**
* Test for PMA\libraries\Util::getBrowseUploadFileBlock
*
* @param int $size Size
* @param string $unit Unit
* @param string $res Result
*
* @return void
*
* @dataProvider dataProvider
*/
function testBrowseUploadFile($size, $unit, $res)
{
$this->assertEquals(
PMA\libraries\Util::getBrowseUploadFileBlock($size),
'<label for="input_import_file">' . __("Browse your computer:")
. '</label>'
. '<div id="upload_form_status" style="display: none;"></div>'
. '<div id="upload_form_status_info" style="display: none;"></div>'
. '<input type="file" name="import_file" id="input_import_file" />'
. "(" . __('Max: ') . $res . $unit . ")" . "\n"
. '<input type="hidden" name="MAX_FILE_SIZE" value="'
. $size . '" />' . "\n"
);
}
}

View File

@ -0,0 +1,69 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA\libraries\Util::buildActionTitles from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
/**
* Test for PMA\libraries\Util::buildActionTitles from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_BuildActionTitles_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
function setup()
{
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$GLOBALS['cfg'] = array('ActionLinksMode' => 'both');
$GLOBALS['pmaThemeImage'] = 'theme/';
}
/**
* Test for buildActionTitles
*
* @return void
*/
function testBuildActionTitles()
{
$titles = array();
$titles['Browse'] = PMA\libraries\Util::getIcon('b_browse.png', __('Browse'));
$titles['NoBrowse'] = PMA\libraries\Util::getIcon('bd_browse.png', __('Browse'));
$titles['Search'] = PMA\libraries\Util::getIcon('b_select.png', __('Search'));
$titles['NoSearch'] = PMA\libraries\Util::getIcon('bd_select.png', __('Search'));
$titles['Insert'] = PMA\libraries\Util::getIcon('b_insrow.png', __('Insert'));
$titles['NoInsert'] = PMA\libraries\Util::getIcon('bd_insrow.png', __('Insert'));
$titles['Structure'] = PMA\libraries\Util::getIcon('b_props.png', __('Structure'));
$titles['Drop'] = PMA\libraries\Util::getIcon('b_drop.png', __('Drop'));
$titles['NoDrop'] = PMA\libraries\Util::getIcon('bd_drop.png', __('Drop'));
$titles['Empty'] = PMA\libraries\Util::getIcon('b_empty.png', __('Empty'));
$titles['NoEmpty'] = PMA\libraries\Util::getIcon('bd_empty.png', __('Empty'));
$titles['Edit'] = PMA\libraries\Util::getIcon('b_edit.png', __('Edit'));
$titles['NoEdit'] = PMA\libraries\Util::getIcon('bd_edit.png', __('Edit'));
$titles['Export'] = PMA\libraries\Util::getIcon('b_export.png', __('Export'));
$titles['NoExport'] = PMA\libraries\Util::getIcon('bd_export.png', __('Export'));
$titles['Execute'] = PMA\libraries\Util::getIcon('b_nextpage.png', __('Execute'));
$titles['NoExecute'] = PMA\libraries\Util::getIcon('bd_nextpage.png', __('Execute'));
$titles['Favorite'] = PMA\libraries\Util::getIcon('b_favorite.png', '');
$titles['NoFavorite'] = PMA\libraries\Util::getIcon('b_no_favorite.png', '');
$this->assertEquals($titles, PMA\libraries\Util::buildActionTitles());
}
}

View File

@ -0,0 +1,136 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for caching data in session
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
* Test for caching data in session
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_Cache_Test extends PHPUnit_Framework_TestCase
{
/**
* @var array temporary variable for globals array
*/
protected $tmpGlobals;
/**
* @var array temporary variable for session array
*/
protected $tmpSession;
/**
* storing globals and session
*
* @return void
*/
public function setUp()
{
$this->tmpGlobals = $GLOBALS;
$this->tmpSession = $_SESSION;
}
/**
* Test if cached data is available after set
*
* @return void
*/
public function testCacheExists()
{
$GLOBALS['server'] = 'server';
PMA\libraries\Util::cacheSet('test_data', 5);
PMA\libraries\Util::cacheSet('test_data_2', 5);
$this->assertTrue(PMA\libraries\Util::cacheExists('test_data'));
$this->assertTrue(PMA\libraries\Util::cacheExists('test_data_2'));
$this->assertFalse(PMA\libraries\Util::cacheExists('fake_data_2'));
}
/**
* Test if PMA\libraries\Util::cacheGet does not return data for non existing cache entries
*
* @return void
*/
public function testCacheGet()
{
$GLOBALS['server'] = 'server';
PMA\libraries\Util::cacheSet('test_data', 5);
PMA\libraries\Util::cacheSet('test_data_2', 5);
$this->assertNotNull(PMA\libraries\Util::cacheGet('test_data'));
$this->assertNotNull(PMA\libraries\Util::cacheGet('test_data_2'));
$this->assertNull(PMA\libraries\Util::cacheGet('fake_data_2'));
}
/**
* Test retrieval of cached data
*
* @return void
*/
public function testCacheSetGet()
{
$GLOBALS['server'] = 'server';
PMA\libraries\Util::cacheSet('test_data', 25);
PMA\libraries\Util::cacheSet('test_data', 5);
$this->assertEquals(5, $_SESSION['cache']['server_server']['test_data']);
PMA\libraries\Util::cacheSet('test_data_3', 3);
$this->assertEquals(3, $_SESSION['cache']['server_server']['test_data_3']);
}
/**
* Test clearing cached values
*
* @return void
*/
public function testCacheUnSet()
{
$GLOBALS['server'] = 'server';
PMA\libraries\Util::cacheSet('test_data', 25);
PMA\libraries\Util::cacheSet('test_data_2', 25);
PMA\libraries\Util::cacheUnset('test_data');
$this->assertArrayNotHasKey(
'test_data',
$_SESSION['cache']['server_server']
);
PMA\libraries\Util::cacheUnset('test_data_2');
$this->assertArrayNotHasKey(
'test_data_2',
$_SESSION['cache']['server_server']
);
}
/**
* Test clearing user cache
*
* @return void
*/
public function testClearUserCache()
{
$GLOBALS['server'] = 'server';
PMA\libraries\Util::cacheSet('is_superuser', 'yes');
$this->assertEquals(
'yes',
$_SESSION['cache']['server_server']['is_superuser']
);
PMA\libraries\Util::clearUserCache();
$this->assertArrayNotHasKey(
'is_superuser',
$_SESSION['cache']['server_server']
);
}
}

View File

@ -0,0 +1,76 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::checkParameters from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/sanitizing.lib.php';
/**
** Test for PMA\libraries\Util::checkParameters from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_CheckParameters_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
function setup()
{
$GLOBALS['PMA_Config'] = new PMA\libraries\Config();
$_SESSION['PMA_Theme'] = new Theme();
$GLOBALS['cfg'] = array('ServerDefault' => 1);
$GLOBALS['pmaThemeImage'] = 'theme/';
$GLOBALS['text_dir'] = 'ltr';
}
/**
* Test for checkParameters
*
* @return void
*/
function testCheckParameterMissing()
{
$GLOBALS['PMA_PHP_SELF'] = PMA_getenv('PHP_SELF');
$GLOBALS['pmaThemePath'] = $_SESSION['PMA_Theme']->getPath();
$this->expectOutputRegex("/Missing parameter: field/");
PMA\libraries\Util::checkParameters(
array('db', 'table', 'field')
);
}
/**
* Test for checkParameters
*
* @return void
*/
function testCheckParameter()
{
$GLOBALS['PMA_PHP_SELF'] = PMA_getenv('PHP_SELF');
$GLOBALS['pmaThemePath'] = $_SESSION['PMA_Theme']->getPath();
$GLOBALS['db'] = "dbDatabase";
$GLOBALS['table'] = "tblTable";
$GLOBALS['field'] = "test_field";
$GLOBALS['sql_query'] = "SELECT * FROM tblTable;";
$this->expectOutputString("");
PMA\libraries\Util::checkParameters(
array('db', 'table', 'field', 'sql_query')
);
}
}

View File

@ -0,0 +1,56 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::containsNonPrintableAscii from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::containsNonPrintableAscii from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_ContainsNonPrintableAsciiTest extends PHPUnit_Framework_TestCase
{
/**
* data provider for testContainsNonPrintableAscii
*
* @return array
*/
public function dataProvider()
{
return array(
array("normal string", 0),
array("new\nline", 1),
array("tab\tspace", 1),
array("escape" . chr(27) . "char", 1),
array("chars%$\r\n", 1),
);
}
/**
* Test for containsNonPrintableAscii
*
* @param string $str Value
* @param bool $res Expected value
*
* @return void
*
* @dataProvider dataProvider
*/
public function testContainsNonPrintableAscii($str, $res)
{
$this->assertEquals(
$res, PMA\libraries\Util::containsNonPrintableAscii($str)
);
}
}

View File

@ -0,0 +1,57 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::convertBitDefaultValue from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::convertBitDefaultValue from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_ConvertBitDefaultValueTest extends PHPUnit_Framework_TestCase
{
/**
* Provider for testConvertBitDefaultValueTest
*
* @return array
*
* @dataProvider dataProvider
*/
public function dataProvider()
{
return array(
array("b'",""),
array("b'01'","01"),
array("b'010111010'","010111010")
);
}
/**
* Test for convertBitDefaultValue
*
* @param string $bit Value
* @param string $val Expected value
*
* @return void
*
* @dataProvider dataProvider
*/
public function testConvertBitDefaultValueTest($bit, $val)
{
$this->assertEquals(
$val, PMA\libraries\Util::convertBitDefaultValue($bit)
);
}
}

View File

@ -0,0 +1,75 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for MySQL Wildcards escaping/unescaping
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
* Test for MySQL Wildcards escaping/unescaping
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_EscapeMySqlWildcardsTest extends PHPUnit_Framework_TestCase
{
/**
* data provider for testEscape and testUnEscape
*
* @return array
*/
public function escapeDataProvider()
{
return array(
array('\_test', '_test'),
array('\_\\', '_\\'),
array('\\_\%', '_%'),
array('\\\_', '\_'),
array('\\\_\\\%', '\_\%'),
array('\_\\%\_\_\%', '_%__%'),
array('\%\_', '%_'),
array('\\\%\\\_', '\%\_')
);
}
/**
* PMA\libraries\Util::escapeMysqlWildcards tests
*
* @param string $a String to escape
* @param string $b Expected value
*
* @return void
*
* @dataProvider escapeDataProvider
*/
public function testEscape($a, $b)
{
$this->assertEquals(
$a, PMA\libraries\Util::escapeMysqlWildcards($b)
);
}
/**
* PMA\libraries\Util::unescapeMysqlWildcards tests
*
* @param string $a String to escape
* @param string $b Expected value
*
* @return void
*
* @dataProvider escapeDataProvider
*/
public function testUnEscape($a, $b)
{
$this->assertEquals(
$b, PMA\libraries\Util::unescapeMysqlWildcards($a)
);
}
}

View File

@ -0,0 +1,98 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::expandUserString from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::expandUserString function.
*
* @package PhpMyAdmin-test
*/
class PMA_ExpandUserString_Test extends PHPUnit_Framework_TestCase
{
/**
* Setup variables needed by test.
*
* @return void
*/
public function setup()
{
$GLOBALS['PMA_Config'] = new PMA\libraries\Config();
$GLOBALS['PMA_Config']->enableBc();
$GLOBALS['cfg'] = array(
'Server' => array(
'host' => 'host&',
'verbose' => 'verbose',
)
);
$GLOBALS['db'] = 'database';
$GLOBALS['table'] = 'table';
}
/**
* Test case for expanding strings
*
* @param string $in string to evaluate
* @param string $out expected output
*
* @return void
*
* @dataProvider provider
*/
public function testExpand($in, $out)
{
$out = str_replace('PMA_VERSION', PMA_VERSION, $out);
$this->assertEquals(
$out, PMA\libraries\Util::expandUserString($in)
);
}
/**
* Test case for expanding strings with escaping
*
* @param string $in string to evaluate
* @param string $out expected output
*
* @return void
*
* @dataProvider provider
*/
public function testExpandEscape($in, $out)
{
$out = str_replace('PMA_VERSION', PMA_VERSION, $out);
$this->assertEquals(
htmlspecialchars($out),
PMA\libraries\Util::expandUserString(
$in, 'htmlspecialchars'
)
);
}
/**
* Data provider
*
* @return array
*/
public function provider()
{
return array(
array('@SERVER@', 'host&'),
array('@VSERVER@', 'verbose'),
array('@DATABASE@', 'database'),
array('@TABLE@', 'table'),
array('@IGNORE@', '@IGNORE@'),
array('@PHPMYADMIN@', 'phpMyAdmin PMA_VERSION'),
);
}
}

View File

@ -0,0 +1,164 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::extractColumnSpec from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::extractColumnSpec function.
*
* @package PhpMyAdmin-test
*/
class PMA_ExtractColumnSpec_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
protected function setUp()
{
$GLOBALS['cfg']['LimitChars'] = 1000;
}
/**
* Test case for parsing SHOW COLUMNS output
*
* @param string $in Column specification
* @param array $out Expected value
*
* @return void
*
* @dataProvider provider
*/
public function testParsing($in, $out)
{
$this->assertEquals(
$out, PMA\libraries\Util::extractColumnSpec($in)
);
}
/**
* Data provider
*
* @return array
*/
public function provider()
{
return array(
array(
"SET('a','b')",
array(
'type' => 'set',
'print_type' => "set('a', 'b')",
'binary' => false,
'unsigned' => false,
'zerofill' => false,
'spec_in_brackets' => "'a','b'",
'enum_set_values' => array('a', 'b'),
'attribute' => ' ',
'can_contain_collation' => true,
'displayed_type' => "set('a', 'b')"
),
),
array(
"SET('\'a','b')",
array(
'type' => 'set',
'print_type' => "set('\'a', 'b')",
'binary' => false,
'unsigned' => false,
'zerofill' => false,
'spec_in_brackets' => "'\'a','b'",
'enum_set_values' => array("'a", 'b'),
'attribute' => ' ',
'can_contain_collation' => true,
'displayed_type' => "set('\'a', 'b')"
),
),
array(
"SET('''a','b')",
array(
'type' => 'set',
'print_type' => "set('''a', 'b')",
'binary' => false,
'unsigned' => false,
'zerofill' => false,
'spec_in_brackets' => "'''a','b'",
'enum_set_values' => array("'a", 'b'),
'attribute' => ' ',
'can_contain_collation' => true,
'displayed_type' => "set('''a', 'b')"
),
),
array(
"ENUM('a&b', 'b''c\\'d', 'e\\\\f')",
array(
'type' => 'enum',
'print_type' => "enum('a&b', 'b''c\\'d', 'e\\\\f')",
'binary' => false,
'unsigned' => false,
'zerofill' => false,
'spec_in_brackets' => "'a&b', 'b''c\\'d', 'e\\\\f'",
'enum_set_values' => array('a&b', 'b\'c\'d', 'e\\f'),
'attribute' => ' ',
'can_contain_collation' => true,
'displayed_type' => "enum('a&amp;b', 'b''c\\'d', 'e\\\\f')"
),
),
array(
"INT UNSIGNED zerofill",
array(
'type' => 'int',
'print_type' => 'int',
'binary' => false,
'unsigned' => true,
'zerofill' => true,
'spec_in_brackets' => '',
'enum_set_values' => array(),
'attribute' => 'UNSIGNED ZEROFILL',
'can_contain_collation' => false,
'displayed_type' => "int"
),
),
array(
"VARCHAR(255)",
array(
'type' => 'varchar',
'print_type' => 'varchar(255)',
'binary' => false,
'unsigned' => false,
'zerofill' => false,
'spec_in_brackets' => '255',
'enum_set_values' => array(),
'attribute' => ' ',
'can_contain_collation' => true,
'displayed_type' => "varchar(255)"
),
),
array(
"VARBINARY(255)",
array(
'type' => 'varbinary',
'print_type' => 'varbinary(255)',
'binary' => false,
'unsigned' => false,
'zerofill' => false,
'spec_in_brackets' => '255',
'enum_set_values' => array(),
'attribute' => ' ',
'can_contain_collation' => false,
'displayed_type' => "varbinary(255)"
),
),
);
}
}

View File

@ -0,0 +1,55 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::extractValueFromFormattedSize from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::extractValueFromFormattedSize from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_ExtractValueFromFormattedSize_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for extractValueFromFormattedSize
*
* @param int|string $size Size
* @param int $expected Expected value
*
* @return void
*
* @dataProvider provider
*/
function testExtractValueFromFormattedSize($size, $expected)
{
$this->assertEquals(
$expected,
PMA\libraries\Util::extractValueFromFormattedSize($size)
);
}
/**
* Data provider for testExtractValueFromFormattedSize
*
* @return array
*/
public function provider()
{
return array(
array(100, -1),
array("10GB", 10737418240),
array("15MB", 15728640),
array("256K", 262144)
);
}
}

View File

@ -0,0 +1,53 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for supporting foreign key
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
* Test for supporting foreign key
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_IsForeignKeySupportedTest extends PHPUnit_Framework_TestCase
{
/**
* data provider for foreign key supported test
*
* @return array
*/
public function foreignkeySupportedDataProvider()
{
return array(
array('MyISAM', false),
array('innodb', true),
array('pBxT', true)
);
}
/**
* foreign key supported test
*
* @param string $a Engine
* @param bool $e Expected Value
*
* @return void
*
* @dataProvider foreignkeySupportedDataProvider
*/
public function testForeignkeySupported($a, $e)
{
$this->assertEquals(
$e, PMA\libraries\Util::isForeignKeySupported($a)
);
}
}

View File

@ -0,0 +1,169 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for format number and byte
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
* Test for format number and byte
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_FormatNumberByteDown_Test extends PHPUnit_Framework_TestCase
{
/**
* temporary variable for globals array
*/
protected $tmpGlobals;
/**
* temporary variable for session array
*/
protected $tmpSession;
/**
* storing globals and session
*
* @return void
*/
public function setUp()
{
$this->tmpGlobals = $GLOBALS;
$this->tmpSession = $_SESSION;
}
/**
* recovering globals and session
*
* @return void
*/
public function tearDown()
{
$GLOBALS = $this->tmpGlobals;
$_SESSION = $this->tmpSession;
}
/**
* format number data provider
*
* @return array
*/
public function formatNumberDataProvider()
{
return array(
array(10, 2, 2, '10 '),
array(100, 2, 0, '100 '),
array(100, 2, 2, '100 '),
array(-1000.454, 4, 2, '-1,000.45 '),
array(0.00003, 3, 2, '30 &micro;'),
array(0.003, 3, 3, '3 m'),
array(-0.003, 6, 0, '-3,000 &micro;'),
array(100.98, 0, 2, '100.98'),
array(21010101, 0, 2, '21,010,101.00'),
array(20000, 2, 2, '20 k'),
array(20011, 2, 2, '20.01 k'),
);
}
/**
* Core test for formatNumber
*
*
* @param float $a Value to format
* @param int $b Sensitiveness
* @param int $c Number of decimals to retain
* @param array $d Expected value
*
* @return void
*/
private function assertFormatNumber($a, $b, $c, $d)
{
$this->assertEquals(
$d,
(string) PMA\libraries\Util::formatNumber(
$a, $b, $c, false
)
);
}
/**
* format number test, globals are defined
*
* @param float $a Value to format
* @param int $b Sensitiveness
* @param int $c Number of decimals to retain
* @param array $d Expected value
*
* @return void
*
* @dataProvider formatNumberDataProvider
*/
public function testFormatNumber($a, $b, $c, $d)
{
$this->assertFormatNumber($a, $b, $c, $d);
// Test with various precisions
$old_precision = ini_get('precision');
ini_set('precision', 20);
$this->assertFormatNumber($a, $b, $c, $d);
ini_set('precision', 14);
$this->assertFormatNumber($a, $b, $c, $d);
ini_set('precision', 10);
$this->assertFormatNumber($a, $b, $c, $d);
ini_set('precision', 5);
$this->assertFormatNumber($a, $b, $c, $d);
ini_set('precision', -1);
$this->assertFormatNumber($a, $b, $c, $d);
ini_set('precision', $old_precision);
}
/**
* format byte down data provider
*
* @return array
*/
public function formatByteDownDataProvider()
{
return array(
array(10, 2, 2, array('10', __('B'))),
array(100, 2, 0, array('0', __('KiB'))),
array(100, 3, 0, array('100', __('B'))),
array(100, 2, 2, array('0.10', __('KiB'))),
array(1034, 3, 2, array('1.01', __('KiB'))),
array(100233, 3, 3, array('97.884', __('KiB'))),
array(2206451, 1, 2, array('2.10', __('MiB'))),
array(21474836480, 4, 0, array('20', __('GiB'))),
array(doubleval(52) + doubleval(2048), 3, 1, array('2.1', 'KiB')),
);
}
/**
* format byte test, globals are defined
*
* @param float $a Value to format
* @param int $b Sensitiveness
* @param int $c Number of decimals to retain
* @param array $e Expected value
*
* @return void
*
* @dataProvider formatByteDownDataProvider
*/
public function testFormatByteDown($a, $b, $c, $e)
{
$result = PMA\libraries\Util::formatByteDown($a, $b, $c);
$result[0] = trim($result[0]);
$this->assertEquals($e, $result);
}
}

View File

@ -0,0 +1,55 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::formatSql from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::formatSql from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_FormatSql_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for formatSql
*
* @return void
*/
function testFormatSQL()
{
$this->assertEquals(
'<code class="sql"><pre>' . "\n"
. 'SELECT 1 &lt; 2' . "\n"
. '</pre></code>',
PMA\libraries\Util::formatSql('SELECT 1 < 2')
);
}
/**
* Test for formatSql
*
* @return void
*/
function testFormatSQLTruncate()
{
$GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] = 6;
$this->assertEquals(
'<code class="sql"><pre>' . "\n"
. 'SELECT[...]' . "\n"
. '</pre></code>',
PMA\libraries\Util::formatSql('SELECT 1 < 2', true)
);
}
}

View File

@ -0,0 +1,57 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::generateHiddenMaxFileSize from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::generateHiddenMaxFileSize from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_GenerateHiddenMaxFileSize_Test extends PHPUnit_Framework_TestCase
{
/**
* Data provider for test
*
* @return array
*/
public function dataProvider()
{
return array(
array(10),
array("100"),
array(1024),
array("1024Mb"),
array(2147483648),
array("some_string")
);
}
/**
* Test for generateHiddenMaxFileSize
*
* @param int $size Size
*
* @return void
*
* @dataProvider dataProvider
*/
function testGenerateHiddenMaxFileSize($size)
{
$this->assertEquals(
PMA\libraries\Util::generateHiddenMaxFileSize($size),
'<input type="hidden" name="MAX_FILE_SIZE" value="' . $size . '" />'
);
}
}

View File

@ -0,0 +1,94 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::getCheckbox from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::getCheckbox from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_GetCheckboxTest extends PHPUnit_Framework_TestCase
{
/**
* Test for getCheckbox
*
* @return void
*/
function testGetCheckbox()
{
$name = "test_display_html_checkbox";
$label = "text_label_for_checkbox";
$this->assertEquals(
PMA\libraries\Util::getCheckbox($name, $label, false, false, $name),
'<input type="checkbox" name="' . $name . '" id="' . $name
. '" /><label for="' . $name . '">' . $label
. '</label>'
);
}
/**
* Test for getCheckbox
*
* @return void
*/
function testGetCheckboxChecked()
{
$name = "test_display_html_checkbox";
$label = "text_label_for_checkbox";
$this->assertEquals(
PMA\libraries\Util::getCheckbox($name, $label, true, false, $name),
'<input type="checkbox" name="' . $name . '" id="' . $name
. '" checked="checked" /><label for="' . $name . '">' . $label
. '</label>'
);
}
/**
* Test for getCheckbox
*
* @return void
*/
function testGetCheckboxOnclick()
{
$name = "test_display_html_checkbox";
$label = "text_label_for_checkbox";
$this->assertEquals(
PMA\libraries\Util::getCheckbox($name, $label, false, true, $name),
'<input type="checkbox" name="' . $name . '" id="' . $name
. '" class="autosubmit" /><label for="' . $name . '">' . $label
. '</label>'
);
}
/**
* Test for getCheckbox
*
* @return void
*/
function testGetCheckboxCheckedOnclick()
{
$name = "test_display_html_checkbox";
$label = "text_label_for_checkbox";
$this->assertEquals(
PMA\libraries\Util::getCheckbox($name, $label, true, true, $name),
'<input type="checkbox" name="' . $name . '" id="' . $name
. '" checked="checked" class="autosubmit" /><label for="' . $name
. '">' . $label . '</label>'
);
}
}

View File

@ -0,0 +1,118 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA_getDbLink_test from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
require_once 'libraries/url_generating.lib.php';
/**
* Test for PMA_getDbLink_test from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_GetDbLink_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
function setUp()
{
global $cfg;
include 'libraries/config.default.php';
$GLOBALS['server'] = 99;
}
/**
* Test for getDbLink
*
* @return void
*
* @group medium
*/
function testGetDbLinkEmpty()
{
$GLOBALS['db'] = null;
$this->assertEmpty(PMA\libraries\Util::getDbLink());
}
/**
* Test for getDbLink
*
* @return void
*
* @group medium
*/
function testGetDbLinkNull()
{
global $cfg;
$GLOBALS['db'] = 'test_db';
$database = $GLOBALS['db'];
$this->assertEquals(
'<a href="'
. PMA\libraries\Util::getScriptNameForOption(
$GLOBALS['cfg']['DefaultTabDatabase'], 'database'
)
. '?db=' . $database
. '&amp;server=99&amp;lang=en&amp;token=token" '
. 'title="Jump to database &quot;'
. htmlspecialchars($database) . '&quot;.">'
. htmlspecialchars($database) . '</a>',
PMA\libraries\Util::getDbLink()
);
}
/**
* Test for getDbLink
*
* @return void
*/
function testGetDbLink()
{
global $cfg;
$database = 'test_database';
$this->assertEquals(
'<a href="' . PMA\libraries\Util::getScriptNameForOption(
$GLOBALS['cfg']['DefaultTabDatabase'], 'database'
)
. '?db=' . $database
. '&amp;server=99&amp;lang=en&amp;token=token" title="Jump to database &quot;'
. htmlspecialchars($database) . '&quot;.">'
. htmlspecialchars($database) . '</a>',
PMA\libraries\Util::getDbLink($database)
);
}
/**
* Test for getDbLink
*
* @return void
*/
function testGetDbLinkWithSpecialChars()
{
global $cfg;
$database = 'test&data\'base';
$this->assertEquals(
'<a href="'
. PMA\libraries\Util::getScriptNameForOption(
$GLOBALS['cfg']['DefaultTabDatabase'], 'database'
)
. '?db='
. htmlspecialchars(urlencode($database))
. '&amp;server=99&amp;lang=en&amp;token=token" title="Jump to database &quot;'
. htmlspecialchars($database) . '&quot;.">'
. htmlspecialchars($database) . '</a>',
PMA\libraries\Util::getDbLink($database)
);
}
}

View File

@ -0,0 +1,82 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::getDivForSliderEffect from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::getDivForSliderEffect from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_GetDivForSliderEffectTest extends PHPUnit_Framework_TestCase
{
/**
* Test for getDivForSliderEffect
*
* @return void
*/
function testGetDivForSliderEffectTest()
{
global $cfg;
$cfg['InitialSlidersState'] = 'undefined';
$id = "test_id";
$message = "test_message";
$this->assertEquals(
PMA\libraries\Util::getDivForSliderEffect($id, $message),
'<div id="' . $id . '" class="pma_auto_slider" title="'
. htmlspecialchars($message) . '">'
);
}
/**
* Test for getDivForSliderEffect
*
* @return void
*/
function testGetDivForSliderEffectTestClosed()
{
global $cfg;
$cfg['InitialSlidersState'] = 'closed';
$id = "test_id";
$message = "test_message";
$this->assertEquals(
PMA\libraries\Util::getDivForSliderEffect($id, $message),
'<div id="' . $id . '" style="display: none; overflow:auto;" '
. 'class="pma_auto_slider" title="' . htmlspecialchars($message) . '">'
);
}
/**
* Test for getDivForSliderEffect
*
* @return void
*/
function testGetDivForSliderEffectTestDisabled()
{
global $cfg;
$cfg['InitialSlidersState'] = 'disabled';
$id = "test_id";
$message = "test_message";
$this->assertEquals(
PMA\libraries\Util::getDivForSliderEffect($id, $message),
'<div id="' . $id . '">'
);
}
}

View File

@ -0,0 +1,107 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::getDropdown from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::getDropdown from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_GetDropdownTest extends PHPUnit_Framework_TestCase
{
/**
* Test for getDropdown
*
* @return void
*/
function testGetDropdownEmpty()
{
$name = "test_dropdown_name";
$choices = array();
$active_choice = null;
$id = "test_&lt;dropdown&gt;_name";
$result = '<select name="' . htmlspecialchars($name) . '" id="'
. htmlspecialchars($id) . '"></select>';
$this->assertEquals(
$result,
PMA\libraries\Util::getDropdown(
$name, $choices, $active_choice, $id
)
);
}
/**
* Test for getDropdown
*
* @return void
*/
function testGetDropdown()
{
$name = "&test_dropdown_name";
$choices = array("value_1" => "label_1", "value&_2\"" => "label_2");
$active_choice = null;
$id = "test_&lt;dropdown&gt;_name";
$result = '<select name="' . htmlspecialchars($name) . '" id="'
. htmlspecialchars($id) . '">';
foreach ($choices as $one_choice_value => $one_choice_label) {
$result .= '<option value="' . htmlspecialchars($one_choice_value) . '"';
if ($one_choice_value == $active_choice) {
$result .= ' selected="selected"';
}
$result .= '>' . htmlspecialchars($one_choice_label) . '</option>';
}
$result .= '</select>';
$this->assertEquals(
$result,
PMA\libraries\Util::getDropdown(
$name, $choices, $active_choice, $id
)
);
}
/**
* Test for getDropdown
*
* @return void
*/
function testGetDropdownWithActive()
{
$name = "&test_dropdown_name";
$choices = array("value_1" => "label_1", "value&_2\"" => "label_2");
$active_choice = "value&_2\"";
$id = "test_&lt;dropdown&gt;_name";
$result = '<select name="' . htmlspecialchars($name) . '" id="'
. htmlspecialchars($id) . '">';
foreach ($choices as $one_choice_value => $one_choice_label) {
$result .= '<option value="' . htmlspecialchars($one_choice_value) . '"';
if ($one_choice_value == $active_choice) {
$result .= ' selected="selected"';
}
$result .= '>' . htmlspecialchars($one_choice_label) . '</option>';
}
$result .= '</select>';
$this->assertEquals(
$result,
PMA\libraries\Util::getDropdown(
$name, $choices, $active_choice, $id
)
);
}
}

View File

@ -0,0 +1,61 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::getFormattedMaximumUploadSize from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::getFormattedMaximumUploadSize from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_GetFormattedMaximumUploadSize_Test extends PHPUnit_Framework_TestCase
{
/**
* Data provider for test
*
* @return array
*/
public function dataProvider()
{
return array(
array(10, __('B'), "10"),
array(100, __('B'), "100"),
array(1024, __('B'), "1,024"),
array(102400, __('KiB'), "100"),
array(10240000, __('MiB'), "10"),
array(2147483648, __('MiB'), "2,048"),
array(21474836480, __('GiB'), "20")
);
}
/**
* Test for PMA\libraries\Util::getFormattedMaximumUploadSize
*
* @param int $size Size
* @param string $unit Unit
* @param string $res Result
*
* @return void
*
* @dataProvider dataProvider
*/
function testMaximumUploadSize($size, $unit, $res)
{
$this->assertEquals(
"(" . __('Max: ') . $res . $unit . ")",
PMA\libraries\Util::getFormattedMaximumUploadSize($size)
);
}
}

View File

@ -0,0 +1,104 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::getIcon() from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
/**
** Test for PMA\libraries\Util::getIcon() from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_GetIcon_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
function setup()
{
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
}
/**
* Test for getIcon
*
* @return void
*/
function testGetIconWithoutActionLinksMode()
{
$GLOBALS['cfg']['ActionLinksMode'] = 'text';
$this->assertEquals(
'<span class="nowrap"></span>',
PMA\libraries\Util::getIcon('b_comment.png')
);
}
/**
* Test for getIcon
*
* @return void
*/
function testGetIconWithActionLinksMode()
{
$GLOBALS['cfg']['ActionLinksMode'] = 'icons';
$this->assertEquals(
'<span class="nowrap"><img src="themes/dot.gif" title="" alt="" class="icon ic_b_comment" /></span>',
PMA\libraries\Util::getIcon('b_comment.png')
);
}
/**
* Test for getIcon
*
* @return void
*/
function testGetIconAlternate()
{
$GLOBALS['cfg']['ActionLinksMode'] = 'icons';
$alternate_text = 'alt_str';
$this->assertEquals(
'<span class="nowrap"><img src="themes/dot.gif" title="'
. $alternate_text . '" alt="' . $alternate_text
. '" class="icon ic_b_comment" /></span>',
PMA\libraries\Util::getIcon('b_comment.png', $alternate_text)
);
}
/**
* Test for getIcon
*
* @return void
*/
function testGetIconWithForceText()
{
$GLOBALS['cfg']['ActionLinksMode'] = 'icons';
$alternate_text = 'alt_str';
// Here we are checking for an icon embedded inside a span (i.e not a menu
// bar icon
$this->assertEquals(
'<span class="nowrap"><img src="themes/dot.gif" title="'
. $alternate_text . '" alt="' . $alternate_text
. '" class="icon ic_b_comment" />&nbsp;' . $alternate_text . '</span>',
PMA\libraries\Util::getIcon('b_comment.png', $alternate_text, true, false)
);
}
}

View File

@ -0,0 +1,275 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::getRadioFields from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::getRadioFields from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_GetRadioFieldsTest extends PHPUnit_Framework_TestCase
{
/**
* Test for getRadioFields
*
* @return void
*/
function testGetRadioFieldsEmpty()
{
$name = "test_display_radio";
$choices = array();
$this->assertEquals(
PMA\libraries\Util::getRadioFields($name, $choices),
""
);
}
/**
* Test for getRadioFields
*
* @return void
*/
function testGetRadioFields()
{
$name = "test_display_radio";
$choices = array('value_1'=>'choice_1', 'value_2'=>'choice_2');
$out = "";
foreach ($choices as $choice_value => $choice_label) {
$html_field_id = $name . '_' . $choice_value;
$out .= '<input type="radio" name="' . $name . '" id="' . $html_field_id
. '" value="' . htmlspecialchars($choice_value) . '"';
$out .= ' />' . "\n";
$out .= '<label for="' . $html_field_id . '">' . $choice_label
. '</label>';
$out .= '<br />';
$out .= "\n";
}
$this->assertEquals(
PMA\libraries\Util::getRadioFields($name, $choices),
$out
);
}
/**
* Test for getRadioFields
*
* @return void
*/
function testGetRadioFieldsWithChecked()
{
$name = "test_display_radio";
$choices = array('value_1'=>'choice_1', 'value_2'=>'choice_2');
$checked_choice = "value_2";
$out = "";
foreach ($choices as $choice_value => $choice_label) {
$html_field_id = $name . '_' . $choice_value;
$out .= '<input type="radio" name="' . $name . '" id="' . $html_field_id
. '" value="' . htmlspecialchars($choice_value) . '"';
if ($choice_value == $checked_choice) {
$out .= ' checked="checked"';
}
$out .= ' />' . "\n";
$out .= '<label for="' . $html_field_id . '">' . $choice_label
. '</label>';
$out .= '<br />';
$out .= "\n";
}
$this->assertEquals(
PMA\libraries\Util::getRadioFields(
$name, $choices, $checked_choice
),
$out
);
}
/**
* Test for getRadioFields
*
* @return void
*/
function testGetRadioFieldsWithCheckedWithClass()
{
$name = "test_display_radio";
$choices = array('value_1'=>'choice_1', 'value_2'=>'choice_2');
$checked_choice = "value_2";
$class = "test_class";
$out = "";
foreach ($choices as $choice_value => $choice_label) {
$html_field_id = $name . '_' . $choice_value;
$out .= '<div class="' . $class . '">';
$out .= '<input type="radio" name="' . $name . '" id="' . $html_field_id
. '" value="' . htmlspecialchars($choice_value) . '"';
if ($choice_value == $checked_choice) {
$out .= ' checked="checked"';
}
$out .= ' />' . "\n";
$out .= '<label for="' . $html_field_id . '">' . $choice_label
. '</label>';
$out .= '<br />';
$out .= '</div>';
$out .= "\n";
}
$this->assertEquals(
PMA\libraries\Util::getRadioFields(
$name, $choices, $checked_choice, true, false, $class
),
$out
);
}
/**
* Test for getRadioFields
*
* @return void
*/
function testGetRadioFieldsWithoutBR()
{
$name = "test_display_radio";
$choices = array('value_1'=>'choice_1', 'value&_&lt;2&gt;'=>'choice_2');
$checked_choice = "choice_2";
$out = "";
foreach ($choices as $choice_value => $choice_label) {
$html_field_id = $name . '_' . $choice_value;
$out .= '<input type="radio" name="' . $name . '" id="' . $html_field_id
. '" value="' . htmlspecialchars($choice_value) . '"';
if ($choice_value == $checked_choice) {
$out .= ' checked="checked"';
}
$out .= ' />' . "\n";
$out .= '<label for="' . $html_field_id . '">' . $choice_label
. '</label>';
$out .= "\n";
}
$this->assertEquals(
PMA\libraries\Util::getRadioFields(
$name, $choices, $checked_choice, false
),
$out
);
}
/**
* Test for getRadioFields
*
* @return void
*/
function testGetRadioFieldsEscapeLabelEscapeLabel()
{
$name = "test_display_radio";
$choices = array('value_1'=>'choice_1', 'value_&2'=>'choice&_&lt;2&gt;');
$checked_choice = "value_2";
$out = "";
foreach ($choices as $choice_value => $choice_label) {
$html_field_id = $name . '_' . $choice_value;
$out .= '<input type="radio" name="' . $name . '" id="' . $html_field_id
. '" value="' . htmlspecialchars($choice_value) . '"';
if ($choice_value == $checked_choice) {
$out .= ' checked="checked"';
}
$out .= ' />' . "\n";
$out .= '<label for="' . $html_field_id . '">'
. htmlspecialchars($choice_label) . '</label>';
$out .= '<br />';
$out .= "\n";
}
$this->assertEquals(
PMA\libraries\Util::getRadioFields(
$name, $choices, $checked_choice, true, true
),
$out
);
}
/**
* Test for getRadioFields
*
* @return void
*/
function testGetRadioFieldsEscapeLabelNotEscapeLabel()
{
$name = "test_display_radio";
$choices = array('value_1'=>'choice_1', 'value_&2'=>'choice&_&lt;2&gt;');
$checked_choice = "value_2";
$out = "";
foreach ($choices as $choice_value => $choice_label) {
$html_field_id = $name . '_' . $choice_value;
$out .= '<input type="radio" name="' . $name . '" id="' . $html_field_id
. '" value="' . htmlspecialchars($choice_value) . '"';
if ($choice_value == $checked_choice) {
$out .= ' checked="checked"';
}
$out .= ' />' . "\n";
$out .= '<label for="' . $html_field_id . '">' . $choice_label
. '</label>';
$out .= '<br />';
$out .= "\n";
}
$this->assertEquals(
PMA\libraries\Util::getRadioFields(
$name, $choices, $checked_choice, true, false
),
$out
);
}
/**
* Test for getRadioFields
*
* @return void
*/
function testGetRadioFieldsEscapeLabelEscapeLabelWithClass()
{
$name = "test_display_radio";
$choices = array('value_1'=>'choice_1', 'value_&2'=>'choice&_&lt;2&gt;');
$checked_choice = "value_2";
$class = "test_class";
$out = "";
foreach ($choices as $choice_value => $choice_label) {
$html_field_id = $name . '_' . $choice_value;
$out .= '<div class="' . $class . '">';
$out .= '<input type="radio" name="' . $name . '" id="' . $html_field_id
. '" value="' . htmlspecialchars($choice_value) . '"';
if ($choice_value == $checked_choice) {
$out .= ' checked="checked"';
}
$out .= ' />' . "\n";
$out .= '<label for="' . $html_field_id . '">'
. htmlspecialchars($choice_label) . '</label>';
$out .= '<br />';
$out .= '</div>';
$out .= "\n";
}
$this->assertEquals(
PMA\libraries\Util::getRadioFields(
$name, $choices, $checked_choice, true, true, $class
),
$out
);
}
}

View File

@ -0,0 +1,60 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::getTitleForTarget from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::getTitleForTarget from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_GetTitleForTarget_Test extends PHPUnit_Framework_TestCase
{
/**
* Data provider for testGetTitleForTarget
*
* @return array
*/
function dataProvider()
{
return array(
array('tbl_structure.php', __('Structure')),
array('tbl_sql.php', __('SQL'),),
array('tbl_select.php', __('Search'),),
array('tbl_change.php', __('Insert')),
array('sql.php', __('Browse')),
array('db_structure.php', __('Structure')),
array('db_sql.php', __('SQL')),
array('db_search.php', __('Search')),
array('db_operations.php', __('Operations')),
);
}
/**
* Test for
*
* @param string $target Target
* @param array $result Expected value
*
* @return void
*
* @dataProvider dataProvider
*/
function testGetTitleForTarget($target, $result)
{
$this->assertEquals(
$result, PMA\libraries\Util::getTitleForTarget($target)
);
}
}

View File

@ -0,0 +1,126 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for generating localised date or timespan expression
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
* Test for generating localised date or timespan expression
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_LocalisedDateTimespan_Test extends PHPUnit_Framework_TestCase
{
/**
* temporary variable for globals array
*/
protected $tmpGlobals;
/**
* temporary variable for session array
*/
protected $tmpSession;
/**
* temporary variable for timezone info
*/
protected $tmpTimezone;
/**
* storing globals and session
*
* @return void
*/
public function setUp()
{
$this->tmpGlobals = $GLOBALS;
$this->tmpSession = $_SESSION;
$this->tmpTimezone = date_default_timezone_get();
date_default_timezone_set('Europe/London');
}
/**
* recovering globals and session
*
* @return void
*/
public function tearDown()
{
$GLOBALS = $this->tmpGlobals;
$_SESSION = $this->tmpSession;
date_default_timezone_set($this->tmpTimezone);
}
/**
* data provider for localised date test
*
* @return array
*/
public function localisedDateDataProvider()
{
return array(
array(1227455558, '', 'Nov 23, 2008 at 03:52 PM'),
array(1227455558, '%Y-%m-%d %H:%M:%S %a', '2008-11-23 15:52:38 Sun')
);
}
/**
* localised date test, globals are defined
*
* @param string $a Current timestamp
* @param string $b Format
* @param string $e Expected output
*
* @return void
*
* @dataProvider localisedDateDataProvider
*/
public function testLocalisedDate($a, $b, $e)
{
$this->assertEquals(
$e, PMA\libraries\Util::localisedDate($a, $b)
);
}
/**
* data provider for localised timestamp test
*
* @return array
*/
public function timespanFormatDataProvider()
{
return array(
array(1258, '0 days, 0 hours, 20 minutes and 58 seconds'),
array(821958, '9 days, 12 hours, 19 minutes and 18 seconds')
);
}
/**
* localised timestamp test, globals are defined
*
* @param int $a Timespan in seconds
* @param string $e Expected output
*
* @return void
*
* @dataProvider timespanFormatDataProvider
*/
public function testTimespanFormat($a, $e)
{
$GLOBALS['timespanfmt'] = '%s days, %s hours, %s minutes and %s seconds';
$this->assertEquals(
$e, PMA\libraries\Util::timespanFormat($a)
);
}
}

View File

@ -0,0 +1,133 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for PMA\libraries\Util::pow() function from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
* Tests for PMA\libraries\Util::pow() function from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_Pow_Test extends PHPUnit_Framework_TestCase
{
/**
* Test forpow
*
* @return void
*/
public function testIntOverflow()
{
$this->assertEquals(
'1267650600228229401496703205376',
PMA\libraries\Util::pow(2, 100)
);
}
/**
* Test forpow
*
* @return void
*/
public function testBcpow()
{
if (function_exists('bcpow')) {
$this->assertEquals(
'1267650600228229401496703205376',
PMA\libraries\Util::pow(2, 100, 'bcpow')
);
} else {
$this->markTestSkipped('function bcpow() does not exist');
}
}
/**
* Test forpow
*
* @return void
*/
public function testGmppow()
{
if (function_exists('gmp_pow')) {
$this->assertEquals(
'1267650600228229401496703205376',
PMA\libraries\Util::pow(2, 100, 'gmp_pow')
);
} else {
$this->markTestSkipped('function gmp_pow() does not exist');
}
}
/**
* Test forpow
*
* @return void
*/
public function testNegativeExp()
{
$this->assertEquals(
0.25,
PMA\libraries\Util::pow(2, -2)
);
}
/**
* Test forpow
*
* @return void
*/
public function testNegativeExpPow()
{
if (function_exists('pow')) {
$this->assertEquals(
0.25,
PMA\libraries\Util::pow(2, -2, 'pow')
);
} else {
$this->markTestSkipped('function pow() does not exist');
}
}
/**
* Test forpow
*
* @return void
*/
public function testNegativeExpBcpow()
{
if (function_exists('bcpow')) {
$this->assertEquals(
false,
PMA\libraries\Util::pow(2, -2, 'bcpow')
);
} else {
$this->markTestSkipped('function bcpow() does not exist');
}
}
/**
* Test forpow
*
* @return void
*/
public function testNegativeExpGmppow()
{
if (function_exists('gmp_pow')) {
$this->assertEquals(
false,
PMA\libraries\Util::pow(2, -2, 'gmp_pow')
);
} else {
$this->markTestSkipped('function gmp_pow() does not exist');
}
}
}

View File

@ -0,0 +1,58 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test PMA\libraries\Util::printableBitValue function
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
* Test PMA\libraries\Util::printableBitValue function
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_PrintableBitValueTest extends PHPUnit_Framework_TestCase
{
/**
* data provider for printable bit value test
*
* @return array
*/
public function printableBitValueDataProvider()
{
return array(
array(
'20131009',
64,
'0000000000000000000000000000000000000001001100110010110011000001'
),
array('5', 32, '00000000000000000000000000000101')
);
}
/**
* test for generating string contains printable bit value of selected data
*
* @param integer $a Value
* @param int $b Length
* @param string $e Expected output
*
* @return void
*
* @dataProvider printableBitValueDataProvider
*/
public function testPrintableBitValue($a, $b, $e)
{
$this->assertEquals(
$e, PMA\libraries\Util::printableBitValue($a, $b)
);
}
}

View File

@ -0,0 +1,186 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for quoting, slashing/backslashing
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
* Test for quoting, slashing/backslashing
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_QuotingSlashing_Test extends PHPUnit_Framework_TestCase
{
/**
* data provider for PMA\libraries\Util::unQuote test
*
* @return array
*/
public function unQuoteProvider()
{
return array(
array('"test\'"', "test'"),
array("'test''", "test'"),
array("`test'`", "test'"),
array("'test'test", "'test'test")
);
}
/**
* PMA\libraries\Util::unQuote test
*
* @param string $param String
* @param string $expected Expected output
*
* @return void
*
* @dataProvider unQuoteProvider
*/
public function testUnQuote($param, $expected)
{
$this->assertEquals(
$expected, PMA\libraries\Util::unQuote($param)
);
}
/**
* data provider for PMA\libraries\Util::unQuote test with chosen quote
*
* @return array
*/
public function unQuoteSelectedProvider()
{
return array(
array('"test\'"', "test'"),
array("'test''", "'test''"),
array("`test'`", "`test'`"),
array("'test'test", "'test'test")
);
}
/**
* PMA\libraries\Util::unQuote test with chosen quote
*
* @param string $param String
* @param string $expected Expected output
*
* @return void
*
* @dataProvider unQuoteSelectedProvider
*/
public function testUnQuoteSelectedChar($param, $expected)
{
$this->assertEquals(
$expected, PMA\libraries\Util::unQuote($param, '"')
);
}
/**
* data provider for backquote test
*
* @return array
*/
public function backquoteDataProvider()
{
return array(
array('0', '`0`'),
array('test', '`test`'),
array('te`st', '`te``st`'),
array(
array('test', 'te`st', '', '*'),
array('`test`', '`te``st`', '', '*')
)
);
}
/**
* backquote test with different param $do_it (true, false)
*
* @param string $a String
* @param string $b Expected output
*
* @return void
*
* @dataProvider backquoteDataProvider
*/
public function testBackquote($a, $b)
{
// Test bypass quoting (used by dump functions)
$this->assertEquals($a, PMA\libraries\Util::backquote($a, false));
// Test backquote
$this->assertEquals($b, PMA\libraries\Util::backquote($a));
}
/**
* data provider for backquoteCompat test
*
* @return array
*/
public function backquoteCompatDataProvider()
{
return array(
array('0', '"0"'),
array('test', '"test"'),
array('te`st', '"te`st"'),
array(
array('test', 'te`st', '', '*'),
array('"test"', '"te`st"', '', '*')
)
);
}
/**
* backquoteCompat test with different param $compatibility (NONE, MSSQL)
*
* @param string $a String
* @param string $b Expected output
*
* @return void
*
* @dataProvider backquoteCompatDataProvider
*/
public function testbackquoteCompat($a, $b)
{
// Test bypass quoting (used by dump functions)
$this->assertEquals($a, PMA\libraries\Util::backquoteCompat($a, 'NONE', false));
// Run tests in MSSQL compatibility mode
// Test bypass quoting (used by dump functions)
$this->assertEquals($a, PMA\libraries\Util::backquoteCompat($a, 'MSSQL', false));
// Test backquote
$this->assertEquals($b, PMA\libraries\Util::backquoteCompat($a, 'MSSQL'));
}
/**
* backquoteCompat test with forbidden words
*
* @return void
*/
public function testBackquoteForbidenWords()
{
foreach (SqlParser\Context::$KEYWORDS as $keyword => $type) {
if ($type & SqlParser\Token::FLAG_KEYWORD_RESERVED) {
$this->assertEquals(
"`" . $keyword . "`",
PMA\libraries\Util::backquote($keyword, false)
);
} else {
$this->assertEquals(
$keyword,
PMA\libraries\Util::backquote($keyword, false)
);
}
}
}
}

View File

@ -0,0 +1,51 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::showDocu from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
/**
** Test for PMA\libraries\Util::showDocu from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_ShowDocu_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
function setup()
{
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$GLOBALS['server'] = '99';
$GLOBALS['cfg']['ServerDefault'] = 1;
}
/**
* Test for showDocu
*
* @return void
*/
function testShowDocu()
{
$this->assertEquals(
'<a href="./url.php?url=https%3A%2F%2Fdocs.phpmyadmin.net%2Fen%2Flatest%2Fpage.html%23anchor" target="documentation"><img src="themes/dot.gif" title="Documentation" alt="Documentation" class="icon ic_b_help" /></a>',
PMA\libraries\Util::showDocu('page', 'anchor')
);
}
}

View File

@ -0,0 +1,80 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::getMessage from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
const PMA_IS_WINDOWS = false;
/*
* Include to test.
*/
require_once 'libraries/js_escape.lib.php';
/**
** Test for PMA\libraries\Util::getMessage from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_ShowMessage_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
function setUp()
{
global $cfg;
if (! defined('VERSION_CHECK_DEFAULT')) {
define('VERSION_CHECK_DEFAULT', 1);
}
include 'libraries/config.default.php';
}
/**
* Test for getMessage
*
* @return void
*/
function testShowMessageNotAjax()
{
global $cfg;
$GLOBALS['is_ajax_request'] = true;
$cfg['Server']['DisableIS'] = false;
$GLOBALS['table'] = 'tbl';
$GLOBALS['db'] = 'db';
$GLOBALS['sql_query'] = "SELECT * FROM tblPatient ";
$this->expectOutputString(
"<div class=\"result_query\" align=\"\">
<div class=\"notice\">msg</div><code class=\"sql\"><span class=\"syntax\"><span class=\"inner_sql\"><a href=\"./url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.0%2Fen%2Fselect.html&amp;server=server&amp;lang=en&amp;token=647a62ad301bf9025e3b13bc7caa02cb\" target=\"mysql_doc\"><span class=\"syntax_alpha syntax_alpha_reservedWord\">SELECT</span></a> <span class=\"syntax_punct\">*</span> <br /><span class=\"syntax_alpha syntax_alpha_reservedWord\">FROM</span> <span class=\"syntax_alpha syntax_alpha_identifier\">tblPatient</span></span></span></code><div class=\"tools\"><form action=\"sql.php\" method=\"post\"><input type=\"hidden\" name=\"db\" value=\"db\" /><input type=\"hidden\" name=\"table\" value=\"tbl\" /><input type=\"hidden\" name=\"server\" value=\"server\" /><input type=\"hidden\" name=\"lang\" value=\"en\" /><input type=\"hidden\" name=\"token\" value=\"647a62ad301bf9025e3b13bc7caa02cb\" /><input type=\"hidden\" name=\"sql_query\" value=\"SELECT * FROM tblPatient \" /></form><script type=\"text/javascript\">
//<![CDATA[
$('.tools form').last().after('[<a href=\"#\" title=\"Inline edit of this query\" class=\"inline_edit_sql\">Inline</a>]');
//]]>
</script> [
<a href=\"tbl_sql.php?db=db&amp;table=tbl&amp;sql_query=SELECT+%2A+FROM+tblPatient+&amp;show_query=1&amp;server=server&amp;lang=en&amp;token=647a62ad301bf9025e3b13bc7caa02cb#querybox\" >Edit</a>
] [
<a href=\"import.php?db=db&amp;table=tbl&amp;sql_query=EXPLAIN+SELECT+%2A+FROM+tblPatient+&amp;server=server&amp;lang=en&amp;token=647a62ad301bf9025e3b13bc7caa02cb\" >Explain SQL</a>
] [
<a href=\"import.php?db=db&amp;table=tbl&amp;sql_query=SELECT+%2A+FROM+tblPatient+&amp;show_query=1&amp;show_as_php=1&amp;server=server&amp;lang=en&amp;token=647a62ad301bf9025e3b13bc7caa02cb\" >Create PHP code</a>
] [
<a href=\"import.php?db=db&amp;table=tbl&amp;sql_query=SELECT+%2A+FROM+tblPatient+&amp;show_query=1&amp;server=server&amp;lang=en&amp;token=647a62ad301bf9025e3b13bc7caa02cb\" >Refresh</a>
]</div></div>"
);
echo PMA\libraries\Util::getMessage("msg");
//$this->assertEquals("", PMA\libraries\Util::getMessage("msg"));
$this->assertTrue(true);
}
}

View File

@ -0,0 +1,56 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::showPHPDocu from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
/**
** Test for PMA\libraries\Util::showPHPDocu from Util.php
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_ShowPHPDocu_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
function setup()
{
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$GLOBALS['server'] = 99;
$GLOBALS['cfg']['ServerDefault'] = 0;
}
/**
* Test for showPHPDocu
*
* @return void
*/
function testShowPHPDocu()
{
$target = "docu";
$lang = _pgettext('PHP documentation language', 'en');
$expected = '<a href="./url.php?url=https%3A%2F%2Fphp.net%2Fmanual%2F' . $lang
. '%2F' . $target . '" target="documentation">'
. '<img src="themes/dot.gif" title="' . __('Documentation') . '" alt="'
. __('Documentation') . '" class="icon ic_b_help" /></a>';
$this->assertEquals(
$expected, PMA\libraries\Util::showPHPDocu($target)
);
}
}

View File

@ -0,0 +1,171 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for several string operations
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
* Test for several string operations
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_StringOperations_Test extends PHPUnit_Framework_TestCase
{
/**
* temporary variable for globals array
*/
protected $tmpGlobals;
/**
* temporary variable for session array
*/
protected $tmpSession;
/**
* storing globals and session
*
* @return void
*/
public function setUp()
{
global $GLOBALS, $_SESSION;
$this->tmpGlobals = $GLOBALS;
$this->tmpSession = $_SESSION;
}
/**
* data provider for PMA\libraries\Util::flipstring test
*
* @return array
*/
public function flipStringDataProvider()
{
return array(
array('test', "t<br />\ne<br />\ns<br />\nt"),
array(
'te&nbsp;;st',
"t<br />\ne<br />\n&nbsp;<br />\n;<br />\ns<br />\nt"
)
);
}
/**
* test of changing string from horizontal to vertical orientation
*
* @param string $a String
* @param string $e Expected output
*
* @return void
*
* @dataProvider flipStringDataProvider
*/
public function testFlipString($a, $e)
{
$this->assertEquals($e, PMA\libraries\Util::flipstring($a));
}
/**
* data provider for PMA\libraries\Util::userDir test
*
* @return array
*/
public function userDirDataProvider()
{
return array(
array('/var/pma_tmp/%u/', "/var/pma_tmp/root/"),
array('/home/%u/pma', "/home/root/pma/")
);
}
/**
* test of generating user dir, globals are defined
*
* @param string $a String
* @param string $e Expected output
*
* @return void
*
* @dataProvider userDirDataProvider
*/
public function testUserDirString($a, $e)
{
$GLOBALS['cfg']['Server']['user'] = 'root';
$this->assertEquals($e, PMA\libraries\Util::userDir($a));
}
/**
* data provider for replace binary content test
*
* @return array
*/
public function replaceBinaryContentsDataProvider()
{
return array(
array("\x000", '\00'),
array("\x08\x0a\x0d\x1atest", '\b\n\r\Ztest'),
array("\ntest", '\ntest')
);
}
/**
* replace binary contents test
*
* @param string $a String
* @param string $e Expected output
*
* @return void
*
* @dataProvider replaceBinaryContentsDataProvider
*/
public function testReplaceBinaryContents($a, $e)
{
$this->assertEquals(
$e, PMA\libraries\Util::replaceBinaryContents($a)
);
}
/**
* data provider for duplicate first newline test
*
* @return array
*/
public function duplicateFirstNewlineDataProvider()
{
return array(
array('test', 'test'),
array("\r\ntest", "\n\r\ntest"),
array("\ntest", "\ntest"),
array("\n\r\ntest", "\n\r\ntest")
);
}
/**
* duplicate first newline test
*
* @param string $a String
* @param string $e Expected output
*
* @return void
*
* @dataProvider duplicateFirstNewlineDataProvider
*/
public function testDuplicateFirstNewline($a, $e)
{
$this->assertEquals(
$e, PMA\libraries\Util::duplicateFirstNewline($a)
);
}
}

View File

@ -0,0 +1,35 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
** Test for PMA\libraries\Util::unsupportedDatatypes from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
** Test for PMA\libraries\Util::unsupportedDatatypes from common.lib
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_UnsupportedDatatypes_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for unsupportedDatatypes
*
* @return void
*/
function testNotSupportedDataTypes()
{
$no_support_types = array();
$this->assertEquals(
$no_support_types, PMA\libraries\Util::unsupportedDatatypes()
);
}
}

View File

@ -0,0 +1,87 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test PMA\libraries\Util::whichCrlf function
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
/*
* Include to test.
*/
/**
* Test PMA\libraries\Util::whichCrlf function
*
* @package PhpMyAdmin-test
* @group common.lib-tests
*/
class PMA_WhichCrlf_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for whichCrlf
*
* @return void
*
* @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()
{
if (PMA_HAS_RUNKIT && defined('PMA_USR_OS')) {
$pma_usr_os = PMA_USR_OS;
}
if (defined('PMA_USR_OS') && !PMA_HAS_RUNKIT) {
if (PMA_USR_OS == 'Win') {
$this->assertEquals(
"\r\n", PMA\libraries\Util::whichCrlf()
);
} else {
$this->assertEquals(
"\n", PMA\libraries\Util::whichCrlf()
);
}
$this->markTestIncomplete('Cannot redefine constant');
} else {
if (PMA_HAS_RUNKIT) {
if (!defined('PMA_USR_OS')) {
define('PMA_USR_OS', 'Linux');
} else {
runkit_constant_redefine('PMA_USR_OS', 'Linux');
}
$this->assertEquals(
"\n", PMA\libraries\Util::whichCrlf()
);
}
if (PMA_HAS_RUNKIT) {
runkit_constant_redefine('PMA_USR_OS', 'Win');
} else {
define('PMA_USR_OS', 'Win');
}
$this->assertEquals(
"\r\n", PMA\libraries\Util::whichCrlf()
);
}
if (PMA_HAS_RUNKIT) {
if (isset($pma_usr_os)) {
runkit_constant_redefine('PMA_USR_OS', 'Win');
} else {
runkit_constant_remove('PMA_USR_OS');
}
}
}
}

View File

@ -0,0 +1,76 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Tests for libraries/config/messages.inc.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
/**
* Tests for libraries/config/messages.inc.php
*
* @package PhpMyAdmin-test
*/
class PMA_MessagesIncTest extends PHPUnit_Framework_TestCase
{
/**
* Setup for test cases
*
* @return void
*/
public function setup()
{
}
/**
* Tests messages variables
*
* @return void
* @group medium
*/
function testMessages()
{
$strConfigAllowArbitraryServer_name = '';
$strConfigAllowThirdPartyFraming_name = '';
$strConfigblowfish_secret_name = '';
$strConfigExport_htmlword_structure_or_data_name = '';
$strConfigForm_TableStructure = '';
$strConfigSQLQuery_Explain_name = '';
$strConfigSendErrorReports_name = '';
include 'libraries/config/messages.inc.php';
$this->assertEquals(
'Allow login to any MySQL server',
$strConfigAllowArbitraryServer_name
);
$this->assertEquals(
'Allow third party framing',
$strConfigAllowThirdPartyFraming_name
);
$this->assertEquals(
'Blowfish secret',
$strConfigblowfish_secret_name
);
$this->assertEquals(
'Dump table',
$strConfigExport_htmlword_structure_or_data_name
);
$this->assertEquals(
'Table structure',
$strConfigForm_TableStructure
);
$this->assertEquals(
'Explain SQL',
$strConfigSQLQuery_Explain_name
);
$this->assertEquals(
'Send error reports',
$strConfigSendErrorReports_name
);
}
}

View File

@ -0,0 +1,223 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA_arrayRead(), PMA_arrayWrite(), PMA_arrayRemove()
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
/**
* Test for PMA_arrayRead(), PMA_arrayWrite(), PMA_arrayRemove()
*
* @package PhpMyAdmin-test
*/
class PMA_Array_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_arrayRead
*
* @return void
*/
function testRead()
{
$arr = array(
"int" => 1,
"str" => "str_val",
"arr" => array('val1', 'val2', 'val3'),
"sarr" => array(
'arr1' => array(1, 2, 3),
array(3, array('a', 'b', 'c'), 4)
)
);
$this->assertEquals(
PMA_arrayRead('int', $arr),
$arr['int']
);
$this->assertEquals(
PMA_arrayRead('str', $arr),
$arr['str']
);
$this->assertEquals(
PMA_arrayRead('arr/0', $arr),
$arr['arr'][0]
);
$this->assertEquals(
PMA_arrayRead('arr/1', $arr),
$arr['arr'][1]
);
$this->assertEquals(
PMA_arrayRead('arr/2', $arr),
$arr['arr'][2]
);
$this->assertEquals(
PMA_arrayRead('sarr/arr1/0', $arr),
$arr['sarr']['arr1'][0]
);
$this->assertEquals(
PMA_arrayRead('sarr/arr1/1', $arr),
$arr['sarr']['arr1'][1]
);
$this->assertEquals(
PMA_arrayRead('sarr/arr1/2', $arr),
$arr['sarr']['arr1'][2]
);
$this->assertEquals(
PMA_arrayRead('sarr/0/0', $arr),
$arr['sarr'][0][0]
);
$this->assertEquals(
PMA_arrayRead('sarr/0/1', $arr),
$arr['sarr'][0][1]
);
$this->assertEquals(
PMA_arrayRead('sarr/0/1/2', $arr),
$arr['sarr'][0][1][2]
);
$this->assertEquals(
PMA_arrayRead('sarr/not_exiting/1', $arr),
null
);
$this->assertEquals(
PMA_arrayRead('sarr/not_exiting/1', $arr, 0),
0
);
$this->assertEquals(
PMA_arrayRead('sarr/not_exiting/1', $arr, 'default_val'),
'default_val'
);
}
/**
* Test for PMA_arrayWrite
*
* @return void
*/
function testWrite()
{
$arr = array(
"int" => 1,
"str" => "str_val",
"arr" => array('val1', 'val2', 'val3'),
"sarr" => array(
'arr1' => array(1, 2, 3),
array(3, array('a', 'b', 'c'), 4)
)
);
PMA_arrayWrite('int', $arr, 5);
$this->assertEquals($arr['int'], 5);
PMA_arrayWrite('str', $arr, '_str');
$this->assertEquals($arr['str'], '_str');
PMA_arrayWrite('arr/0', $arr, 'val_arr_0');
$this->assertEquals($arr['arr'][0], 'val_arr_0');
PMA_arrayWrite('arr/1', $arr, 'val_arr_1');
$this->assertEquals($arr['arr'][1], 'val_arr_1');
PMA_arrayWrite('arr/2', $arr, 'val_arr_2');
$this->assertEquals($arr['arr'][2], 'val_arr_2');
PMA_arrayWrite('sarr/arr1/0', $arr, 'val_sarr_arr_0');
$this->assertEquals($arr['sarr']['arr1'][0], 'val_sarr_arr_0');
PMA_arrayWrite('sarr/arr1/1', $arr, 'val_sarr_arr_1');
$this->assertEquals($arr['sarr']['arr1'][1], 'val_sarr_arr_1');
PMA_arrayWrite('sarr/arr1/2', $arr, 'val_sarr_arr_2');
$this->assertEquals($arr['sarr']['arr1'][2], 'val_sarr_arr_2');
PMA_arrayWrite('sarr/0/0', $arr, 5);
$this->assertEquals($arr['sarr'][0][0], 5);
PMA_arrayWrite('sarr/0/1/0', $arr, 'e');
$this->assertEquals($arr['sarr'][0][1][0], 'e');
PMA_arrayWrite('sarr/not_existing/1', $arr, 'some_val');
$this->assertEquals($arr['sarr']['not_existing'][1], 'some_val');
PMA_arrayWrite('sarr/0/2', $arr, null);
$this->assertNull($arr['sarr'][0][2]);
}
/**
* Test for PMA_arrayRemove
*
* @return void
*/
function testRemove()
{
$arr = array(
"int" => 1,
"str" => "str_val",
"arr" => array('val1', 'val2', 'val3'),
"sarr" => array(
'arr1' => array(1, 2, 3),
array(3, array('a', 'b', 'c'), 4)
)
);
PMA_arrayRemove('int', $arr);
$this->assertArrayNotHasKey('int', $arr);
PMA_arrayRemove('str', $arr);
$this->assertArrayNotHasKey('str', $arr);
PMA_arrayRemove('arr/0', $arr);
$this->assertArrayNotHasKey(0, $arr['arr']);
PMA_arrayRemove('arr/1', $arr);
$this->assertArrayNotHasKey(1, $arr['arr']);
PMA_arrayRemove('arr/2', $arr);
$this->assertArrayNotHasKey('arr', $arr);
$tmp_arr = $arr;
PMA_arrayRemove('sarr/not_existing/1', $arr);
$this->assertEquals($tmp_arr, $arr);
PMA_arrayRemove('sarr/arr1/0', $arr);
$this->assertArrayNotHasKey(0, $arr['sarr']['arr1']);
PMA_arrayRemove('sarr/arr1/1', $arr);
$this->assertArrayNotHasKey(1, $arr['sarr']['arr1']);
PMA_arrayRemove('sarr/arr1/2', $arr);
$this->assertArrayNotHasKey('arr1', $arr['sarr']);
PMA_arrayRemove('sarr/0/0', $arr);
$this->assertArrayNotHasKey(0, $arr['sarr'][0]);
PMA_arrayRemove('sarr/0/1/0', $arr);
$this->assertArrayNotHasKey(0, $arr['sarr'][0][1]);
PMA_arrayRemove('sarr/0/1/1', $arr);
$this->assertArrayNotHasKey(1, $arr['sarr'][0][1]);
PMA_arrayRemove('sarr/0/1/2', $arr);
$this->assertArrayNotHasKey(1, $arr['sarr'][0]);
PMA_arrayRemove('sarr/0/2', $arr);
$this->assertEmpty($arr);
}
}

View File

@ -0,0 +1,68 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
/**
*
* @package PhpMyAdmin-test
*/
class PMA_CheckPageValidity_Test extends PHPUnit_Framework_TestCase
{
protected $goto_whitelist = array(
'db_datadict.php',
'db_sql.php',
'db_export.php',
'db_search.php',
'export.php',
'import.php',
'index.php',
'pdf_pages.php',
'pdf_schema.php',
'server_binlog.php',
'server_variables.php',
'sql.php',
'tbl_select.php',
'transformation_overview.php',
'transformation_wrapper.php',
'user_password.php',
);
/**
* Test for PMA_checkPageValidity
*
* @param string $page Page
* @param array|null $whiteList White list
* @param int $expected Expected value
*
* @return void
*
* @dataProvider provider
*/
function testGotoNowhere($page, $whiteList, $expected)
{
$this->assertTrue($expected === PMA_checkPageValidity($page, $whiteList));
}
/**
* Data provider for testGotoNowhere
*
* @return array
*/
public function provider()
{
return array(
array(null, null, false),
array('export.php', $this->goto_whitelist, true),
array('shell.php', $this->goto_whitelist, false),
array('index.php?sql.php&test=true', $this->goto_whitelist, true),
array('index.php%3Fsql.php%26test%3Dtrue', $this->goto_whitelist, true),
);
}
}

View File

@ -0,0 +1,84 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* PMA_fatalError() displays the given error message on phpMyAdmin error page in
* foreign language
* and ends script execution and closes session
*
* @package PhpMyAdmin-test
*/
/**
*
* PMA_fatalError() displays the given error message on phpMyAdmin error page in
* foreign language
* and ends script execution and closes session
*
* @package PhpMyAdmin-test
*/
class PMA_CleanupPathInfo_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_cleanupPathInfo
*
* @param string $php_self The PHP_SELF value
* @param string $request The REQUEST_URI value
* @param string $path_info The PATH_INFO value
* @param string $expected Expected result
*
* @return void
*
* @dataProvider pathsProvider
*/
public function testPahtInfo($php_self, $request, $path_info, $expected)
{
$_SERVER['PHP_SELF'] = $php_self;
$_SERVER['REQUEST_URI'] = $request;
$_SERVER['PATH_INFO'] = $path_info;
PMA_cleanupPathInfo();
$this->assertEquals(
$expected,
$GLOBALS['PMA_PHP_SELF']
);
}
/**
* Data provider for PMA_cleanupPathInfo tests
*
* @return array
*/
public function pathsProvider()
{
return array(
array(
'/phpmyadmin/index.php/; cookieinj=value/',
'/phpmyadmin/index.php/;%20cookieinj=value///',
'/; cookieinj=value/',
'/phpmyadmin/index.php'
),
array(
'',
'/phpmyadmin/index.php/;%20cookieinj=value///',
'/; cookieinj=value/',
'/phpmyadmin/index.php'
),
array(
'/phpmyadmin/index.php',
'/phpmyadmin/index.php',
'',
'/phpmyadmin/index.php'
),
array(
'',
'/phpmyadmin/index.php',
'',
'/phpmyadmin/index.php'
),
);
}
}

View File

@ -0,0 +1,88 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* PMA_fatalError() displays the given error message on phpMyAdmin error page in
* foreign language
* and ends script execution and closes session
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/js_escape.lib.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/url_generating.lib.php';
/**
*
* PMA_fatalError() displays the given error message on phpMyAdmin error page in
* foreign language
* and ends script execution and closes session
*
* @package PhpMyAdmin-test
*/
class PMA_FatalError_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
public function setup()
{
$GLOBALS['PMA_Config'] = new PMA\libraries\Config();
$GLOBALS['PMA_Config']->enableBc();
$GLOBALS['cfg']['Server'] = array(
'host' => 'host',
'verbose' => 'verbose',
);
$GLOBALS['cfg']['OBGzip'] = false;
$_SESSION['PMA_Theme'] = new Theme();
$GLOBALS['pmaThemeImage'] = 'theme/';
$GLOBALS['pmaThemePath'] = $_SESSION['PMA_Theme']->getPath();
$GLOBALS['server'] = 1;
$GLOBALS['db'] = '';
$GLOBALS['table'] = '';
}
/**
* Test for PMA_fatalError
*
* @return void
*/
public function testFatalErrorMessage()
{
$this->expectOutputRegex("/FatalError!/");
PMA_fatalError("FatalError!");
}
/**
* Test for PMA_fatalError
*
* @return void
*/
public function testFatalErrorMessageWithArgs()
{
$message = "Fatal error #%d in file %s.";
$params = array(1, 'error_file.php');
$this->expectOutputRegex("/Fatal error #1 in file error_file.php./");
PMA_fatalError($message, $params);
$message = "Fatal error in file %s.";
$params = 'error_file.php';
$this->expectOutputRegex("/Fatal error in file error_file.php./");
PMA_fatalError($message, $params);
}
}

View File

@ -0,0 +1,76 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/url_generating.lib.php';
/**
*
* @package PhpMyAdmin-test
*/
class PMA_GetLinks_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
function setUp()
{
$GLOBALS['server'] = 99;
$GLOBALS['cfg']['ServerDefault'] = 0;
}
/**
* Test for PMA_getPHPDocLink
*
* @return void
*/
public function testGetPHPDocLink()
{
$lang = _pgettext('PHP documentation language', 'en');
$this->assertEquals(
PMA_getPHPDocLink('function'),
'./url.php?url=https%3A%2F%2Fphp.net%2Fmanual%2F'
. $lang . '%2Ffunction'
);
}
/**
* Data provider for testLinkURL
*
* @return array
*/
public function providerLinkURL()
{
return array(
array('https://wiki.phpmyadmin.net',
'./url.php?url=https%3A%2F%2Fwiki.phpmyadmin.net'),
array('https://wiki.phpmyadmin.net',
'./url.php?url=https%3A%2F%2Fwiki.phpmyadmin.net'),
array('wiki.phpmyadmin.net', 'wiki.phpmyadmin.net'),
array('index.php?db=phpmyadmin', 'index.php?db=phpmyadmin')
);
}
/**
* Test for PMA_linkURL
*
* @param string $link URL where to go
* @param string $url Expected value
*
* @return void
*
* @dataProvider providerLinkURL
*/
public function testLinkURL($link, $url)
{
$this->assertEquals(PMA_linkURL($link), $url);
}
}

View File

@ -0,0 +1,65 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* PMA_getTableCount_test returns count of tables in given db
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/js_escape.lib.php';
require_once 'libraries/select_lang.inc.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/config.default.php';
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'config.sample.inc.php';
/**
* PMA_getTableCount_test returns count of tables in given db
*
* @package PhpMyAdmin-test
*/
class PMA_GetTableCount_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
public function setUp()
{
$GLOBALS['PMA_Config'] = new PMA\libraries\Config();
$GLOBALS['PMA_Config']->enableBc();
$GLOBALS['cfg']['OBGzip'] = false;
$_SESSION['PMA_Theme'] = new Theme();
$GLOBALS['pmaThemeImage'] = 'theme/';
$GLOBALS['pmaThemePath'] = $_SESSION['PMA_Theme']->getPath();
$GLOBALS['server'] = 1;
$GLOBALS['db'] = '';
$GLOBALS['table'] = '';
}
/**
* Test for PMA_getTableCount
*
* @return void
*/
function testTableCount()
{
$GLOBALS['cfg']['Server']['host'] = 'localhost';
$GLOBALS['cfg']['Server']['user'] = 'root';
$this->assertEquals(5, PMA_getTableCount('meddb'));
}
}

View File

@ -0,0 +1,50 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
/**
*
* @package PhpMyAdmin-test
*/
class PMA_GetRealSize_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for
*
* @param string $size Size
* @param int $expected Expected value
*
* @return void
*
* @dataProvider provider
*/
public function testNull($size, $expected)
{
$this->assertEquals($expected, PMA_getRealSize($size));
}
/**
* Data provider for testExtractValueFromFormattedSize
*
* @return array
*/
public function provider()
{
return array(
array('0', 0),
array('1kb', 1024),
array('1024k', 1024 * 1024),
array('8m', 8 * 1024 * 1024),
array('12gb', 12 * 1024 * 1024 * 1024),
array('1024', 1024),
);
}
}

View File

@ -0,0 +1,224 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA_sendHeaderLocation
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/js_escape.lib.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/url_generating.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.
*
* <code>
* rename_function(
* 'headers_sent',
* 'headers_sent'.str_replace(array('.', ' '),array('', ''),microtime())
* );
* </code>
*
* @package PhpMyAdmin-test
*/
class PMA_HeaderLocation_Test extends PHPUnit_Framework_TestCase
{
protected $oldIISvalue;
protected $runkitExt;
protected $apdExt;
/**
* Set up
*
* @return void
*/
public function setUp()
{
//session_start();
// cleaning constants
if (PMA_HAS_RUNKIT) {
$this->oldIISvalue = 'non-defined';
$defined_constants = get_defined_constants(true);
$user_defined_constants = $defined_constants['user'];
if (array_key_exists('PMA_IS_IIS', $user_defined_constants)) {
$this->oldIISvalue = PMA_IS_IIS;
runkit_constant_redefine('PMA_IS_IIS', null);
} else {
runkit_constant_add('PMA_IS_IIS', null);
}
}
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$GLOBALS['server'] = 0;
$GLOBALS['PMA_Config'] = new PMA\libraries\Config();
$GLOBALS['PMA_Config']->enableBc();
}
/**
* Tear down
*
* @return void
*/
public function tearDown()
{
//session_destroy();
// cleaning constants
if (PMA_HAS_RUNKIT) {
if ($this->oldIISvalue != 'non-defined') {
runkit_constant_redefine('PMA_IS_IIS', $this->oldIISvalue);
} elseif (defined('PMA_IS_IIS')) {
runkit_constant_remove('PMA_IS_IIS');
}
}
}
/**
* Test for PMA_sendHeaderLocation
*
* @return void
*/
public function testSendHeaderLocationWithoutSidWithIis()
{
if (defined('PMA_TEST_HEADERS')) {
runkit_constant_redefine('PMA_IS_IIS', true);
$testUri = 'https://example.com/test.php';
$header = array('Location: ' . $testUri);
PMA_sendHeaderLocation($testUri); // sets $GLOBALS['header']
$this->assertEquals($header, $GLOBALS['header']);
//reset $GLOBALS['header'] for the next assertion
unset($GLOBALS['header']);
$header = array('Refresh: 0; ' . $testUri);
PMA_sendHeaderLocation($testUri, true); // sets $GLOBALS['header']
$this->assertEquals($header, $GLOBALS['header']);
} else {
$this->markTestSkipped(
'Cannot redefine constant/function - missing runkit extension'
);
}
}
/**
* Test for PMA_sendHeaderLocation
*
* @return void
*/
public function testSendHeaderLocationWithoutSidWithoutIis()
{
if (defined('PMA_TEST_HEADERS')) {
$testUri = 'https://example.com/test.php';
$header = array('Location: ' . $testUri);
PMA_sendHeaderLocation($testUri); // sets $GLOBALS['header']
$this->assertEquals($header, $GLOBALS['header']);
} else {
$this->markTestSkipped(
'Cannot redefine constant/function - missing runkit extension'
);
}
}
/**
* Test for PMA_sendHeaderLocation
*
* @return void
*/
public function testSendHeaderLocationIisLongUri()
{
if (defined('PMA_IS_IIS') && PMA_HAS_RUNKIT) {
runkit_constant_redefine('PMA_IS_IIS', true);
} elseif (!defined('PMA_IS_IIS')) {
define('PMA_IS_IIS', true);
} elseif (! PMA_IS_IIS) {
$this->markTestSkipped(
'Cannot redefine constant/function - missing runkit extension'
);
}
// over 600 chars
$testUri = 'https://example.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';
$testUri_html = htmlspecialchars($testUri);
$testUri_js = PMA_escapeJsString($testUri);
$header = "<html>\n<head>\n <title>- - -</title>
<meta http-equiv=\"expires\" content=\"0\">"
. "\n <meta http-equiv=\"Pragma\" content=\"no-cache\">"
. "\n <meta http-equiv=\"Cache-Control\" content=\"no-cache\">"
. "\n <meta http-equiv=\"Refresh\" content=\"0;url=" . $testUri_html . "\">"
. "\n <script type=\"text/javascript\">\n //<![CDATA[
setTimeout(\"window.location = decodeURI('" . $testUri_js . "')\", 2000);
//]]>\n </script>\n</head>
<body>\n<script type=\"text/javascript\">\n //<![CDATA[
document.write('<p><a href=\"" . $testUri_html . "\">" . __('Go') . "</a></p>');
//]]>\n</script>\n</body>\n</html>
";
$this->expectOutputString($header);
$restoreInstance = PMA\libraries\Response::getInstance();
$mockResponse = $this->getMockBuilder('PMA\libraries\Response')
->disableOriginalConstructor()
->setMethods(array('disable', 'header', 'headersSent'))
->getMock();
$mockResponse->expects($this->once())
->method('disable');
$mockResponse->expects($this->any())
->method('headersSent')
->with()
->will($this->returnValue(false));
$attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance');
$attrInstance->setAccessible(true);
$attrInstance->setValue($mockResponse);
PMA_sendHeaderLocation($testUri);
$attrInstance->setValue($restoreInstance);
}
}

View File

@ -0,0 +1,69 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
/**
*
* @package PhpMyAdmin-test
*/
class PMA_IfSetOr_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_ifSetOr
*
* @return void
*/
public function testVarSet()
{
$default = 'foo';
$in = 'bar';
$out = PMA_ifSetOr($in, $default);
$this->assertEquals($in, $out);
}
/**
* Test for PMA_ifSetOr
*
* @return void
*/
public function testVarSetWrongType()
{
$default = 'foo';
$in = 'bar';
$out = PMA_ifSetOr($in, $default, 'boolean');
$this->assertEquals($out, $default);
}
/**
* Test for PMA_ifSetOr
*
* @return void
*/
public function testVarNotSet()
{
$default = 'foo';
// $in is not set!
$out = PMA_ifSetOr($in, $default);
$this->assertEquals($out, $default);
}
/**
* Test for PMA_ifSetOr
*
* @return void
*/
public function testVarNotSetNoDefault()
{
// $in is not set!
$out = PMA_ifSetOr($in);
$this->assertEquals($out, null);
}
}

View File

@ -0,0 +1,56 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA_isAllowedDomain
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/core.lib.php';
class PMA_isAllowedDomain_test extends PHPUnit_Framework_TestCase
{
/**
* Test for unserializing
*
* @param string $url URL to test
* @param mixed $expected Expected result
*
* @return void
*
* @dataProvider provideURLs
*/
function testIsAllowedDomain($url, $expected)
{
$_SERVER['SERVER_NAME'] = 'server.local';
$this->assertEquals(
$expected,
PMA_isAllowedDomain($url)
);
}
/**
* Test data provider
*
* @return array
*/
function provideURLs()
{
return array(
array('https://www.phpmyadmin.net/', true),
array('http://duckduckgo.com\\@github.com', false),
array('https://github.com/', true),
array('https://github.com:123/', false),
array('https://user:pass@github.com:123/', false),
array('https://user:pass@github.com/', false),
array('https://server.local/', true),
array('./relative/', false),
);
}
}

View File

@ -0,0 +1,343 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
/**
*
* @package PhpMyAdmin-test
*/
class PMA_IsValid_Test extends PHPUnit_Framework_TestCase
{
/**
* Data provider for testNoVarType
*
* @return array
*/
public static function providerNoVarTypeProvider()
{
return array(
array(0, false, 0),
array(0, false, 1),
array(1, false, null),
array(1.1, false, null),
array('', false, null),
array(' ', false, null),
array('0', false, null),
array('string', false, null),
array(array(), false, null),
array(array(1, 2, 3), false, null),
array(true, false, null),
array(false, false, null));
}
/**
* Test for PMA_isValid
*
* @param mixed $var Variable to check
* @param mixed $type Type
* @param mixed $compare Compared value
*
* @return void
*
* @dataProvider providerNoVarTypeProvider
*/
public function testNoVarType($var, $type, $compare)
{
$this->assertTrue(PMA_isValid($var, $type, $compare));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testVarNotSetAfterTest()
{
PMA_isValid($var);
$this->assertFalse(isset($var));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNotSet()
{
$this->assertFalse(PMA_isValid($var));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testEmptyString()
{
$var = '';
$this->assertFalse(PMA_isValid($var));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNotEmptyString()
{
$var = '0';
$this->assertTrue(PMA_isValid($var));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testZero()
{
$var = 0;
$this->assertTrue(PMA_isValid($var));
$this->assertTrue(PMA_isValid($var, 'int'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNullFail()
{
$var = null;
$this->assertFalse(PMA_isValid($var));
$var = 'null_text';
$this->assertFalse(PMA_isValid($var, 'null'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNotSetArray()
{
/** @var $array undefined array */
$this->assertFalse(PMA_isValid($array['x']));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testScalarString()
{
$var = 'string';
$this->assertTrue(PMA_isValid($var, 'len'));
$this->assertTrue(PMA_isValid($var, 'scalar'));
$this->assertTrue(PMA_isValid($var));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testScalarInt()
{
$var = 1;
$this->assertTrue(PMA_isValid($var, 'int'));
$this->assertTrue(PMA_isValid($var, 'scalar'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testScalarFloat()
{
$var = 1.1;
$this->assertTrue(PMA_isValid($var, 'float'));
$this->assertTrue(PMA_isValid($var, 'double'));
$this->assertTrue(PMA_isValid($var, 'scalar'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testScalarBool()
{
$var = true;
$this->assertTrue(PMA_isValid($var, 'scalar'));
$this->assertTrue(PMA_isValid($var, 'bool'));
$this->assertTrue(PMA_isValid($var, 'boolean'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNotScalarArray()
{
$var = array('test');
$this->assertFalse(PMA_isValid($var, 'scalar'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNotScalarNull()
{
$var = null;
$this->assertFalse(PMA_isValid($var, 'scalar'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNumericInt()
{
$var = 1;
$this->assertTrue(PMA_isValid($var, 'numeric'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNumericFloat()
{
$var = 1.1;
$this->assertTrue(PMA_isValid($var, 'numeric'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNumericZero()
{
$var = 0;
$this->assertTrue(PMA_isValid($var, 'numeric'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNumericString()
{
$var = '+0.1';
$this->assertTrue(PMA_isValid($var, 'numeric'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testValueInArray()
{
$var = 'a';
$this->assertTrue(PMA_isValid($var, array('a', 'b',)));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testValueNotInArray()
{
$var = 'c';
$this->assertFalse(PMA_isValid($var, array('a', 'b',)));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNumericIdentical()
{
$var = 1;
$compare = 1;
$this->assertTrue(PMA_isValid($var, 'identic', $compare));
$var = 1;
$compare += 2;
$this->assertFalse(PMA_isValid($var, 'identic', $compare));
$var = 1;
$compare = '1';
$this->assertFalse(PMA_isValid($var, 'identic', $compare));
}
/**
* Data provider for testSimilarType
*
* @return array
*/
public function providerSimilarType()
{
return array(
array(1, 1),
array(1.5, 1.5),
array(true, true),
array('string', "string"),
array(array(1, 2, 3.4), array(1, 2, 3.4)),
array(array(1, '2', '3.4', 5, 'text'), array('1', '2', 3.4,'5'))
);
}
/**
* Test for PMA_isValid
*
* @param mixed $var Variable
* @param mixed $compare Compare
*
* @return void
*
* @dataProvider providerSimilarType
*/
public function testSimilarType($var, $compare)
{
$this->assertTrue(PMA_isValid($var, 'similar', $compare));
$this->assertTrue(PMA_isValid($var, 'equal', $compare));
$this->assertTrue(PMA_isValid($compare, 'similar', $var));
$this->assertTrue(PMA_isValid($compare, 'equal', $var));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testOtherTypes()
{
$var = new PMA_isValid_test();
$this->assertFalse(PMA_isValid($var, 'class'));
}
}

View File

@ -0,0 +1,56 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA_safeUnserialize
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/core.lib.php';
class PMA_safeUnserialize_test extends PHPUnit_Framework_TestCase
{
/**
* Test for unserializing
*
* @param string $data Serialized data
* @param mixed $expected Expected result
*
* @return void
*
* @dataProvider provideMySQLHosts
*/
function testSanitizeMySQLHost($data, $expected)
{
$this->assertEquals(
$expected,
PMA_safeUnserialize($data)
);
}
/**
* Test data provider
*
* @return array
*/
function provideMySQLHosts()
{
return array(
array('s:6:"foobar";', 'foobar'),
array('foobar', null),
array('b:0;', false),
array('O:1:"a":1:{s:5:"value";s:3:"100";}', null),
array('O:8:"stdClass":1:{s:5:"field";O:8:"stdClass":0:{}}', null),
array('a:2:{i:0;s:90:"1234567890;a345678901234567890123456789012345678901234567890123456789012345678901234567890";i:1;O:8:"stdClass":0:{}}', null),
array(serialize(array(1, 2, 3)), array(1, 2, 3)),
array(serialize('string""'), 'string""'),
array(serialize(array('foo' => 'bar')), array('foo' => 'bar')),
array(serialize(array('1', new stdClass(), '2')), null),
);
}
}

View File

@ -0,0 +1,49 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA_sanitizeMySQLHost
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/core.lib.php';
class PMA_sanitizeMySQLHost_test extends PHPUnit_Framework_TestCase
{
/**
* Test for MySQL host sanitizing
*
* @param string $host Test host name
* @param string $expected Expected result
*
* @return void
*
* @dataProvider provideMySQLHosts
*/
function testSanitizeMySQLHost($host, $expected)
{
$this->assertEquals(
$expected,
PMA_sanitizeMySQLHost($host)
);
}
/**
* Test data provider
*
* @return array
*/
function provideMySQLHosts()
{
return array(
array('p:foo.bar', 'foo.bar'),
array('p:p:foo.bar', 'foo.bar'),
array('bar.baz', 'bar.baz'),
array('P:example.com', 'example.com'),
);
}
}

View File

@ -0,0 +1,38 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* PMA_securePath changes .. to .
*
* @package PhpMyAdmin-test
*/
/**
* Test for securing path.
*
* @package PhpMyAdmin-test
*/
class PMA_SecurePath extends PHPUnit_Framework_TestCase
{
/**
* Test for replacing dots.
*
* @return void
*/
public function testReplaceDots()
{
$this->assertEquals(
PMA_securePath('../../../etc/passwd'),
'./././etc/passwd'
);
$this->assertEquals(
PMA_securePath('/var/www/../phpmyadmin'),
'/var/www/./phpmyadmin'
);
$this->assertEquals(
PMA_securePath('./path/with..dots/../../file..php'),
'./path/with.dots/././file.php'
);
}
}

View File

@ -0,0 +1,89 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* PMA_warnMissingExtension warns or fails on missing extension.
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/js_escape.lib.php';
require_once 'libraries/sanitizing.lib.php';
/**
* PMA_warnMissingExtension warns or fails on missing extension.
*
* @package PhpMyAdmin-test
*/
class PMA_WarnMissingExtension_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
public function setUp()
{
$GLOBALS['PMA_Config'] = new PMA\libraries\Config();
$GLOBALS['PMA_Config']->enableBc();
$GLOBALS['cfg']['Server'] = array(
'host' => 'host',
'verbose' => 'verbose',
);
$GLOBALS['cfg']['OBGzip'] = false;
$_SESSION['PMA_Theme'] = new Theme();
$GLOBALS['pmaThemeImage'] = 'theme/';
$GLOBALS['pmaThemePath'] = $_SESSION['PMA_Theme']->getPath();
$GLOBALS['server'] = 1;
$GLOBALS['db'] = '';
$GLOBALS['table'] = '';
include_once './libraries/ErrorHandler.php';
$GLOBALS['error_handler'] = new PMA\libraries\ErrorHandler();
}
/**
* Test for PMA_warnMissingExtension
*
* @return void
*/
function testMissingExtensionFatal()
{
$ext = 'php_ext';
$warn = 'The <a href="' . PMA_getPHPDocLink('book.' . $ext . '.php')
. '" target="Documentation"><em>' . $ext
. '</em></a> extension is missing. Please check your PHP configuration.';
$this->expectOutputRegex('@' . preg_quote($warn, '@') . '@');
PMA_warnMissingExtension($ext, true);
}
/**
* Test for PMA_warnMissingExtension
*
* @return void
*/
function testMissingExtensionFatalWithExtra()
{
$ext = 'php_ext';
$extra = 'Appended Extra String';
$warn = 'The <a href="' . PMA_getPHPDocLink('book.' . $ext . '.php')
. '" target="Documentation"><em>' . $ext
. '</em></a> extension is missing. Please check your PHP configuration.'
. ' ' . $extra;
ob_start();
PMA_warnMissingExtension($ext, true, $extra);
$printed = ob_get_contents();
ob_end_clean();
$this->assertGreaterThan(0, mb_strpos($printed, $warn));
}
}

Some files were not shown because too many files have changed in this diff Show More