49 'typo3/sysext/core/Tests/Functional/Fixtures/Extensions/irre_tutorial',
57 'typo3/sysext/core/Tests/Functional/Fixtures/Frontend/AdditionalConfiguration.php' =>
'typo3conf/AdditionalConfiguration.php',
58 'typo3/sysext/core/Tests/Functional/Fixtures/Frontend/extTables.php' =>
'typo3conf/extTables.php',
79 $this->backendUser = $this->setUpBackendUserFromFixture(self::VALUE_BackendUserId);
81 $this->backendUser->workspace = 0;
89 unset($this->actionService);
90 unset($this->recordIds);
99 'TYPO3\\CMS\\Core\\Tests\\Functional\\DataHandling\\Framework\\ActionService' 107 $fileName = rtrim($this->scenarioDataSetDirectory,
'/') .
'/' . $dataSetName .
'.csv';
112 foreach ($dataSet->getTableNames() as $tableName) {
113 foreach ($dataSet->getElements($tableName) as $element) {
119 if (!empty($sqlError)) {
120 $this->fail(
'SQL Error for table "' . $tableName .
'": ' . LF . $sqlError);
127 $fileName = rtrim($this->assertionDataSetDirectory,
'/') .
'/' . $dataSetName .
'.csv';
131 $failMessages = array();
133 foreach ($dataSet->getTableNames() as $tableName) {
134 $hasUidField = ($dataSet->getIdIndex($tableName) !== NULL);
136 foreach ($dataSet->getElements($tableName) as $assertion) {
139 if ($hasUidField && empty($records[$assertion[
'uid']])) {
140 $failMessages[] =
'Record "' . $tableName .
':' . $assertion[
'uid'] .
'" not found in database';
143 $recordIdentifier = $tableName . ($hasUidField ?
':' . $assertion[
'uid'] :
'');
144 $additionalInformation = ($hasUidField ? $this->
renderRecords($assertion, $records[$assertion[
'uid']]) : $this->
arrayToString($assertion));
145 $failMessages[] =
'Assertion in data-set failed for "' . $recordIdentifier .
'":' . LF . $additionalInformation;
148 unset($records[$assertion[
'uid']]);
154 $this->assertTrue($result !== FALSE);
157 if (!empty($records)) {
158 foreach ($records as $record) {
159 $recordIdentifier = $tableName .
':' . $record[
'uid'];
160 $emptyAssertion = array_fill_keys($dataSet->getFields($tableName),
'[none]');
161 $reducedRecord = array_intersect_key($record, $emptyAssertion);
162 $additionalInformation = ($hasUidField ? $this->
renderRecords($emptyAssertion, $reducedRecord) : $this->
arrayToString($reducedRecord));
163 $failMessages[] =
'Not asserted record found for "' . $recordIdentifier .
'":' . LF . $additionalInformation;
168 if (!empty($failMessages)) {
169 $this->fail(implode(LF, $failMessages));
179 foreach ($records as $index => $record) {
182 if (empty($differentFields)) {
196 if ($this->expectedErrorLogEntries === NULL) {
199 $errorLogEntries = $this->
getDatabaseConnection()->exec_SELECTgetRows(
'*',
'sys_log',
'error IN (1,2)');
200 $actualErrorLogEntries = count($errorLogEntries);
201 if ($actualErrorLogEntries === $this->expectedErrorLogEntries) {
202 $this->assertSame($this->expectedErrorLogEntries, $actualErrorLogEntries);
204 $failureMessage =
'Expected ' . $this->expectedErrorLogEntries .
' entries in sys_log, but got ' . $actualErrorLogEntries . LF;
205 foreach ($errorLogEntries as $entry) {
206 $entryData = unserialize($entry[
'log_data']);
207 $entryMessage = vsprintf($entry[
'details'], $entryData);
208 $failureMessage .=
'* ' . $entryMessage . LF;
210 $this->fail($failureMessage);
220 $allRecords = array();
229 ($hasUidField ?
'uid' :
'')
232 if (!empty($records)) {
233 $allRecords = $records;
245 foreach ($array as $key => $value) {
246 if (is_array($value)) {
249 $elements[] =
"'" . $key .
"' => '" . $value .
"'";
251 return 'array(' . PHP_EOL .
' ' . implode(
', ' . PHP_EOL .
' ', $elements) . PHP_EOL .
')' . PHP_EOL;
262 'fields' => array(
'Fields'),
263 'assertion' => array(
'Assertion'),
264 'record' => array(
'Record'),
267 $linesFromXmlValues = array();
270 foreach ($differentFields as $differentField) {
271 $columns[
'fields'][] = $differentField;
272 $columns[
'assertion'][] = ($assertion[$differentField] === NULL ?
'NULL' : $assertion[$differentField]);
273 $columns[
'record'][] = ($record[$differentField] === NULL ?
'NULL' : $record[$differentField]);
276 foreach ($columns as $columnIndex => $column) {
277 $columnLength = NULL;
278 foreach ($column as $value) {
279 if (strpos($value,
'<?xml') === 0) {
280 $value =
'[see diff]';
282 $valueLength = strlen($value);
283 if (empty($columnLength) || $valueLength > $columnLength) {
284 $columnLength = $valueLength;
287 foreach ($column as $valueIndex => $value) {
288 if (strpos($value,
'<?xml') === 0) {
289 if ($columnIndex ===
'assertion') {
291 $this->assertXmlStringEqualsXmlString((
string)$value, (
string)$record[$columns[
'fields'][$valueIndex]]);
292 }
catch(\PHPUnit_Framework_ExpectationFailedException $e) {
293 $linesFromXmlValues[] =
'Diff for field "' . $columns[
'fields'][$valueIndex] .
'":' . PHP_EOL . $e->getComparisonFailure()->getDiff();
296 $value =
'[see diff]';
298 $lines[$valueIndex][$columnIndex] = str_pad($value, $columnLength,
' ');
302 foreach ($lines as $line) {
303 $result .= implode(
'|', $line) . PHP_EOL;
306 foreach ($linesFromXmlValues as $lineFromXmlValues) {
307 $result .= PHP_EOL . $lineFromXmlValues . PHP_EOL;
319 $differentFields = array();
321 foreach ($assertion as $field => $value) {
322 if (strpos($value,
'\\*') === 0) {
324 } elseif (strpos($value,
'<?xml') === 0) {
326 $this->assertXmlStringEqualsXmlString((
string)$value, (
string)$record[$field]);
327 }
catch (\PHPUnit_Framework_ExpectationFailedException $e) {
328 $differentFields[] = $field;
330 } elseif ($value === NULL && $record[$field] !== $value) {
331 $differentFields[] = $field;
332 } elseif ((
string)$record[$field] !== (
string)$value) {
333 $differentFields[] = $field;
337 return $differentFields;
344 return new \TYPO3\CMS\Core\Tests\Functional\Framework\Constraint\RequestSection\HasRecordConstraint();
351 return new \TYPO3\CMS\Core\Tests\Functional\Framework\Constraint\RequestSection\DoesNotHaveRecordConstraint();
358 return new \TYPO3\CMS\Core\Tests\Functional\Framework\Constraint\RequestSection\StructureHasRecordConstraint();
365 return new \TYPO3\CMS\Core\Tests\Functional\Framework\Constraint\RequestSection\StructureDoesNotHaveRecordConstraint();
importScenarioDataSet($dataSetName)
assertInRecords(array $assertion, array $records)
renderRecords(array $assertion, array $record)
arrayToString(array $array)
$assertionDataSetDirectory
getRequestSectionStructureDoesNotHaveRecordConstraint()
getDifferentFields(array $assertion, array $record)
static makeInstance($className)
getAllRecords($tableName, $hasUidField=FALSE)
getRequestSectionHasRecordConstraint()
getRequestSectionDoesNotHaveRecordConstraint()
$scenarioDataSetDirectory
if($list_of_literals) if(!empty($literals)) if(!empty($literals)) $result
Analyse literals to prepend the N char to them if their contents aren't numeric.
getRequestSectionStructureHasRecordConstraint()
assertAssertionDataSet($dataSetName)
static getFileAbsFileName($filename, $onlyRelative=TRUE, $relToTYPO3_mainDir=FALSE)
$pathsToLinkInTestInstance
const VALUE_BackendUserId