/** * Imports a data set represented as XML into the test database, * * @param string $path Absolute path to the XML file containing the data set to load * @return void * @throws \Exception */ protected function importDataSet($path) { if (method_exists('\\TYPO3\\CMS\\Core\\Tests\\FunctionalTestCase', 'importDataSet')) { parent::importDataSet($path); return; } if (!is_file($path)) { throw new \Exception('Fixture file ' . $path . ' not found', 1376746261); } $database = $this->getDatabaseConnection(); $xml = simplexml_load_file($path); $foreignKeys = array(); /** @var $table \SimpleXMLElement */ foreach ($xml->children() as $table) { $insertArray = array(); /** @var $column \SimpleXMLElement */ foreach ($table->children() as $column) { $columnName = $column->getName(); $columnValue = NULL; if (isset($column['ref'])) { list($tableName, $elementId) = explode('#', $column['ref']); $columnValue = $foreignKeys[$tableName][$elementId]; } elseif (isset($column['is-NULL']) && $column['is-NULL'] === 'yes') { $columnValue = NULL; } else { $columnValue = (string) $table->{$columnName}; } $insertArray[$columnName] = $columnValue; } $tableName = $table->getName(); $result = $database->exec_INSERTquery($tableName, $insertArray); if ($result === FALSE) { $this->markTestSkipped(sprintf('Error when processing fixture file: %s. Can not insert data to table %s: %s', $path, $tableName, $database->sql_error())); } if (isset($table['id'])) { $elementId = (string) $table['id']; $foreignKeys[$tableName][$elementId] = $database->sql_insert_id(); } } }