"aaa", "pca" => "bbb"]; // For Image_*_Inline plugin $GLOBALS['PMA_Config'] = new Config(); $GLOBALS['PMA_Config']->enableBc(); // For Date Format plugin date_default_timezone_set('UTC'); } /** * Tears down the fixture, for example, closes a network connection. * This method is called after a test is executed. * * @access protected * @return void */ protected function tearDown() { } /** * Data provider for testGetMulti * * @return array with test data */ public function multiDataProvider() { return [ // Test data for PhpMyAdmin\Plugins\Transformations\Input\Image_JPEG_Upload plugin [ new Image_JPEG_Upload(), 'getName', 'Image upload' ], [ new Image_JPEG_Upload(), 'getInfo', 'Image upload functionality which also displays a thumbnail.' . ' The options are the width and height of the thumbnail' . ' in pixels. Defaults to 100 X 100.' ], [ new Image_JPEG_Upload(), 'getMIMEType', 'Image' ], [ new Image_JPEG_Upload(), 'getMIMESubtype', 'JPEG' ], [ new Image_JPEG_Upload(), 'getScripts', ['transformations/image_upload.js'] ], [ new Image_JPEG_Upload(), 'getInputHtml', '
', [ [], 0, 'test', ['150'], '', 'ltr', 0, 0, 0 ] ], [ new Image_JPEG_Upload(), 'getInputHtml', '' . 'Image preview here
', [ [], 0, '2ndtest', [ 'wrapper_link' => '?table=a' ], 'something', 'ltr', 0, 0, 0 ] ], // Test data for TextPlainFileupload plugin [ new Text_Plain_FileUpload(), 'getName', 'Text file upload' ], [ new Text_Plain_FileUpload(), 'getInfo', 'File upload functionality for TEXT columns. ' . 'It does not have a textarea for input.' ], [ new Text_Plain_FileUpload(), 'getMIMEType', 'Text' ], [ new Text_Plain_FileUpload(), 'getMIMESubtype', 'Plain' ], [ new Text_Plain_FileUpload(), 'getScripts', [] ], [ new Text_Plain_FileUpload(), 'getInputHtml', '', [ [], 0, 'test', [], '', 'ltr', 0, 0, 0 ] ], [ new Text_Plain_FileUpload(), 'getInputHtml', '', [ [], 0, '2ndtest', [], 'something', 'ltr', 0, 0, 0 ] ], // Test data for Text_Plain_Regexvalidation plugin [ new Text_Plain_RegexValidation(), 'getName', 'Regex Validation' ], [ new Text_Plain_RegexValidation(), 'getInfo', 'Validates the string using regular expression ' . 'and performs insert only if string matches it. ' . 'The first option is the Regular Expression.' ], [ new Text_Plain_RegexValidation(), 'getMIMEType', 'Text' ], [ new Text_Plain_RegexValidation(), 'getMIMESubtype', 'Plain' ], [ new Text_Plain_RegexValidation(), 'getInputHtml', '', [ [], 0, '', [], '', 'ltr', 0, 0, 0 ] ], // Test data for PhpMyAdmin\Plugins\Transformations\Output\Application_Octetstream_Download plugin [ new Application_Octetstream_Download(), 'getName', 'Download' ], [ new Application_Octetstream_Download(), 'getInfo', 'Displays a link to download the binary data of the column. You can' . ' use the first option to specify the filename, or use the second' . ' option as the name of a column which contains the filename. If' . ' you use the second option, you need to set the first option to' . ' the empty string.' ], [ new Application_Octetstream_Download(), 'getMIMEType', 'Application' ], [ new Application_Octetstream_Download(), 'getMIMESubtype', 'OctetStream' ], // Test data for PhpMyAdmin\Plugins\Transformations\Output\Application_Octetstream_Hex plugin [ new Application_Octetstream_Hex(), 'getName', 'Hex' ], [ new Application_Octetstream_Hex(), 'getInfo', 'Displays hexadecimal representation of data. Optional first' . ' parameter specifies how often space will be added (defaults' . ' to 2 nibbles).' ], [ new Application_Octetstream_Hex(), 'getMIMEType', 'Application' ], [ new Application_Octetstream_Hex(), 'getMIMESubtype', 'OctetStream' ], // Test data for PhpMyAdmin\Plugins\Transformations\Output\Image_JPEG_Inline plugin [ new Image_JPEG_Inline(), 'getName', 'Inline' ], [ new Image_JPEG_Inline(), 'getInfo', 'Displays a clickable thumbnail. The options are the maximum width' . ' and height in pixels. The original aspect ratio is preserved.' ], [ new Image_JPEG_Inline(), 'getMIMEType', 'Image' ], [ new Image_JPEG_Inline(), 'getMIMESubtype', 'JPEG' ], // Test data for PhpMyAdmin\Plugins\Transformations\Output\Image_JPEG_Link plugin [ new Image_JPEG_Link(), 'getName', 'ImageLink' ], [ new Image_JPEG_Link(), 'getInfo', 'Displays a link to download this image.' ], [ new Image_JPEG_Link(), 'getMIMEType', 'Image' ], [ new Image_JPEG_Link(), 'getMIMESubtype', 'JPEG' ], [ new Image_JPEG_Link(), 'applyTransformationNoWrap', null ], // Test data for PhpMyAdmin\Plugins\Transformations\Output\Image_PNG_Inline plugin [ new Image_PNG_Inline(), 'getName', 'Inline' ], [ new Image_PNG_Inline(), 'getInfo', 'Displays a clickable thumbnail. The options are the maximum width' . ' and height in pixels. The original aspect ratio is preserved.' ], [ new Image_PNG_Inline(), 'getMIMEType', 'Image' ], [ new Image_PNG_Inline(), 'getMIMESubtype', 'PNG' ], // Test data for PhpMyAdmin\Plugins\Transformations\Output\Text_Plain_Dateformat plugin [ new Text_Plain_Dateformat(), 'getName', 'Date Format' ], [ new Text_Plain_Dateformat(), 'getInfo', 'Displays a TIME, TIMESTAMP, DATETIME or numeric unix timestamp' . ' column as formatted date. The first option is the offset (in' . ' hours) which will be added to the timestamp (Default: 0). Use' . ' second option to specify a different date/time format string.' . ' Third option determines whether you want to see local date or' . ' UTC one (use "local" or "utc" strings) for that. According to' . ' that, date format has different value - for "local" see the' . ' documentation for PHP\'s strftime() function and for "utc" it' . ' is done using gmdate() function.' ], [ new Text_Plain_Dateformat(), 'getMIMEType', 'Text' ], [ new Text_Plain_Dateformat(), 'getMIMESubtype', 'Plain' ], // Test data for PhpMyAdmin\Plugins\Transformations\Output\Text_Plain_External plugin [ new Text_Plain_External(), 'getName', 'External' ], [ new Text_Plain_External(), 'getInfo', 'LINUX ONLY:' . ' Launches an external application and feeds it the column' . ' data via standard input. Returns the standard output of the' . ' application. The default is Tidy, to pretty-print HTML code.' . ' For security reasons, you have to manually edit the file' . ' libraries/classes/Plugins/Transformations/Output/Text_Plain_External' . '.php and list the tools you want to make available.' . ' The first option is then the number of the program you want to' . ' use and the second option is the parameters for the program.' . ' The third option, if set to 1, will convert the output using' . ' htmlspecialchars() (Default 1). The fourth option, if set to 1,' . ' will prevent wrapping and ensure that the output appears all on' . ' one line (Default 1).' ], [ new Text_Plain_External(), 'getMIMEType', 'Text' ], [ new Text_Plain_External(), 'getMIMESubtype', 'Plain' ], [ new Text_Plain_External(), 'applyTransformationNoWrap', true, [ ["/dev/null -i -wrap -q", "/dev/null -i -wrap -q"] ] ], [ new Text_Plain_External(), 'applyTransformationNoWrap', true, [ [ "/dev/null -i -wrap -q", "/dev/null -i -wrap -q", "/dev/null -i -wrap -q", 1 ] ] ], [ new Text_Plain_External(), 'applyTransformationNoWrap', true, [ [ "/dev/null -i -wrap -q", "/dev/null -i -wrap -q", "/dev/null -i -wrap -q", "1" ] ] ], [ new Text_Plain_External(), 'applyTransformationNoWrap', false, [ [ "/dev/null -i -wrap -q", "/dev/null -i -wrap -q", "/dev/null -i -wrap -q", 2 ] ] ], // Test data for PhpMyAdmin\Plugins\Transformations\Output\Text_Plain_Formatted plugin [ new Text_Plain_Formatted(), 'getName', 'Formatted' ], [ new Text_Plain_Formatted(), 'getInfo', 'Displays the contents of the column as-is, without running it' . ' through htmlspecialchars(). That is, the column is assumed' . ' to contain valid HTML.' ], [ new Text_Plain_Formatted(), 'getMIMEType', 'Text' ], [ new Text_Plain_Formatted(), 'getMIMESubtype', 'Plain' ], // Test data for PhpMyAdmin\Plugins\Transformations\Output\Text_Plain_Imagelink plugin [ new Text_Plain_Imagelink(), 'getName', 'Image Link' ], [ new Text_Plain_Imagelink(), 'getInfo', 'Displays an image and a link; ' . 'the column contains the filename. The first option' . ' is a URL prefix like "https://www.example.com/". ' . 'The second and third options' . ' are the width and the height in pixels.' ], [ new Text_Plain_Imagelink(), 'getMIMEType', 'Text' ], [ new Text_Plain_Imagelink(), 'getMIMESubtype', 'Plain' ], // Test data for PhpMyAdmin\Plugins\Transformations\Output\Text_Plain_Sql plugin [ new Text_Plain_Sql(), 'getName', 'SQL' ], [ new Text_Plain_Sql(), 'getInfo', 'Formats text as SQL query with syntax highlighting.' ], [ new Text_Plain_Sql(), 'getMIMEType', 'Text' ], [ new Text_Plain_Sql(), 'getMIMESubtype', 'Plain' ], // Test data for PhpMyAdmin\Plugins\Transformations\Text_Plain_Link plugin [ new Text_Plain_Link(), 'getName', 'TextLink' ], [ new Text_Plain_Link(), 'getInfo', 'Displays a link; the column contains the filename. The first option' . ' is a URL prefix like "https://www.example.com/".' . ' The second option is a title for the link.' ], [ new Text_Plain_Link(), 'getMIMEType', 'Text' ], [ new Text_Plain_Link(), 'getMIMESubtype', 'Plain' ], // Test data for PhpMyAdmin\Plugins\Transformations\Text_Plain_Longtoipv4 plugin [ new Text_Plain_Longtoipv4(), 'getName', 'Long To IPv4' ], [ new Text_Plain_Longtoipv4(), 'getInfo', 'Converts an (IPv4) Internet network address stored as a BIGINT' . ' into a string in Internet standard dotted format.' ], [ new Text_Plain_Longtoipv4(), 'getMIMEType', 'Text' ], [ new Text_Plain_Longtoipv4(), 'getMIMESubtype', 'Plain' ], // Test data for Text_Plain_PreApPend plugin [ new Text_Plain_PreApPend(), 'getName', 'PreApPend' ], [ new Text_Plain_PreApPend(), 'getInfo', 'Prepends and/or Appends text to a string. First option is text' . ' to be prepended, second is appended (enclosed in single' . ' quotes, default empty string).' ], [ new Text_Plain_PreApPend(), 'getMIMEType', 'Text' ], [ new Text_Plain_PreApPend(), 'getMIMESubtype', 'Plain' ], // Test data for PhpMyAdmin\Plugins\Transformations\Text_Plain_Substring plugin [ new Text_Plain_Substring(), 'getName', 'Substring' ], [ new Text_Plain_Substring(), 'getInfo', 'Displays a part of a string. The first option is the number ' . 'of characters to skip from the beginning of the string ' . '(Default 0). The second option is the number of characters ' . 'to return (Default: until end of string). The third option is ' . 'the string to append and/or prepend when truncation occurs ' . '(Default: "…").' ], [ new Text_Plain_Substring(), 'getMIMEType', 'Text' ], [ new Text_Plain_Substring(), 'getMIMESubtype', 'Plain' ], [ new Text_Plain_Substring(), 'getOptions', ['foo', 'bar', 'baz'], [ [], ['foo', 'bar', 'baz'] ] ], [ new Text_Plain_Substring(), 'getOptions', ['foo', 'bar', 'baz'], [ ['foo', 'bar', 'baz'], ['foo', 'bar', 'baz'] ] ], [ new Text_Plain_Substring(), 'getOptions', ['foo', 'bar', 'baz'], [ ['foo', 'bar', 'baz'], [1, 2, 3] ] ], ]; } /** * Tests for getInfo, getName, getMIMEType, getMIMESubtype * getScripts, applyTransformationNoWrap, getOptions * * @param object $object instance of the plugin * @param string $method the method name * @param mixed $expected the expected output * @param array $args the array of arguments * * @return void * * @dataProvider multiDataProvider * @group medium */ public function testGetMulti($object, $method, $expected, $args = []) { if (method_exists($object, $method)) { $reflectionMethod = new ReflectionMethod($object, $method); $this->assertEquals( $expected, $reflectionMethod->invokeArgs($object, $args) ); } } /** * Data provider for testTransformation * * @return array with test data */ public function transformationDataProvider() { $result = [ [ new Image_JPEG_Upload(), [ 'test', [150, 100] ], 'test' ], [ new Text_Plain_FileUpload(), [ 'test', [] ], 'test' ], [ new Text_Plain_RegexValidation(), [ 'phpMyAdmin', ['/php/i'] ], 'phpMyAdmin', true, '' ], [ new Text_Plain_RegexValidation(), [ 'qwerty', ['/^a/'] ], 'qwerty', false, 'Validation failed for the input string qwerty.' ], [ new Application_Octetstream_Download(), [ 'PMA_BUFFER', ["filename", 'wrapper_link' => 'PMA_wrapper_link'] ], 'filename' ], [ new Application_Octetstream_Download(), [ 'PMA_BUFFER', ["", 'cloumn', 'wrapper_link' => 'PMA_wrapper_link'] ], 'binary_file.dat' ], [ new Application_Octetstream_Hex(), [ '11111001', [3] ], '313 131 313 130 303 1 ' ], [ new Application_Octetstream_Hex(), [ '11111001', [0] ], '3131313131303031' ], [ new Application_Octetstream_Hex(), [ '11111001', [] ], '31 31 31 31 31 30 30 31 ' ], [ new Image_JPEG_Link(), [ 'PMA_IMAGE_LINK', ["./image/", "200", "wrapper_link" => "PMA_wrapper_link"] ], '[BLOB]' ], [ new Text_Plain_Dateformat(), [ 12345, [0], (object) [ 'type' => 'int' ] ], '' . 'Jan 01, 1970 at 03:25 AM' ], [ new Text_Plain_Dateformat(), [ 12345678, [0], (object) [ 'type' => 'string' ] ], '' . 'May 23, 1970 at 09:21 PM' ], [ new Text_Plain_Dateformat(), [ 123456789, [0], (object) [ 'type' => null ] ], '' . 'Nov 29, 1973 at 09:33 PM' ], [ new Text_Plain_Dateformat(), [ '20100201', [0], (object) [ 'type' => null ] ], '' . 'Feb 01, 2010 at 12:00 AM' ], [ new Text_Plain_External(), [ 'PMA_BUFFER', ["/dev/null -i -wrap -q", "/dev/null -i -wrap -q"] ], 'PMA_BUFFER' ], [ new Text_Plain_Formatted(), [ "PMA_BUFFER", ["option1", "option2"] ], "" ], [ new Text_Plain_Formatted(), [ "PMA_BUFFER", ["option1", "option2"] ], "" ], [ new Text_Plain_Imagelink(), [ 'PMA_IMAGE', ["http://image/", "200"] ], '' . 'PMA_IMAGE' ], [ new Text_Plain_Imagelink(), [ 'PMA_IMAGE', ["./image/", "200"] ], './image/PMA_IMAGE' ], [ new Text_Plain_Sql(), [ 'select *', ["option1", "option2"] ], '
' . "\n"
                . 'select *' . "\n"
                . '
' ], [ new Text_Plain_Link(), [ 'PMA_TXT_LINK', ["./php/", "text_name"] ], './php/PMA_TXT_LINK' ], [ new Text_Plain_Link(), [ 'PMA_TXT_LINK', [], ], 'PMA_TXT_LINK' ], [ new Text_Plain_Link(), [ 'https://example.com/PMA_TXT_LINK', [], ], 'https://example.com/PMA_TXT_LINK' ], [ new Text_Plain_Link(), [ 'PMA_TXT_LINK', ["./php/", "text_name"] ], './php/PMA_TXT_LINK' ], [ new Text_Plain_Longtoipv4(), [ 42949672, ["option1", "option2"] ], '2.143.92.40' ], [ new Text_Plain_Longtoipv4(), [ 4294967295, ["option1", "option2"] ], '255.255.255.255' ], [ new Text_Plain_PreApPend(), [ 'My', ['php', 'Admin'] ], 'phpMyAdmin' ], [ new Text_Plain_Substring(), [ 'PMA_BUFFER', [1, 3, 'suffix'] ], 'suffixMA_suffix' ], ]; if (function_exists('imagecreatetruecolor')) { $result[] = [ new Image_JPEG_Inline(), [ 'PMA_JPEG_Inline', ["./image/", "200", "wrapper_link" => "PMA_wrapper_link"] ], '[PMA_JPEG_Inline]' ]; $result[] = [ new Image_PNG_Inline(), [ 'PMA_PNG_Inline', ["./image/", "200", "wrapper_link" => "PMA_wrapper_link"] ], '' ]; } return $result; } /** * Tests for applyTransformation, isSuccess, getError * * @param object $object instance of the plugin * @param array $applyArgs arguments for applyTransformation * @param string $transformed the expected output of applyTransformation * @param bool $success the expected output of isSuccess * @param string $error the expected output of getError * * @return void * * @dataProvider transformationDataProvider * @group medium */ public function testTransformation( $object, $applyArgs, $transformed, $success = true, $error = '' ) { $reflectionMethod = new ReflectionMethod($object, 'applyTransformation'); $this->assertEquals( $transformed, $reflectionMethod->invokeArgs($object, $applyArgs) ); // For output transformation plugins, this method may not exist if (method_exists($object, 'isSuccess')) { $this->assertEquals( $success, $object->isSuccess() ); } // For output transformation plugins, this method may not exist if (method_exists($object, 'getError')) { $this->assertEquals( $error, $object->getError() ); } } }