3 declare(strict_types
=1);
5 namespace PhpMyAdmin\Tests\Plugins\Export
;
7 use PhpMyAdmin\ConfigStorage\Relation
;
8 use PhpMyAdmin\Current
;
9 use PhpMyAdmin\Dbal\DatabaseInterface
;
10 use PhpMyAdmin\Export\Export
;
11 use PhpMyAdmin\Plugins\Export\ExportPhparray
;
12 use PhpMyAdmin\Properties\Options\Groups\OptionsPropertyMainGroup
;
13 use PhpMyAdmin\Properties\Options\Groups\OptionsPropertyRootGroup
;
14 use PhpMyAdmin\Properties\Options\Items\HiddenPropertyItem
;
15 use PhpMyAdmin\Properties\Plugins\ExportPluginProperties
;
16 use PhpMyAdmin\Tests\AbstractTestCase
;
17 use PhpMyAdmin\Transformations
;
18 use PHPUnit\Framework\Attributes\CoversClass
;
19 use PHPUnit\Framework\Attributes\Medium
;
21 use ReflectionProperty
;
23 use function ob_get_clean
;
24 use function ob_start
;
26 #[CoversClass(ExportPhparray::class)]
28 class ExportPhparrayTest
extends AbstractTestCase
30 protected ExportPhparray
$object;
33 * Configures global environment.
35 protected function setUp(): void
39 $dbi = $this->createDatabaseInterface();
40 DatabaseInterface
::$instance = $dbi;
41 Export
::$outputKanjiConversion = false;
42 Export
::$outputCharsetConversion = false;
43 Export
::$bufferNeeded = false;
44 Export
::$asFile = true;
45 Export
::$saveOnServer = false;
46 Current
::$database = '';
48 Current
::$lang = 'en';
49 $this->object = new ExportPhparray(
52 new Transformations(),
57 * tearDown for test cases
59 protected function tearDown(): void
66 public function testSetProperties(): void
68 $method = new ReflectionMethod(ExportPhparray
::class, 'setProperties');
69 $method->invoke($this->object, null);
71 $attrProperties = new ReflectionProperty(ExportPhparray
::class, 'properties');
72 $properties = $attrProperties->getValue($this->object);
74 self
::assertInstanceOf(ExportPluginProperties
::class, $properties);
78 $properties->getText(),
83 $properties->getExtension(),
88 $properties->getMimeType(),
93 $properties->getOptionsText(),
96 $options = $properties->getOptions();
98 self
::assertInstanceOf(OptionsPropertyRootGroup
::class, $options);
101 'Format Specific Options',
105 $generalOptionsArray = $options->getProperties();
106 $generalOptions = $generalOptionsArray->current();
108 self
::assertInstanceOf(OptionsPropertyMainGroup
::class, $generalOptions);
112 $generalOptions->getName(),
115 $generalProperties = $generalOptions->getProperties();
117 $property = $generalProperties->current();
119 self
::assertInstanceOf(HiddenPropertyItem
::class, $property);
122 public function testExportHeader(): void
126 $this->object->exportHeader(),
128 $result = ob_get_clean();
130 self
::assertIsString($result);
132 self
::assertStringContainsString('<?php' . "\n", $result);
135 public function testExportFooter(): void
138 $this->object->exportFooter(),
142 public function testExportDBHeader(): void
146 $this->object->exportDBHeader('db'),
148 $result = ob_get_clean();
150 self
::assertIsString($result);
152 self
::assertStringContainsString("/**\n * Database `db`\n */", $result);
155 public function testExportDBFooter(): void
158 $this->object->exportDBFooter('testDB'),
162 public function testExportDBCreate(): void
165 $this->object->exportDBCreate('testDB'),
169 public function testExportData(): void
173 $this->object->exportData(
176 'SELECT * FROM `test_db`.`test_table`;',
179 $result = ob_get_clean();
182 "\n" . '/* `test_db`.`test_table` */' . "\n" .
183 '$test_table = array(' . "\n" .
184 ' array(\'id\' => \'1\',\'name\' => \'abcd\',\'datetimefield\' => \'2011-01-20 02:00:02\'),' . "\n" .
185 ' array(\'id\' => \'2\',\'name\' => \'foo\',\'datetimefield\' => \'2010-01-20 02:00:02\'),' . "\n" .
186 ' array(\'id\' => \'3\',\'name\' => \'Abcd\',\'datetimefield\' => \'2012-01-20 02:00:02\')' . "\n" .
191 // case 2: test invalid variable name fix
194 $this->object->exportData(
197 'SELECT * FROM `test_db`.`test_table`;',
200 $result = ob_get_clean();
202 self
::assertIsString($result);
204 "\n" . '/* `test_db`.`0``932table` */' . "\n" .
205 '$_0_932table = array(' . "\n" .
206 ' array(\'id\' => \'1\',\'name\' => \'abcd\',\'datetimefield\' => \'2011-01-20 02:00:02\'),' . "\n" .
207 ' array(\'id\' => \'2\',\'name\' => \'foo\',\'datetimefield\' => \'2010-01-20 02:00:02\'),' . "\n" .
208 ' array(\'id\' => \'3\',\'name\' => \'Abcd\',\'datetimefield\' => \'2012-01-20 02:00:02\')' . "\n" .