getMockBuilder('SqlParser\Utils\Formatter') ->disableOriginalConstructor() ->setMethods(array('getDefaultOptions', 'getDefaultFormats')) ->getMock(); $formatter->expects($this->once()) ->method('getDefaultOptions') ->willReturn(array( 'type' => 'text', 'line_ending' => null, 'clause_newline' => null, 'parts_newline' => null, )); $formatter->expects($this->once()) ->method('getDefaultFormats') ->willReturn($default); $expectedOptions = array( 'type' => 'test-type', 'line_ending' => '
', '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( array( // default array( 'type' => 0, 'flags' => 0, ), ), array( // overriding array( ), ), array( // expected array( 'type' => 0, 'flags' => 0, ), ), ), 'no flags' => array( array( // default array( 'type' => 0, 'flags' => 0, 'html' => 'html', 'cli' => 'cli', ), array( 'type' => 0, 'flags' => 1, 'html' => 'html', 'cli' => 'cli', ), ), array( // overriding array( 'type' => 0, 'html' => 'new html', 'cli' => 'new cli', ) ), array( // expected array( 'type' => 0, 'flags' => 0, 'html' => 'new html', 'cli' => 'new cli', 'function' => '', ), array( 'type' => 0, 'flags' => 1, 'html' => 'html', 'cli' => 'cli', ), ), ), 'with flags' => array( array( // default 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', ), ), array( // overriding array( 'type' => 0, 'flags' => 0, 'html' => 'new html', 'cli' => 'new cli', ), ), array( // expected 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( array( // default array( 'type' => 0, 'flags' => 0, 'html' => 'html', 'cli' => 'cli', ), ), array( // overriding 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', ), ), array( // expected 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 */ 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 1 # Comment', 'SELECT' . '
' . ' 1 # Comment' . "\n" . '', array('type' => 'html') ), 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( 'SELECT 1 -- comment', 'SELECT' . '
' . ' 1 -- comment' . "\n" . '', array('type' => 'html'), ), array( 'SELECT 1 -- comment', 'SELECT' . '
' . ' 1', array('type' => 'html', 'remove_comments' => true), ), 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'), ), ); } }