getMockBuilder('PhpMyAdmin\SqlParser\Utils\Formatter') ->disableOriginalConstructor() ->setMethods(array('getDefaultOptions', 'getDefaultFormats')) ->getMock(); $formatter->expects($this->once()) ->method('getDefaultOptions') ->willReturn(array( 'type' => 'text', 'line_ending' => null, 'indentation' => null, 'clause_newline' => null, 'parts_newline' => null, )); $formatter->expects($this->once()) ->method('getDefaultFormats') ->willReturn($default); $expectedOptions = array( 'type' => 'test-type', 'line_ending' => '
', 'indentation' => ' ', 'clause_newline' => null, 'parts_newline' => 0, 'formats' => $expected, ); $overridingOptions = array( 'type' => 'test-type', 'line_ending' => '
', 'formats' => $overriding, ); $reflectionMethod = new \ReflectionMethod($formatter, 'getMergedOptions'); $reflectionMethod->setAccessible(true); $this->assertEquals($expectedOptions, $reflectionMethod->invoke($formatter, $overridingOptions)); } public function mergeFormats() { // array($default[], $overriding[], $expected[]) return array( 'empty formats' => array( 'default' => array( array( 'type' => 0, 'flags' => 0, 'html' => '', 'cli' => '', 'function' => '', ), ), 'overriding' => array( array( ), ), 'expected' => array( array( 'type' => 0, 'flags' => 0, 'html' => '', 'cli' => '', 'function' => '', ), ), ), 'no flags' => array( 'default' => array( array( 'type' => 0, 'flags' => 0, 'html' => 'html', 'cli' => 'cli', ), array( 'type' => 0, 'flags' => 1, 'html' => 'html', 'cli' => 'cli', ), ), 'overriding' => array( array( 'type' => 0, 'html' => 'new html', 'cli' => 'new cli', ), ), 'expected' => array( array( 'type' => 0, 'flags' => 0, 'html' => 'new html', 'cli' => 'new cli', 'function' => '', ), array( 'type' => 0, 'flags' => 1, 'html' => 'html', 'cli' => 'cli', ), ), ), 'with flags' => array( 'default' => array( array( 'type' => -1, 'flags' => 0, 'html' => 'html', 'cli' => 'cli', ), array( 'type' => 0, 'flags' => 0, 'html' => 'html', 'cli' => 'cli', ), array( 'type' => 0, 'flags' => 1, 'html' => 'html', 'cli' => 'cli', ), ), 'overriding' => array( array( 'type' => 0, 'flags' => 0, 'html' => 'new html', 'cli' => 'new cli', ), ), 'expected' => array( array( 'type' => -1, 'flags' => 0, 'html' => 'html', 'cli' => 'cli', ), array( 'type' => 0, 'flags' => 0, 'html' => 'new html', 'cli' => 'new cli', 'function' => '', ), array( 'type' => 0, 'flags' => 1, 'html' => 'html', 'cli' => 'cli', ), ), ), 'with extra formats' => array( 'default' => array( array( 'type' => 0, 'flags' => 0, 'html' => 'html', 'cli' => 'cli', ), ), 'overriding' => array( array( 'type' => 0, 'flags' => 1, 'html' => 'new html', 'cli' => 'new cli', ), array( 'type' => 1, 'html' => 'new html', 'cli' => 'new cli', ), array( 'type' => 1, 'flags' => 1, 'html' => 'new html', 'cli' => 'new cli', ), ), 'expected' => array( array( 'type' => 0, 'flags' => 0, 'html' => 'html', 'cli' => 'cli', ), array( 'type' => 0, 'flags' => 1, 'html' => 'new html', 'cli' => 'new cli', 'function' => '', ), array( 'type' => 1, 'flags' => 0, 'html' => 'new html', 'cli' => 'new cli', 'function' => '', ), array( 'type' => 1, 'flags' => 1, 'html' => 'new html', 'cli' => 'new cli', 'function' => '', ), ), ), ); } /** * @dataProvider formatQueries_new */ public function testFormat_new($query, $text, $cli, $html) { // Test TEXT format $this->assertEquals($text, Formatter::format($query, array('type' => 'text'))); // Test CLI format $this->assertEquals($cli, Formatter::format($query, array('type' => 'cli'))); // Test HTML format $this->assertEquals($html, Formatter::format($query, array('type' => 'html'))); } public function formatQueries_new() { return array( 'empty' => array( 'query' => '', 'text' => '', 'cli' => "\x1b[0m", 'html' => '', ), 'simply' => array( 'query' => 'select *', 'text' => "SELECT\n" . " *", 'cli' => "\x1b[35mSELECT" . "\n" . " \x1b[39m*" . "\x1b[0m", 'html' => 'SELECT' . '
' . '    *', ), 'select with comment' => array( 'query' => 'select 1 # Comment', 'text' => "SELECT\n" . " 1 # Comment" . "\n", 'cli' => "\x1b[35mSELECT" . "\n" . " \x1b[92m1 \x1b[37m# Comment\\x0A" . "\x1b[0m", 'html' => 'SELECT' . '
' . '    1 # Comment' . "\n" . '', ), ); } /** * @dataProvider formatQueries */ public function testFormat($query, $expected, $options) { $this->assertEquals( $expected, Formatter::format($query, $options) ); } public function formatQueries() { return array( array( 'SELECT 1', 'SELECT' . '
' . '    1', array('type' => 'html'), ), array( 'SELECT /* Comment */ 1' . "\n" . 'FROM tbl # Comment' . "\n" . 'WHERE 1 -- Comment', 'SELECT' . "\n" . ' /* Comment */ 1' . "\n" . 'FROM' . "\n" . ' tbl # Comment' . "\n" . 'WHERE' . "\n" . ' 1 -- Comment', array('type' => 'text'), ), array( 'SELECT 1 # Comment', 'SELECT' . '
' . '    1 # Comment', array('type' => 'html'), ), array( 'SELECT 1 -- comment', 'SELECT' . '
' . '    1 -- comment', array('type' => 'html'), ), array( 'SELECT 1 -- comment', 'SELECT' . '
' . '    1', array('type' => 'html', 'remove_comments' => true), ), array( 'SELECT HEX("1")', 'SELECT' . '
' . '    HEX("1")', array('type' => 'html'), ), array( 'SELECT * FROM foo WHERE bar=1', 'SELECT' . '
' . '    *' . '
' . 'FROM' . '
' . '    foo' . '
' . 'WHERE' . '
' . '    bar = 1', array('type' => 'html'), ), array( 'CREATE PROCEDURE SPTEST() BEGIN FROM a SELECT *; END', 'CREATE' . '
' . 'PROCEDURE SPTEST()' . '
' . 'BEGIN' . '
' . 'FROM' . '
' . '    a' . '
' . 'SELECT' . '
' . '    *;' . '
' . 'END', array('type' => 'html'), ), array( 'INSERT INTO foo VALUES (0, 0, 0), (1, 1, 1)', 'INSERT' . '
' . 'INTO' . '
' . '    foo' . '
' . 'VALUES' . '(0, 0, 0),' . '(1, 1, 1)', array('type' => 'html'), ), array( 'SELECT 1', "\x1b[35mSELECT\n \x1b[92m1\x1b[0m", array('type' => 'cli'), ), array( 'SELECT "Text" AS BAR', "\x1b[35mSELECT\n \x1b[91m\"Text\" \x1b[35mAS \x1b[39mBAR\x1b[0m", array('type' => 'cli'), ), array( 'SELECT coditm AS Item, descripcion AS Descripcion, contenedores AS Contenedores, IF(suspendido = 1, Si, NO) AS Suspendido FROM `DW_articulos` WHERE superado = 0', 'SELECT' . '
' . '    coditm AS Item,' . '
' . '    descripcion AS Descripcion,' . '
' . '    contenedores AS Contenedores,' . '
' . '    IF(suspendido = 1, Si, NO) AS Suspendido' . '
' . 'FROM' . '
' . '    `DW_articulos`' . '
' . 'WHERE' . '
' . '    superado = 0', array('type' => 'html'), ), array( 'CREATE TABLE IF NOT EXISTS `pma__bookmark` (' . "\n" . ' `id` int(11) NOT NULL auto_increment,' . "\n" . ' `dbase` varchar(255) NOT NULL default "",' . "\n" . ' `user` varchar(255) NOT NULL default "",' . "\n" . ' `label` varchar(255) COLLATE utf8_general_ci NOT NULL default "",' . "\n" . ' `query` text NOT NULL,' . "\n" . ' PRIMARY KEY (`id`)' . "\n", 'CREATE TABLE IF NOT EXISTS `pma__bookmark`(' . '
' . '    `id` INT(11) NOT NULL AUTO_INCREMENT,' . '
' . '    `dbase` VARCHAR(255) NOT NULL DEFAULT "",' . '
' . '    `user` VARCHAR(255) NOT NULL DEFAULT "",' . '
' . '    `label` VARCHAR(255) COLLATE utf8_general_ci NOT NULL DEFAULT "",' . '
' . '    `query` TEXT NOT NULL,' . '
' . '    PRIMARY KEY(`id`)', array('type' => 'html'), ), array( "select 'xss' from `xss` , nxss /*sxss*/", 'SELECT' . '
' . '    \'<s>xss\'' . '
' . 'FROM' . '
' . '    `<s>xss`,' . '
' . '    < s > nxss /*s<s>xss*/', array('type' => 'html'), ), array( "select 'text\x1b[33mcolor-inj' from tbl", "\x1b[35mSELECT\n \x1b[91m'text\\x1B[33mcolor-inj'\n\x1b[35mFROM\n \x1b[39mtbl\x1b[0m", array('type' => 'cli'), ), ); } }