TASK: Improve tests

* Allow phpcbf / diff to be optional, as not all tests are fixable.
* Provide more information in case of error.
* Provide phpunit dist to run phpunit without anything special.

Relates: #46
This commit is contained in:
Daniel Siepmann 2017-04-06 11:14:32 +02:00
parent 7c35998c62
commit b23ee6ef8b
Signed by: Daniel Siepmann
GPG key ID: 33D6629915560EF4
5 changed files with 192 additions and 17 deletions

23
phpunit.xml.dist Normal file
View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false">
<testsuites>
<testsuite name="Project Test Suite">
<directory>./tests/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory>./src/</directory>
</whitelist>
</filter>
</phpunit>

View file

@ -0,0 +1,26 @@
<?php
namespace Typo3Update\Tests;
/*
* Copyright (C) 2017 Daniel Siepmann <coding@daniel-siepmann.de>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
class FileNotFoundException extends \Exception
{
}

View file

@ -0,0 +1,69 @@
{
"files": {
"InputFileForIssues.php": {
"errors": 6,
"messages": [
{
"column": 34,
"fixable": true,
"line": 22,
"message": "Legacy classes are not allowed; found \"Tx_Extbase_Configuration_Configurationmanager\", use \"TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManager\" instead",
"severity": 5,
"source": "Typo3Update.LegacyClassnames.Inheritance.legacyClassname",
"type": "ERROR"
},
{
"column": 91,
"fixable": true,
"line": 22,
"message": "Legacy classes are not allowed; found \"t3lib_Singleton\", use \"TYPO3\\CMS\\Core\\SingletonInterface\" instead",
"severity": 5,
"source": "Typo3Update.LegacyClassnames.Inheritance.legacyClassname",
"type": "ERROR"
},
{
"column": 108,
"fixable": true,
"line": 22,
"message": "Legacy classes are not allowed; found \"Tx_Extbase_Core_BootstrapInterface\", use \"TYPO3\\CMS\\Extbase\\Core\\BootstrapInterface\" instead",
"severity": 5,
"source": "Typo3Update.LegacyClassnames.Inheritance.legacyClassname",
"type": "ERROR"
},
{
"column": 34,
"fixable": true,
"line": 27,
"message": "Legacy classes are not allowed; found \"Tx_Extbase_Configuration_Configurationmanager\", use \"TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManager\" instead",
"severity": 5,
"source": "Typo3Update.LegacyClassnames.Inheritance.legacyClassname",
"type": "ERROR"
},
{
"column": 5,
"fixable": true,
"line": 28,
"message": "Legacy classes are not allowed; found \"t3lib_Singleton\", use \"TYPO3\\CMS\\Core\\SingletonInterface\" instead",
"severity": 5,
"source": "Typo3Update.LegacyClassnames.Inheritance.legacyClassname",
"type": "ERROR"
},
{
"column": 5,
"fixable": true,
"line": 29,
"message": "Legacy classes are not allowed; found \"Tx_Extbase_Core_BootstrapInterface\", use \"TYPO3\\CMS\\Extbase\\Core\\BootstrapInterface\" instead",
"severity": 5,
"source": "Typo3Update.LegacyClassnames.Inheritance.legacyClassname",
"type": "ERROR"
}
],
"warnings": 0
}
},
"totals": {
"errors": 6,
"fixable": 6,
"warnings": 0
}
}

View file

@ -0,0 +1,32 @@
<?php
/*
* Copyright (C) 2017 Daniel Siepmann <coding@daniel-siepmann.de>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
class InputFileForIssues extends Tx_Extbase_Configuration_Configurationmanager implements t3lib_Singleton, Tx_Extbase_Core_BootstrapInterface
{
}
class InputFileForIssues extends Tx_Extbase_Configuration_Configurationmanager implements
t3lib_Singleton,
Tx_Extbase_Core_BootstrapInterface
{
}

View file

@ -66,18 +66,24 @@ class SniffsTest extends TestCase
$this->assertEquals( $this->assertEquals(
$this->getExpectedJsonOutput($folder), $this->getExpectedJsonOutput($folder),
$this->getOutput($folder, 'json')['output'], $this->getOutput($folder, 'json')['output'],
'Sniff ' . $this->getSniffByFolder($folder) 'Checking Sniff "' . $this->getSniffByFolder($folder) . '"'
. ' did not produce expected output for input file ' . ' did not produce expected output for input file '
. $this->getInputFile($folder) . $this->getInputFile($folder)
. ' called: ' . $this->getPhpcsCall($folder, 'json')
); );
try {
$this->assertEquals( $this->assertEquals(
$this->getExpectedDiffOutput($folder), $this->getExpectedDiffOutput($folder),
$this->getOutput($folder, 'diff')['output'], $this->getOutput($folder, 'diff')['output'],
'Sniff ' . $this->getSniffByFolder($folder) 'Fixing Sniff "' . $this->getSniffByFolder($folder) . '"'
. ' did not produce expected diff for input file ' . ' did not produce expected diff for input file '
. $this->getInputFile($folder) . $this->getInputFile($folder)
. ' called: ' . $this->getPhpcsCall($folder, 'diff')
); );
} catch (FileNotFoundException $e) {
// Ok, ignore, we don't have an diff.
}
} }
/** /**
@ -99,10 +105,17 @@ class SniffsTest extends TestCase
* *
* @param SplFileInfo $folder * @param SplFileInfo $folder
* @return string * @return string
*
* @throws FileNotFoundException
*/ */
protected function getExpectedDiffOutput(SplFileInfo $folder) protected function getExpectedDiffOutput(SplFileInfo $folder)
{ {
return file_get_contents($folder->getRealPath() . DIRECTORY_SEPARATOR . 'Expected.diff'); $file = $folder->getRealPath() . DIRECTORY_SEPARATOR . 'Expected.diff';
if (!is_file($file)) {
throw new FileNotFoundException('File does not exist.', 1491469621);
}
return file_get_contents($file);
} }
/** /**
@ -131,6 +144,25 @@ class SniffsTest extends TestCase
return $folder->getRealPath() . DIRECTORY_SEPARATOR . 'InputFileForIssues.php'; return $folder->getRealPath() . DIRECTORY_SEPARATOR . 'InputFileForIssues.php';
} }
/**
* Build cli call for phpcs.
*
* @param SplFileInfo $folder
* @param string $report Defined the report format to use for output.
* @return string
*/
protected function getPhpcsCall(SplFileInfo $folder, $report)
{
$bin = './vendor/bin/phpcs';
$arguments = '--sniffs=' . $this->getSniffByFolder($folder)
. ' --report=' . $report
. ' '
. $this->getInputFile($folder)
;
return $bin . ' ' . $arguments;
}
/** /**
* Executes phpcs for sniff based on $folder and returns the generated output. * Executes phpcs for sniff based on $folder and returns the generated output.
* *
@ -140,16 +172,9 @@ class SniffsTest extends TestCase
*/ */
protected function getOutput(SplFileInfo $folder, $report) protected function getOutput(SplFileInfo $folder, $report)
{ {
$bin = './vendor/bin/phpcs';
$arguments = '--sniffs=' . $this->getSniffByFolder($folder)
. ' --report=' . $report
. ' '
. $this->getInputFile($folder)
;
$output = ''; $output = '';
$returnValue; $returnValue;
exec($this->getPhpcsCall($folder, $report), $output, $returnValue);
exec($bin . ' ' . $arguments, $output, $returnValue);
if ($report === 'json') { if ($report === 'json') {
$output = $this->prepareJsonOutput($output); $output = $this->prepareJsonOutput($output);