object = new ExportJson(); } /** * tearDown for test cases */ protected function tearDown(): void { parent::tearDown(); unset($this->object); } public function testSetProperties(): void { $method = new ReflectionMethod(ExportJson::class, 'setProperties'); $method->setAccessible(true); $method->invoke($this->object, null); $attrProperties = new ReflectionProperty(ExportJson::class, 'properties'); $attrProperties->setAccessible(true); $properties = $attrProperties->getValue($this->object); $this->assertInstanceOf(ExportPluginProperties::class, $properties); $this->assertEquals( 'JSON', $properties->getText() ); $this->assertEquals( 'json', $properties->getExtension() ); $this->assertEquals( 'text/plain', $properties->getMimeType() ); $this->assertEquals( 'Options', $properties->getOptionsText() ); $options = $properties->getOptions(); $this->assertInstanceOf(OptionsPropertyRootGroup::class, $options); $this->assertEquals( 'Format Specific Options', $options->getName() ); $generalOptionsArray = $options->getProperties(); $generalOptions = $generalOptionsArray[0]; $this->assertInstanceOf(OptionsPropertyMainGroup::class, $generalOptions); $this->assertEquals( 'general_opts', $generalOptions->getName() ); $generalProperties = $generalOptions->getProperties(); $property = array_shift($generalProperties); $this->assertInstanceOf(HiddenPropertyItem::class, $property); $this->assertEquals( 'structure_or_data', $property->getName() ); } public function testExportHeader(): void { $GLOBALS['crlf'] = "\n"; $this->expectOutputString( "[\n" . '{"type":"header","version":"' . Version::VERSION . '","comment":"Export to JSON plugin for PHPMyAdmin"},' . "\n" ); $this->assertTrue( $this->object->exportHeader() ); } public function testExportFooter(): void { $GLOBALS['crlf'] = ''; $this->expectOutputString(']'); $this->assertTrue( $this->object->exportFooter() ); } public function testExportDBHeader(): void { $GLOBALS['crlf'] = "\n"; $this->expectOutputString('{"type":"database","name":"testDB"},' . "\n"); $this->assertTrue( $this->object->exportDBHeader('testDB') ); } public function testExportDBFooter(): void { $this->assertTrue( $this->object->exportDBFooter('testDB') ); } public function testExportDBCreate(): void { $this->assertTrue( $this->object->exportDBCreate('testDB', 'database') ); } public function testExportData(): void { $this->expectOutputString( '{"type":"table","name":"test_table","database":"test_db","data":' . "\n" . '[' . "\n" . '{"id":"1","name":"abcd","datetimefield":"2011-01-20 02:00:02"},' . "\n" . '{"id":"2","name":"foo","datetimefield":"2010-01-20 02:00:02"},' . "\n" . '{"id":"3","name":"Abcd","datetimefield":"2012-01-20 02:00:02"}' . "\n" . ']' . "\n" . '}' . "\n" ); $this->assertTrue($this->object->exportData( 'test_db', 'test_table', "\n", 'localhost', 'SELECT * FROM `test_db`.`test_table`;' )); } public function testExportComplexData(): void { // normalString binaryField textField blobField $this->expectOutputString( '{"type":"table","name":"test_table_complex","database":"test_db","data":' . "\n[\n" . '{"f1":"\"\'\">