We will work on Apr 26th (Saturday) and will be off from Apr 30th (Wednesday) until May 2nd (Friday) for public holiday in our country

Commit 2cde68ad authored by Ivan Chepurnyi's avatar Ivan Chepurnyi

! Initial refactoring of PHPUnit module started to make fixtures and...

! Initial refactoring of PHPUnit module started to make fixtures and expectations re-usable from other kind of test cases, not only EcomDev_PHPUnit_Test_Case
parent 5b0db121
<?php <?php
require 'app/Mage.php';
if (version_compare(PHP_VERSION, '5.3', '<')) {
exit('Magento Unit Tests can be runned only on PHP version over 5.3');
}
if (!Mage::isInstalled()) {
exit('Magento Unit Tests can be runned only on installed version');
}
/* Replace server variables for proper file naming */
$_SERVER['SCRIPT_NAME'] = dirname(__FILE__) . DS . 'index.php';
$_SERVER['SCRIPT_FILENAME'] = dirname(__FILE__) . DS . 'index.php';
Mage::app('admin'); /* @depracated since 0.3.0 */
Mage::getConfig()->init(); require_once 'app/code/community/EcomDev/PHPUnit/Test/bootstrap.php';
class UnitTests extends EcomDev_PHPUnit_Test_Suite class UnitTests extends EcomDev_PHPUnit_Test_Suite
{ {
......
...@@ -110,6 +110,13 @@ class EcomDev_PHPUnit_Model_Fixture ...@@ -110,6 +110,13 @@ class EcomDev_PHPUnit_Model_Fixture
*/ */
protected $_options = array(); protected $_options = array();
/**
* vfsStream wrapper instance
*
* @var EcomDev_PHPUnit_Model_Fixture_Vfs
*/
protected $_vfs = null;
/** /**
* List of scope model aliases by scope type * List of scope model aliases by scope type
* *
...@@ -147,6 +154,8 @@ class EcomDev_PHPUnit_Model_Fixture ...@@ -147,6 +154,8 @@ class EcomDev_PHPUnit_Model_Fixture
protected function _construct() protected function _construct()
{ {
$this->_init('ecomdev_phpunit/fixture'); $this->_init('ecomdev_phpunit/fixture');
// Additional property for test data fixture
$this->setTestData(new Varien_Object());
} }
/** /**
...@@ -582,7 +591,7 @@ class EcomDev_PHPUnit_Model_Fixture ...@@ -582,7 +591,7 @@ class EcomDev_PHPUnit_Model_Fixture
protected function _discardConfigXml() protected function _discardConfigXml()
{ {
if (!isset($this->_fixture['config'])) { if (!isset($this->_fixture['config'])) {
$this->_resetConfig(); $this->_restoreConfig();
} }
return $this; return $this;
} }
...@@ -884,4 +893,69 @@ class EcomDev_PHPUnit_Model_Fixture ...@@ -884,4 +893,69 @@ class EcomDev_PHPUnit_Model_Fixture
return $this; return $this;
} }
/**
* Returns VFS wrapper instance
*
* @return EcomDev_PHPUnit_Model_Fixture_Vfs
* @throws PHPUnit_Framework_SkippedTestError
*/
public function getVfs()
{
if ($this->_vfs !== null) {
return $this->_vfs;
}
if (is_dir(Mage::getBaseDir('lib') . DS . 'vfsStream' . DS . 'main')) {
spl_autoload_register(array($this, 'vfsAutoload'), true, true);
$this->_vfs = Mage::getModel('ecomdev_phpunit/fixture_vfs');
return $this->_vfs;
}
throw new PHPUnit_Framework_SkippedTestError(
'The test was skipped, since vfsStream component is not installed. '
. 'Try install submodules required for this functionality'
);
}
/**
* Autoloader for vfs
*
* @param string $className
* @return bool
*/
public function vfsAutoload($className)
{
if (strpos($className, 'org\\bovigo\\vfs') !== 0) {
return false;
}
$fileName = 'vfsStream' . DS . 'src'
. DS . 'main' . DS . 'php' . DS
. strtr(trim($className, '\\'), '\\', DS) . '.php';
return include $fileName;
}
/**
* Applies VFS structure fixture
*
* @param array $data
* @return EcomDev_PHPUnit_Model_Fixture
*/
protected function _applyVfs($data)
{
$this->getVfs()->apply($data, $this->isScopeLocal());
return $this;
}
/**
* Discards VFS structure fixture
*
* @return EcomDev_PHPUnit_Model_Fixture
*/
protected function _discardVfs()
{
$this->getVfs()->discard();
return $this;
}
} }
...@@ -105,4 +105,11 @@ interface EcomDev_PHPUnit_Model_Fixture_Interface extends EcomDev_PHPUnit_Model_ ...@@ -105,4 +105,11 @@ interface EcomDev_PHPUnit_Model_Fixture_Interface extends EcomDev_PHPUnit_Model_
* @return EcomDev_PHPUnit_Model_Fixture_Interface * @return EcomDev_PHPUnit_Model_Fixture_Interface
*/ */
public function loadForClass($className); public function loadForClass($className);
/**
* Returns VFS wrapper instance
*
* @return EcomDev_PHPUnit_Model_Fixture_Vfs
*/
public function getVfs();
} }
...@@ -28,8 +28,14 @@ require_once 'Spyc/spyc.php'; ...@@ -28,8 +28,14 @@ require_once 'Spyc/spyc.php';
abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase
{ {
const XML_PATH_DEFAULT_FIXTURE_MODEL = 'phpunit/suite/fixture/model'; /**
const XML_PATH_DEFAULT_EXPECTATION_MODEL = 'phpunit/suite/expectation/model'; * @deprecated since 0.3.0
**/
const XML_PATH_DEFAULT_FIXTURE_MODEL = EcomDev_PHPUnit_Test_Case_Util::XML_PATH_DEFAULT_FIXTURE_MODEL;
/**
* @deprecated since 0.3.0
**/
const XML_PATH_DEFAULT_EXPECTATION_MODEL = EcomDev_PHPUnit_Test_Case_Util::XML_PATH_DEFAULT_EXPECTATION_MODEL;
/** /**
...@@ -63,7 +69,7 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase ...@@ -63,7 +69,7 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase
*/ */
public static function app() public static function app()
{ {
return Mage::app(); return EcomDev_PHPUnit_Test_Case_Util::app();
} }
/** /**
...@@ -252,10 +258,11 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase ...@@ -252,10 +258,11 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase
* *
* @return string * @return string
* @throws RuntimeException if module name was not found for the passed class name * @throws RuntimeException if module name was not found for the passed class name
* @deprecated since 0.3.0
*/ */
public function getModuleName() public function getModuleName()
{ {
return $this->app()->getModuleNameByClassName($this); return EcomDev_PHPUnit_Test_Case_Util::getModuleName($this);
} }
/** /**
...@@ -266,14 +273,7 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase ...@@ -266,14 +273,7 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase
*/ */
protected static function getModuleNameFromCallStack() protected static function getModuleNameFromCallStack()
{ {
$backTrace = debug_backtrace(true); return EcomDev_PHPUnit_Test_Case_Util::getModuleNameFromCallStack();
foreach ($backTrace as $call) {
if (isset($call['object']) && $call['object'] instanceof EcomDev_PHPUnit_Test_Case) {
return $call['object']->getModuleName();
}
}
throw new RuntimeException('Unable to retrieve module name from call stack, because assertion is not called from EcomDev_PHPUnit_Test_Case based class method');
} }
...@@ -284,10 +284,11 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase ...@@ -284,10 +284,11 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase
* @param string $name * @param string $name
* @param array|string $sources * @param array|string $sources
* @return array * @return array
* @deprecated since 0.3.0
*/ */
public function getAnnotationByName($name, $sources = 'method') public function getAnnotationByName($name, $sources = 'method')
{ {
return self::getAnnotationByNameFromClass(get_class($this), $name, $sources, $this->getName(false)); return EcomDev_PHPUnit_Test_Case_Util::getAnnotationByNameFromClass(get_class($this), $name, $sources, $this->getName(false));
} }
/** /**
...@@ -297,30 +298,12 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase ...@@ -297,30 +298,12 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase
* @param string $name annotation name * @param string $name annotation name
* @param array|string $sources * @param array|string $sources
* @param string $testName test method name * @param string $testName test method name
* @return array
* @deprecated since 0.3.0
*/ */
public static function getAnnotationByNameFromClass($className, $name, $sources = 'class', $testName = '') public static function getAnnotationByNameFromClass($className, $name, $sources = 'class', $testName = '')
{ {
if (is_string($sources)) { return EcomDev_PHPUnit_Test_Case_Util::getAnnotationByNameFromClass($className, $name, $sources, $testName);
$sources = array($sources);
}
$allAnnotations = PHPUnit_Util_Test::parseTestMethodAnnotations(
$className, $testName
);
$annotation = array();
// Walkthrough sources for annotation retrieval
foreach ($sources as $source) {
if (isset($allAnnotations[$source][$name])) {
$annotation = array_merge(
$allAnnotations[$source][$name],
$annotation
);
}
}
return $annotation;
} }
/** /**
...@@ -691,12 +674,7 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase ...@@ -691,12 +674,7 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase
*/ */
protected function getExpectation() protected function getExpectation()
{ {
return Mage::getSingleton( return EcomDev_PHPUnit_Test_Case_Util::getExpectation(get_class($this));
self::getLoadableClassAlias(
'expectation',
self::XML_PATH_DEFAULT_EXPECTATION_MODEL
)
);
} }
...@@ -707,21 +685,11 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase ...@@ -707,21 +685,11 @@ abstract class EcomDev_PHPUnit_Test_Case extends PHPUnit_Framework_TestCase
* @param string $type * @param string $type
* @param string $configPath * @param string $configPath
* @return string * @return string
* @deprecated since 0.3.0
*/ */
protected static function getLoadableClassAlias($type, $configPath) protected static function getLoadableClassAlias($type, $configPath)
{ {
$annotationValue = self::getAnnotationByNameFromClass( return EcomDev_PHPUnit_Test_Case::getLoadableClassAlias(get_called_class(), $type, $configPath);
get_called_class(),
$type .'Model'
);
if (current($annotationValue)) {
$classAlias = current($annotationValue);
} else {
$classAlias = (string) self::app()->getConfig()->getNode($configPath);
}
return $classAlias;
} }
/** /**
......
<?php
class EcomDev_PHPUnit_Test_Case_Util
{
const XML_PATH_DEFAULT_FIXTURE_MODEL = 'phpunit/suite/fixture/model';
const XML_PATH_DEFAULT_EXPECTATION_MODEL = 'phpunit/suite/expectation/model';
/**
* Returns app for test case, created for type hinting
* in the test case code
*
* @return EcomDev_PHPUnit_Model_App
*/
public static function app()
{
return Mage::app();
}
/**
* Retrieves the module name for current test case
*
* @param PHPUnit_Framework_TestCase $testCase
* @return string
* @throws RuntimeException if module name was not found for the passed class name
*/
public static function getModuleName(PHPUnit_Framework_TestCase $testCase)
{
return self::app()->getModuleNameByClassName($testCase);
}
/**
* Retrieves module name from call stack objects
*
* @return string
* @throws RuntimeException if assertion is called in not from EcomDev_PHPUnit_Test_Case
*/
public static function getModuleNameFromCallStack()
{
$backTrace = debug_backtrace(true);
foreach ($backTrace as $call) {
if (isset($call['object']) && $call['object'] instanceof PHPUnit_Framework_TestCase) {
return self::getModuleName($call['object']);
}
}
throw new RuntimeException('Unable to retrieve module name from call stack, because assertion is not called from EcomDev_PHPUnit_Test_Case based class method');
}
/**
* Retrieves annotation by its name from different sources (class, method) based on meta information
*
* @param string $className
* @param string $name annotation name
* @param array|string $sources
* @param string $testName test method name
* @return array
*/
public static function getAnnotationByNameFromClass($className, $name, $sources = 'class', $testName = '')
{
if (is_string($sources)) {
$sources = array($sources);
}
$allAnnotations = PHPUnit_Util_Test::parseTestMethodAnnotations(
$className, $testName
);
$annotation = array();
// Walk-through sources for annotation retrieval
foreach ($sources as $source) {
if (isset($allAnnotations[$source][$name])) {
$annotation = array_merge(
$allAnnotations[$source][$name],
$annotation
);
}
}
return $annotation;
}
/**
* Retrieves loadable class alias from annotation or configuration node
* E.g. class alias for fixture model can be specified via @fixtureModel annotation
*
* @param string $className
* @param string $type
* @param string $configPath
* @return string
*/
protected static function getLoadableClassAlias($className, $type, $configPath)
{
$annotationValue = self::getAnnotationByNameFromClass(
$className,
$type .'Model'
);
if (current($annotationValue)) {
$classAlias = current($annotationValue);
} else {
$classAlias = (string) self::app()->getConfig()->getNode($configPath);
}
return $classAlias;
}
/**
* Returns expectation model singleton
*
* @param string $testCaseClassName
* @return EcomDev_PHPUnit_Model_Expectation
*/
public static function getExpectation($testCaseClassName)
{
return Mage::getSingleton(
self::getLoadableClassAlias(
$testCaseClassName,
'expectation',
self::XML_PATH_DEFAULT_EXPECTATION_MODEL
)
);
}
/**
*
* @param PHPUnit_Framework_TestCase $testCase
*
*/
public static function loadExpectation(PHPUnit_Framework_TestCase $testCase)
{
}
/**
* Retrieves fixture model singleton
*
* @param string $testCaseClassName
* @return EcomDev_PHPUnit_Model_Fixture
* @throws RuntimeException
*/
public static function getFixture($testCaseClassName)
{
$fixture = Mage::getSingleton(
self::getLoadableClassAlias(
$testCaseClassName,
'fixture',
self::XML_PATH_DEFAULT_FIXTURE_MODEL
)
);
if (!$fixture instanceof EcomDev_PHPUnit_Model_Fixture_Interface) {
throw new RuntimeException('Fixture model should implement EcomDev_PHPUnit_Model_Fixture_Interface interface');
}
$storage = Mage::registry(EcomDev_PHPUnit_Model_App::REGISTRY_PATH_SHARED_STORAGE);
if (!$storage instanceof Varien_Object) {
throw new RuntimeException('Fixture storage object was not initialized during test application setup');
}
$fixture->setStorage(
Mage::registry(EcomDev_PHPUnit_Model_App::REGISTRY_PATH_SHARED_STORAGE)
);
return $fixture;
}
}
\ No newline at end of file
<?php
class EcomDev_PHPUnit_Test_Listener implements PHPUnit_Framework_TestListener
{
const XML_PATH_UNIT_TEST_APP = 'phpunit/suite/app/class';
/**
* First level test suite that is used
* for running all the tests
*
* @var PHPUnit_Framework_TestSuite
*/
protected $firstLevelTestSuite = null;
/**
* Returns app reflection instance
*
* @return ReflectionClass|ReflectionObject
*/
protected function getAppReflection()
{
$appClass = (string) Mage::getConfig()->getNode(self::XML_PATH_UNIT_TEST_APP);
$reflectionClass = EcomDev_Utils_Reflection::getRelflection($appClass);
return $reflectionClass;
}
/**
* A test suite started.
*
* @param PHPUnit_Framework_TestSuite $suite
*/
public function startTestSuite(PHPUnit_Framework_TestSuite $suite)
{
if ($this->firstLevelTestSuite === null) {
// Apply app substitution for tests
if ($this->getAppReflection()->hasMethod('applyTestScope')) {
$this->getAppReflection()->getMethod('applyTestScope')->invoke(null);
}
$this->firstLevelTestSuite = $suite;
}
if (EcomDev_Utils_Reflection::getRestrictedPropertyValue($suite, 'testCase')) {
}
}
/**
* A test suite ended.
*
* @param PHPUnit_Framework_TestSuite $suite
*/
public function endTestSuite(PHPUnit_Framework_TestSuite $suite)
{
if ($this->firstLevelTestSuite === $suite) {
$this->firstLevelTestSuite = null;
// Discard test scope app
if ($this->getAppReflection()->hasMethod('discardTestScope')) {
$this->getAppReflection()->getMethod('discardTestScope')->invoke(null);
}
}
}
/**
* A test started.
*
* @param PHPUnit_Framework_Test $test
*/
public function startTest(PHPUnit_Framework_Test $test)
{
// No action is required for now
}
/**
* A test ended.
*
* @param PHPUnit_Framework_Test $test
* @param float $time
*/
public function endTest(PHPUnit_Framework_Test $test, $time)
{
// No action is required for now
}
/**
* An error occurred.
*
* @param PHPUnit_Framework_Test $test
* @param Exception $e
* @param float $time
*/
public function addError(PHPUnit_Framework_Test $test, Exception $e, $time)
{
// No action is required
}
/**
* A failure occurred.
*
* @param PHPUnit_Framework_Test $test
* @param PHPUnit_Framework_AssertionFailedError $e
* @param float $time
*/
public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time)
{
// No action is required
}
/**
* Incomplete test.
*
* @param PHPUnit_Framework_Test $test
* @param Exception $e
* @param float $time
*/
public function addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e, $time)
{
// No action is required
}
/**
* Skipped test.
*
* @param PHPUnit_Framework_Test $test
* @param Exception $e
* @param float $time
*
* @since Method available since Release 3.0.0
*/
public function addSkippedTest(PHPUnit_Framework_Test $test, Exception $e, $time)
{
// No action is required
}
}
\ No newline at end of file
...@@ -38,15 +38,11 @@ class EcomDev_PHPUnit_Test_Suite extends PHPUnit_Framework_TestSuite ...@@ -38,15 +38,11 @@ class EcomDev_PHPUnit_Test_Suite extends PHPUnit_Framework_TestSuite
* Setting up test scope for Magento * Setting up test scope for Magento
* (non-PHPdoc) * (non-PHPdoc)
* @see PHPUnit_Framework_TestSuite::setUp() * @see PHPUnit_Framework_TestSuite::setUp()
* @deprecated since 0.3.0
*/ */
protected function setUp() protected function setUp()
{ {
$appClass = (string) Mage::getConfig()->getNode(self::XML_PATH_UNIT_TEST_APP);
$reflectionClass = EcomDev_Utils_Reflection::getRelflection($appClass);
if ($reflectionClass->hasMethod('applyTestScope')) {
$reflectionClass->getMethod('applyTestScope')->invoke(null);
}
} }
/** /**
...@@ -56,12 +52,7 @@ class EcomDev_PHPUnit_Test_Suite extends PHPUnit_Framework_TestSuite ...@@ -56,12 +52,7 @@ class EcomDev_PHPUnit_Test_Suite extends PHPUnit_Framework_TestSuite
*/ */
protected function tearDown() protected function tearDown()
{ {
$appClass = (string) Mage::getConfig()->getNode(self::XML_PATH_UNIT_TEST_APP);
$reflectionClass = EcomDev_Utils_Reflection::getRelflection($appClass);
if ($reflectionClass->hasMethod('discardTestScope')) {
$reflectionClass->getMethod('discardTestScope')->invoke(null);
}
} }
/** /**
......
<?php
if (version_compare(PHP_VERSION, '5.3', '<')) {
exit('Magento Unit Tests can run only on PHP version higher then 5.3');
}
$fileDir = dirname(__FILE__);
// Include Mage file by detecting app root
require_once substr($fileDir, 0, strpos($fileDir, 'app' . DIRECTORY_SEPARATOR)) . 'app/Mage.php';
if (!Mage::isInstalled()) {
exit('Magento Unit Tests can run only on installed version');
}
/* Replace server variables for proper file naming */
$_SERVER['SCRIPT_NAME'] = dirname(__FILE__) . DS . 'index.php';
$_SERVER['SCRIPT_FILENAME'] = dirname(__FILE__) . DS . 'index.php';
Mage::app('admin');
Mage::getConfig()->init();
...@@ -5,17 +5,13 @@ app/code/community/EcomDev/PHPUnit app/code/community/EcomDev/PHPUnit ...@@ -5,17 +5,13 @@ app/code/community/EcomDev/PHPUnit app/code/community/EcomDev/PHPUnit
lib/EcomDev/PHPUnit lib/EcomDev/PHPUnit lib/EcomDev/PHPUnit lib/EcomDev/PHPUnit
lib/EcomDev/Utils lib/EcomDev/Utils lib/EcomDev/Utils lib/EcomDev/Utils
lib/Spyc lib/Spyc lib/Spyc lib/Spyc
lib/vfsStream lib/vfsStream
shell/ecomdev-phpunit-install.php shell/ecomdev-phpunit-install.php
# Copy local.xml.phpunit if it doesn't already exist # Copy local.xml.phpunit if it doesn't already exist
@shell \ @shell \
LOCALXML=app/etc/local.xml.phpunit; \ DIR_BEFORE_INSTALL=`pwd` \
if [ ! -f $PROJECT/$LOCALXML ]; then \ cd $PROJECT/shell \
cp $MODULE/$LOCALXML $PROJECT/$LOCALXML; \ php -f ecomdev-phpunit-install.php --module $MODULE --project $PROJECT \
fi cd $DIR_BEFORE_INSTALL
# Copy phpunit.xml if it doesn't already exist
@shell \
PHPUNITXML=phpunit.xml.dist; \
if [ ! -f $PROJECT/$LOCALXML ]; then \
cp $MODULE/$PHPUNITXML $PROJECT/$PHPUNITXML; \
fi
...@@ -10,12 +10,10 @@ ...@@ -10,12 +10,10 @@
stopOnIncomplete="false" stopOnIncomplete="false"
stopOnSkipped="false" stopOnSkipped="false"
strict="false" strict="false"
verbose="false"> verbose="false"
<testsuites> bootstrap="app/code/community/EcomDev/PHPUnit/Test/bootstrap.php"
<testsuite name="Magento Unit Tests"> loader=""
<file>UnitTests.php</file> >
</testsuite>
</testsuites>
<filter> <filter>
<blacklist> <blacklist>
<!-- Exclude Magento Core files from code coverage --> <!-- Exclude Magento Core files from code coverage -->
......
<?php
/**
* PHP Unit test suite for Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
*
* @category EcomDev
* @package EcomDev_PHPUnit
* @copyright Copyright (c) 2012 EcomDev BV (http://www.ecomdev.org)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* @author Ivan Chepurnyi <ivan.chepurnyi@ecomdev.org>
*/
require_once 'abstract.php';
/**
* Shell script for autoinstalling of required files for phpunit extension
*
*
*/
class EcomDev_PHPUnit_Install extends Mage_Shell_Abstract
{
const FILE_LOCAL_XML = 'app/etc/local.xml.phpunit';
const FILE_PHPUNIT_XML = 'phpunit.xml.dist';
const OLD_FILE_MATCH = '/\\<file\\>UnitTests.php\\<\\/file\\>/';
/**
* This script doesn't need initialization of Magento
*
* @var bool
*/
protected $_includeMage = false;
/**
* Runs scripts itself
*/
public function run()
{
if (!$this->getArg('module') || !$this->getArg('project')) {
die($this->usageHelp());
}
$this->_copyLocalXml();
$this->_copyPHPUnitXml();
}
/**
* Copies local XML file from phpunit extension folder
*
*/
protected function _copyLocalXml()
{
if (!file_exists($this->getArg('project') . DIRECTORY_SEPARATOR . self::FILE_LOCAL_XML)) {
copy($this->getArg('module') . DIRECTORY_SEPARATOR . self::FILE_LOCAL_XML,
$this->getArg('project') . DIRECTORY_SEPARATOR . self::FILE_PHPUNIT_XML);
}
}
/**
* Checks existence of phpunit.xml.dist file, if file is outdated,
* it just replaces the content of it.
*
*/
protected function _copyPHPUnitXml()
{
if (!file_exists($this->getArg('project') . DIRECTORY_SEPARATOR . self::FILE_PHPUNIT_XML)
|| preg_match(self::OLD_FILE_MATCH,
file_get_contents($this->getArg('project') . DIRECTORY_SEPARATOR . self::FILE_PHPUNIT_XML))) {
copy($this->getArg('module') . DIRECTORY_SEPARATOR . self::FILE_PHPUNIT_XML,
$this->getArg('project') . DIRECTORY_SEPARATOR . self::FILE_PHPUNIT_XML);
}
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment