Commit 20b9f742 authored by Ivan Chepurnyi's avatar Ivan Chepurnyi

Merge branch 'feature/fix-constraints' into dev

parents 07d89667 051a6efd
<?php
class EcomDev_PHPUnitTest_Test_Lib_Constraint_Abstract extends PHPUnit_Framework_TestCase
{
/**
* Test compare values functionality for constraint
*
* @param mixed $expectedValue
* @param mixed $actualValue
* @param bool $expectedResult
*
* @dataProvider dataProviderForCompareValues
*/
public function testCompareValues($expectedValue, $actualValue, $expectedResult)
{
/**
* @var $constraint EcomDev_PHPUnit_Constraint_Abstract
*/
$constraint = $this->getMockForAbstractClass('EcomDev_PHPUnit_Constraint_Abstract', array(), '', false);
$this->assertSame(
$expectedResult,
$constraint->compareValues($expectedValue, $actualValue)
);
if (!$expectedResult) {
$this->assertAttributeInstanceOf('PHPUnit_Framework_ComparisonFailure', '_comparisonFailure', $constraint);
}
}
/**
* Data provider for checking compare values functionality
*
* @return array
*/
public function dataProviderForCompareValues()
{
return array(
array(
array('value1', 'value2', 'value3'),
array('value1', 'value2', 'value3'),
true
),
array(
array('value1', 'value2', 'value3'),
array('value1', 'value1', 'value3'),
false
),
array(
array('value1', 0, 'value3'),
array('value1', 'value1', 'value3'),
false
),
array(
'1',
1,
true
),
array(
'0',
0,
true
),
array(
'1',
0,
false
),
array(
'',
0,
false
)
);
}
}
\ No newline at end of file
<?php
class EcomDev_PHPUnitTest_Test_Lib_Constraint_Config_Node extends EcomDev_PHPUnit_Test_Case
{
/**
* Creates constraint instance
*
* @param $nodePath
* @param $type
* @param $value
*
* @return EcomDev_PHPUnit_Constraint_Config_Node
*/
protected function _getConstraint($nodePath, $type, $value)
{
return new EcomDev_PHPUnit_Constraint_Config_Node($nodePath, $type, $value);
}
/**
* Test constructor of the node,
*
* @param mixed $expectedValue
* @param string $type
*
* @dataProvider dataProvider
*/
public function testConstructorAccepts($expectedValue, $type)
{
$constraint = $this->_getConstraint('some/dummy/path', $type, $expectedValue);
$this->assertAttributeEquals($expectedValue, '_expectedValue', $constraint);
}
/**
* Tests that particular value equals xml
*
* @param string $actualValue
* @param string $expectedValue
* @dataProvider dataProvider
*/
public function testEqualsXml($actualValue, $expectedValue)
{
$actualValue = new SimpleXMLElement($actualValue);
$expectedValue = new SimpleXMLElement($expectedValue);
$constraint = $this->_getConstraint(
'some/dummy/path',
EcomDev_PHPUnit_Constraint_Config_Node::TYPE_EQUALS_XML,
$expectedValue
);
$this->assertTrue($constraint->evaluate($actualValue, '', true));
$this->assertAttributeEmpty('_comparisonFailure', $constraint);
}
/**
* Tests that particular value equals xml
*
* @param string $actualValue
* @param string $expectedValue
* @dataProvider dataProvider
*/
public function testEqualsXmlFailure($actualValue, $expectedValue)
{
$actualValue = new SimpleXMLElement($actualValue);
$expectedValue = new SimpleXMLElement($expectedValue);
$constraint = $this->_getConstraint(
'some/dummy/path',
EcomDev_PHPUnit_Constraint_Config_Node::TYPE_EQUALS_XML,
$expectedValue
);
$this->assertFalse($constraint->evaluate($actualValue, '', true));
$this->assertAttributeNotEmpty('_comparisonFailure', $constraint);
$this->assertAttributeInstanceOf('PHPUnit_Framework_ComparisonFailure', '_comparisonFailure', $constraint);
}
}
\ No newline at end of file
-
- 1
- equals_string
-
- '0'
- equals_string
-
- 0.01
- equals_string
-
- "0.01"
- equals_decimal
-
- "0"
- equals_decimal
-
- "100.0123"
- equals_decimal
-
actual: |
<config>
<value>1</value>
<value>2</value>
</config>
expected: |
<config>
<value>1</value>
<value>2</value>
</config>
-
actual: |
<config>
<value>1</value>
<value>2</value>
</config>
expected: |
<config>
<value>1</value>
<value>2</value>
</config>
-
actual: |
<config>
<value>1</value>
<value>2</value>
<more_nested><value>1</value><value>2</value></more_nested>
</config>
expected: |
<config>
<value>1</value>
<value>2</value>
<more_nested>
<value>1</value>
<value>2</value>
</more_nested>
</config>
\ No newline at end of file
-
actual: |
<config>
<value>1</value>
<value>2</value>
</config>
expected: |
<config>
<value>2</value>
<value>3</value>
</config>
-
actual: |
<config>
<value>1</value>
<value>2</value>
<more_nested>
<value>1</value>
<value>2</value>
</more_nested>
</config>
expected: |
<config>
<value>1</value>
<value>2</value>
<more_nested>
<value>1</value>
<value>1</value>
</more_nested>
</config>
\ No newline at end of file
<?php
/**
* A test case for testing script assertions
*
* @loadSharedFixture files
*/
class EcomDev_PHPUnitTest_Test_Lib_Constraint_Config_Resource_Script extends EcomDev_PHPUnit_Test_Case
{
/**
* @var EcomDev_PHPUnit_Constraint_Config_Resource_Script
*/
protected $constraint = null;
protected function setUp()
{
$this->constraint = $this->getMockBuilder('EcomDev_PHPUnit_Constraint_Config_Resource_Script')
->disableOriginalConstructor()
->setMethods(null)
->getMock();
}
/**
* Returns path within vfs stream
*
* @param string[]|string $directories
* @return string[]|string
*/
protected function getVirtualPath($directories)
{
if (!is_array($directories)) {
$directories = array($directories);
}
$virtualPath = array();
foreach ($directories as $directory) {
$virtualPath[] = $this->getFixture()->getVfs()->url($directory);
}
if (count($virtualPath) === 1) {
$virtualPath = current($virtualPath);
}
return $virtualPath;
}
/**
*
* @param $directory
* @dataProvider dataProvider
*/
public function testParseVersions($directories)
{
$virtualPath = $this->getVirtualPath($directories);
$result = EcomDev_Utils_Reflection::invokeRestrictedMethod($this->constraint, 'parseVersions', array($virtualPath));
$this->assertEquals($this->expected('auto')->getVersions(), $result);
}
/**
* Test version
*
* @param string[]|string $directories
* @param string $type
* @param string $from
* @param string $to
*
* @return void
* @dataProvider dataProvider
*/
public function testGetVersionScriptsDiff($directories, $type, $from, $to)
{
$virtualPath = $this->getVirtualPath($directories);
$versions = EcomDev_Utils_Reflection::invokeRestrictedMethod($this->constraint, 'parseVersions', array(
$virtualPath
));
$result = EcomDev_Utils_Reflection::invokeRestrictedMethod($this->constraint, 'getVersionScriptsDiff', array(
$versions[$type], $from, $to, $type === 'data' ? 'data-' : ''
));
$this->assertEquals($this->expected('auto')->getDiff(), $result);
}
}
\ No newline at end of file
from_1.0.0_to_1.0.1_one:
diff:
expected:
- install-1.0.0.php
- upgrade-1.0.0-1.0.1.php
actual:
- install-1.0.0.php
- upgrade-1.0.0-1.0.1.php
from_1.0.0_to_1.0.5_one:
diff:
expected:
- install-1.0.0.php
- upgrade-1.0.0-1.0.1.php
- upgrade-1.0.1-1.0.5.php
actual:
- install-1.0.0.php
- upgrade-1.0.0-1.0.1.php
to_1.0.5_one:
diff:
expected:
- install-1.0.0.php
- upgrade-1.0.0-1.0.1.php
- upgrade-1.0.1-1.0.5.php
actual:
- install-1.0.0.php
- upgrade-1.0.0-1.0.1.php
from_1.0.0_one:
diff:
expected:
- install-1.0.0.php
- upgrade-1.0.0-1.0.1.php
actual:
- install-1.0.0.php
- upgrade-1.0.0-1.0.1.php
from_1.0.0_to_1.0.1_one_invalid:
diff:
expected:
- install-1.0.0.php
- upgrade-1.0.0-1.0.1.php
actual:
- upgrade-1.0.0-1.0.1.php
from_1.0.0_to_1.0.5_one_invalid:
diff:
expected:
- install-1.0.0.php
- upgrade-1.0.0-1.0.1.php
- upgrade-1.0.1-1.0.5.php
actual:
- upgrade-1.0.0-1.0.1.php
from_1.0.0_one_invalid:
diff:
expected:
- install-1.0.0.php
- upgrade-1.0.0-1.0.1.php
actual:
- upgrade-1.0.0-1.0.1.php
to_1.0.5_one_invalid:
diff:
expected:
- install-1.0.0.php
- upgrade-1.0.0-1.0.1.php
- upgrade-1.0.1-1.0.5.php
actual:
- upgrade-1.0.0-1.0.1.php
\ No newline at end of file
directory_one_valid:
versions:
scheme:
install:
- filename: install-1.0.0.php
prefix: install
from: 1.0.0
to: null
- filename: mysql4-install-0.8.0.php
prefix: mysql4-install
from: 0.8.0
to: null
upgrade:
- filename: upgrade-1.0.0-1.0.1.php
prefix: upgrade
from: 1.0.0
to: 1.0.1
- filename: mysql4-upgrade-0.8.0-0.8.1.php
prefix: mysql4-upgrade
from: 0.8.0
to: 0.8.1
data:
install: []
upgrade: []
directory_two_valid:
versions:
scheme:
install:
- filename: install-1.0.0.php
prefix: install
from: 1.0.0
to: null
- filename: mysql4-install-0.8.0.php
prefix: mysql4-install
from: 0.8.0
to: null
upgrade:
- filename: upgrade-1.0.0-1.0.1.php
prefix: upgrade
from: 1.0.0
to: 1.0.1
- filename: upgrade-1.0.1-1.0.2.php
prefix: upgrade
from: 1.0.1
to: 1.0.2
- filename: upgrade-1.0.2-1.0.3.php
prefix: upgrade
from: 1.0.2
to: 1.0.3
- filename: upgrade-1.0.3-1.0.4.php
prefix: upgrade
from: 1.0.3
to: 1.0.4
- filename: mysql4-upgrade-0.8.0-0.8.1.php
prefix: mysql4-upgrade
from: 0.8.0
to: 0.8.1
- filename: mysql4-upgrade-0.8.1-0.8.2.php
prefix: mysql4-upgrade
from: 0.8.1
to: 0.8.2
- filename: mysql4-upgrade-0.8.2-0.8.3.php
prefix: mysql4-upgrade
from: 0.8.2
to: 0.8.3
- filename: mysql4-upgrade-0.8.3-0.8.4.php
prefix: mysql4-upgrade
from: 0.8.3
to: 0.8.4
data:
install: []
upgrade: []
directory_one_data_scheme_valid:
versions:
scheme:
install:
- filename: install-1.0.0.php
prefix: install
from: 1.0.0
to: null
upgrade:
- filename: upgrade-1.0.0-1.0.1.php
prefix: upgrade
from: 1.0.0
to: 1.0.1
- filename: upgrade-1.0.1-1.0.2.php
prefix: upgrade
from: 1.0.1
to: 1.0.2
- filename: upgrade-1.0.2-1.0.3.php
prefix: upgrade
from: 1.0.2
to: 1.0.3
- filename: upgrade-1.0.3-1.0.4.php
prefix: upgrade
from: 1.0.3
to: 1.0.4
data:
install:
- filename: data-install-1.0.0.php
prefix: data-install
from: 1.0.0
to: null
upgrade:
- filename: data-upgrade-1.0.0-1.0.1.php
prefix: data-upgrade
from: 1.0.0
to: 1.0.1
- filename: data-upgrade-1.0.1-1.0.2.php
prefix: data-upgrade
from: 1.0.1
to: 1.0.2
- filename: data-upgrade-1.0.2-1.0.3.php
prefix: data-upgrade
from: 1.0.2
to: 1.0.3
- filename: data-upgrade-1.0.3-1.0.4.php
prefix: data-upgrade
from: 1.0.3
to: 1.0.4
directory_one_invalid:
versions:
scheme:
install: []
upgrade:
- filename: upgrade-1.0.0-1.0.1.php
prefix: upgrade
from: 1.0.0
to: 1.0.1
data:
install: []
upgrade: []
directory_two_invalid:
versions:
scheme:
install:
- filename: install-1.0.0.php
prefix: install
from: 1.0.0
to: null
upgrade:
- filename: upgrade-1.0.1-1.0.2.php
prefix: upgrade
from: 1.0.1
to: 1.0.2
- filename: upgrade-1.0.2-1.0.3.php
prefix: upgrade
from: 1.0.2
to: 1.0.3
- filename: upgrade-1.0.3-1.0.4.php
prefix: upgrade
from: 1.0.3
to: 1.0.4
data:
install: []
upgrade: []
directory_one_data_scheme_invalid:
versions:
scheme:
install:
- filename: install-1.0.0.php
prefix: install
from: 1.0.0
to: null
upgrade:
- filename: upgrade-1.0.0-1.0.1.php
prefix: upgrade
from: 1.0.0
to: 1.0.1
- filename: upgrade-1.0.1-1.0.2.php
prefix: upgrade
from: 1.0.1
to: 1.0.2
- filename: upgrade-1.0.2-1.0.3.php
prefix: upgrade
from: 1.0.2
to: 1.0.3
- filename: upgrade-1.0.3-1.0.4.php
prefix: upgrade
from: 1.0.3
to: 1.0.4
data:
install:
- filename: data-install-1.0.0.php
prefix: data-install
from: 1.0.0
to: null
upgrade:
- filename: data-upgrade-1.0.1-1.0.2.php
prefix: data-upgrade
from: 1.0.1
to: 1.0.2
- filename: data-upgrade-1.0.2-1.0.3.php
prefix: data-upgrade
from: 1.0.2
to: 1.0.3
- filename: data-upgrade-1.0.3-1.0.4.php
prefix: data-upgrade
from: 1.0.3
to: 1.0.4
\ No newline at end of file
vfs:
directory_one_valid:
install-1.0.0.php: <?php // file
upgrade-1.0.0-1.0.1.php: <?php // file
mysql4-install-0.8.0.php: <?php // file
mysql4-upgrade-0.8.0-0.8.1.php: <?php // file
directory_two_valid:
install-1.0.0.php: <?php // file
upgrade-1.0.0-1.0.1.php: <?php // file
upgrade-1.0.1-1.0.2.php: <?php // file
upgrade-1.0.2-1.0.3.php: <?php // file
upgrade-1.0.3-1.0.4.php: <?php // file
mysql4-install-0.8.0.php: <?php // file
mysql4-upgrade-0.8.0-0.8.1.php: <?php // file
mysql4-upgrade-0.8.1-0.8.2.php: <?php // file
mysql4-upgrade-0.8.2-0.8.3.php: <?php // file
mysql4-upgrade-0.8.3-0.8.4.php: <?php // file
directory_one_data_valid:
data-install-1.0.0.php: <?php // file
data-upgrade-1.0.0-1.0.1.php: <?php // file
data-upgrade-1.0.1-1.0.2.php: <?php // file
data-upgrade-1.0.2-1.0.3.php: <?php // file
data-upgrade-1.0.3-1.0.4.php: <?php // file
directory_one_scheme_valid:
install-1.0.0.php: <?php // file
upgrade-1.0.0-1.0.1.php: <?php // file
upgrade-1.0.1-1.0.2.php: <?php // file
upgrade-1.0.2-1.0.3.php: <?php // file
upgrade-1.0.3-1.0.4.php: <?php // file
directory_one_invalid:
instal-1.0.0.php: <?php // file # error in install script file name
upgrade-1.0.0-1.0.1.php: <?php // file
directory_two_invalid:
install-1.0.0.php: <?php // file
update-1.0.0-1.0.1.php: <?php // file # error in upgrade script file name
upgrade-1.0.1-1.0.2.php: <?php // file
upgrade-1.0.2-1.0.3.php: <?php // file
upgrade-1.0.3-1.0.4.php: <?php // file
directory_one_data_invalid:
data-install-1.0.0.php: <?php // file
data-upgade-1.0.0-1.0.1.php: <?php // file # error in the filename
data-upgrade-1.0.1-1.0.2.php: <?php // file
data-upgrade-1.0.2-1.0.3.php: <?php // file
data-upgrade-1.0.3-1.0.4.php: <?php // file
\ No newline at end of file
from_1.0.0_to_1.0.1_one:
- directory_one_valid
- scheme
- 1.0.0
- 1.0.1
from_1.0.0_to_1.0.5_one:
- directory_one_valid
- scheme
- 1.0.0
- 1.0.5
to_1.0.5_one:
- directory_one_valid
- scheme
- null
- 1.0.5
from_1.0.0_one:
- directory_one_valid
- scheme
- 1.0.0
- null
from_1.0.0_to_1.0.1_one_invalid:
- directory_one_invalid
- scheme
- 1.0.0
- 1.0.1
from_1.0.0_to_1.0.5_one_invalid:
- directory_one_invalid
- scheme
- 1.0.0
- 1.0.5
from_1.0.0_one_invalid:
- directory_one_invalid
- scheme
- 1.0.0
- null
to_1.0.5_one_invalid:
- directory_one_invalid
- scheme
- null
- 1.0.5
directory_one_valid:
- directory_one_valid
directory_two_valid:
- directory_two_valid
directory_one_data_scheme_valid:
-
- directory_one_data_valid
- directory_one_scheme_valid
directory_one_invalid:
- directory_one_invalid
directory_two_invalid:
- directory_two_invalid
directory_one_data_scheme_invalid:
-
- directory_one_data_invalid
- directory_one_scheme_valid
\ No newline at end of file
<config>
<phpunit>
<suite>
<modules>
<EcomDev_PHPUnitTest />
</modules>
<groups>
<lib>Lib</lib>
</groups>
</suite>
</phpunit>
</config>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
* 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) 2013 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>
*/
-->
<config>
<modules>
<EcomDev_PHPUnitTest>
<codePool>community</codePool>
<active>true</active>
</EcomDev_PHPUnitTest>
</modules>
</config>
\ No newline at end of file
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
* Abstract constraint for EcomDev_PHPUnit constraints * Abstract constraint for EcomDev_PHPUnit constraints
* Contains flexible constaint types implementation * Contains flexible constaint types implementation
* *
* @todo refactor failures for being 100% compatible with PHPUnit 3.6
*/ */
abstract class EcomDev_PHPUnit_Constraint_Abstract abstract class EcomDev_PHPUnit_Constraint_Abstract
extends PHPUnit_Framework_Constraint extends PHPUnit_Framework_Constraint
...@@ -74,12 +73,21 @@ abstract class EcomDev_PHPUnit_Constraint_Abstract ...@@ -74,12 +73,21 @@ abstract class EcomDev_PHPUnit_Constraint_Abstract
*/ */
protected $_useActualValue = false; protected $_useActualValue = false;
/**
* Comparison failure for nice failure messages
*
* @var PHPUnit_Framework_ComparisonFailure
*/
protected $_comparisonFailure = null;
/** /**
* Abstract cnstraint constructor, * Abstract cnstraint constructor,
* provides unified interface for working with multiple types of evalation * provides unified interface for working with multiple types of evalation
* *
* @param string $type * @param string $type
* @param mixed $expectedValue * @param mixed $expectedValue
*
* @throws PHPUnit_Framework_Exception
*/ */
public function __construct($type, $expectedValue = null) public function __construct($type, $expectedValue = null)
{ {
...@@ -98,7 +106,7 @@ abstract class EcomDev_PHPUnit_Constraint_Abstract ...@@ -98,7 +106,7 @@ abstract class EcomDev_PHPUnit_Constraint_Abstract
if (isset($this->_expectedValueValidation[$type])) { if (isset($this->_expectedValueValidation[$type])) {
$expectedValueType = (isset($this->_expectedValueValidation[$type][2]) ? $expectedValueType = (isset($this->_expectedValueValidation[$type][2]) ?
isset($this->_expectedValueValidation[$type][2]) : $this->_expectedValueValidation[$type][2] :
''); '');
// Mandatory check // Mandatory check
...@@ -186,17 +194,9 @@ abstract class EcomDev_PHPUnit_Constraint_Abstract ...@@ -186,17 +194,9 @@ abstract class EcomDev_PHPUnit_Constraint_Abstract
$failureDescription = sprintf('Failed asserting that %s', $this->failureDescription($other)); $failureDescription = sprintf('Failed asserting that %s', $this->failureDescription($other));
if (in_array($this->_type, $this->_typesWithDiff)) { if (in_array($this->_type, $this->_typesWithDiff)) {
$actual = $this->getActualValue($other);
$expected = $this->getExpectedValue();
throw new EcomDev_PHPUnit_Constraint_Exception( throw new EcomDev_PHPUnit_Constraint_Exception(
$failureDescription, $failureDescription,
new PHPUnit_Framework_ComparisonFailure( $this->getComparisonFailure($this->getExpectedValue(), $this->getActualValue($other)),
$expected,
$actual,
$this->exportAsString($expected),
$this->exportAsString($actual)
),
$description $description
); );
} else { } else {
...@@ -278,4 +278,60 @@ abstract class EcomDev_PHPUnit_Constraint_Abstract ...@@ -278,4 +278,60 @@ abstract class EcomDev_PHPUnit_Constraint_Abstract
return PHPUnit_Util_Type::export($value); return PHPUnit_Util_Type::export($value);
} }
} }
/**
* Compares two values by using correct comparator for two types
*
* @param mixed $expectedValue
* @param mixed $actualValue
* @return bool
*/
public function compareValues($expectedValue, $actualValue)
{
$comparatorFactory = PHPUnit_Framework_ComparatorFactory::getDefaultInstance();
try {
$comparator = $comparatorFactory->getComparatorFor(
$expectedValue, $actualValue
);
$comparator->assertEquals(
$expectedValue,
$actualValue
);
}
catch (PHPUnit_Framework_ComparisonFailure $f) {
$this->_comparisonFailure = $f;
return false;
}
return true;
}
/**
* Retrieve comparison failure exception.
*
* Is used for generation of the failure messages
*
* @param mixed $actualValue
* @param mixed $expectedValue
*
* @return PHPUnit_Framework_ComparisonFailure
*/
public function getComparisonFailure($actualValue, $expectedValue)
{
if ($this->_comparisonFailure !== null) {
$failure = $this->_comparisonFailure;
$this->_comparisonFailure = null;
return $failure;
}
return new PHPUnit_Framework_ComparisonFailure(
$expectedValue,
$actualValue,
$this->exportAsString($expectedValue),
$this->exportAsString($actualValue)
);
}
} }
...@@ -86,7 +86,7 @@ abstract class EcomDev_PHPUnit_Constraint_Config_Abstract ...@@ -86,7 +86,7 @@ abstract class EcomDev_PHPUnit_Constraint_Config_Abstract
protected function getActualValue($other = null) protected function getActualValue($other = null)
{ {
if (!$this->_useActualValue && $other->hasChildren()) { if (!$this->_useActualValue && $other->hasChildren()) {
return $other->asNiceXml(); return $this->getXmlAsDom($this->_expectedValue);
} elseif (!$this->_useActualValue) { } elseif (!$this->_useActualValue) {
return (string) $other; return (string) $other;
} }
...@@ -102,9 +102,28 @@ abstract class EcomDev_PHPUnit_Constraint_Config_Abstract ...@@ -102,9 +102,28 @@ abstract class EcomDev_PHPUnit_Constraint_Config_Abstract
protected function getExpectedValue() protected function getExpectedValue()
{ {
if ($this->_expectedValue instanceof Varien_Simplexml_Element) { if ($this->_expectedValue instanceof Varien_Simplexml_Element) {
return $this->_expectedValue->asNiceXml(); return $this->getXmlAsDom($this->_expectedValue);
} }
return parent::getExpectedValue(); return parent::getExpectedValue();
} }
/**
* Converts xml to dom object
*
* @param $xmlValue
* @return DOMDocument
*/
protected function getXmlAsDom($xmlValue)
{
if ($xmlValue instanceof SimpleXMLElement) {
$xmlValue = $xmlValue->asXML();
}
$domValue = new DOMDocument;
$domValue->preserveWhiteSpace = FALSE;
$domValue->loadXML($xmlValue);
return $domValue;
}
} }
\ No newline at end of file
...@@ -90,6 +90,7 @@ class EcomDev_PHPUnit_Constraint_Config_Layout ...@@ -90,6 +90,7 @@ class EcomDev_PHPUnit_Constraint_Config_Layout
); );
$this->_typesWithDiff[] = self::TYPE_LAYOUT_FILE; $this->_typesWithDiff[] = self::TYPE_LAYOUT_FILE;
$this->_typesWithDiff[] = self::TYPE_LAYOUT_DEFINITION;
$nodePath = sprintf(self::XML_PATH_LAYOUT, $area); $nodePath = sprintf(self::XML_PATH_LAYOUT, $area);
...@@ -131,7 +132,18 @@ class EcomDev_PHPUnit_Constraint_Config_Layout ...@@ -131,7 +132,18 @@ class EcomDev_PHPUnit_Constraint_Config_Layout
} }
} }
return false; if ($this->_layoutUpdate === null) {
$this->_layoutUpdate = 'your_module';
}
$expected = clone $other;
$expected->addChild($this->_layoutUpdate)
->addChild('file', htmlspecialchars($this->_expectedValue));
return $this->compareValues(
$this->getXmlAsDom($expected),
$this->getXmlAsDom($other)
);
} }
/** /**
...@@ -156,15 +168,12 @@ class EcomDev_PHPUnit_Constraint_Config_Layout ...@@ -156,15 +168,12 @@ class EcomDev_PHPUnit_Constraint_Config_Layout
* @param Varien_Simplexml_Element $other * @param Varien_Simplexml_Element $other
* @return boolean * @return boolean
*/ */
protected function evaluateLayoutFile($other) protected function evaluateLayoutFile()
{ {
$assertion = self::getDesignPackageModel() $assertion = self::getDesignPackageModel()
->getLayoutFileAssertion($this->_expectedValue, $this->_area, $this->_designPackage, $this->_theme); ->getLayoutFileAssertion($this->_expectedValue, $this->_area, $this->_designPackage, $this->_theme);
$this->setActualValue($assertion['actual']); return $this->compareValues($assertion['expected'], $assertion['actual']);
$this->_expectedValue = $assertion['expected'];
return $this->_actualValue === $this->_expectedValue;
} }
/** /**
......
...@@ -99,9 +99,7 @@ class EcomDev_PHPUnit_Constraint_Config_Module ...@@ -99,9 +99,7 @@ class EcomDev_PHPUnit_Constraint_Config_Module
*/ */
protected function evaluateCodePool($other) protected function evaluateCodePool($other)
{ {
$this->setActualValue((string)$other->codePool); return $this->compareValues($this->_expectedValue, (string)$other->codePool);
return $this->_actualValue === $this->_expectedValue;
} }
/** /**
......
...@@ -43,7 +43,7 @@ class EcomDev_PHPUnit_Constraint_Config_Node ...@@ -43,7 +43,7 @@ class EcomDev_PHPUnit_Constraint_Config_Node
public function __construct($nodePath, $type, $expectedValue = null) public function __construct($nodePath, $type, $expectedValue = null)
{ {
$this->_expectedValueValidation += array( $this->_expectedValueValidation += array(
self::TYPE_EQUALS_STRING => array(true, 'is_string', 'string'), self::TYPE_EQUALS_STRING => array(true, 'is_scalar', 'scalar'),
self::TYPE_EQUALS_NUMBER => array(true, 'is_numeric', 'numeric'), self::TYPE_EQUALS_NUMBER => array(true, 'is_numeric', 'numeric'),
self::TYPE_LESS_THAN => array(true, 'is_numeric', 'numeric'), self::TYPE_LESS_THAN => array(true, 'is_numeric', 'numeric'),
self::TYPE_GREATER_THAN => array(true, 'is_numeric', 'numeric'), self::TYPE_GREATER_THAN => array(true, 'is_numeric', 'numeric'),
...@@ -68,7 +68,7 @@ class EcomDev_PHPUnit_Constraint_Config_Node ...@@ -68,7 +68,7 @@ class EcomDev_PHPUnit_Constraint_Config_Node
*/ */
protected function evaluateEqualsString($other) protected function evaluateEqualsString($other)
{ {
return (string)$other === $this->_expectedValue; return $this->compareValues($this->_expectedValue, (string)$other);
} }
/** /**
...@@ -88,7 +88,7 @@ class EcomDev_PHPUnit_Constraint_Config_Node ...@@ -88,7 +88,7 @@ class EcomDev_PHPUnit_Constraint_Config_Node
*/ */
protected function evaluateEqualsNumber($other) protected function evaluateEqualsNumber($other)
{ {
return (float)$other == $this->_expectedValue; return $this->compareValues($this->_expectedValue, (float)$other);
} }
/** /**
...@@ -171,27 +171,10 @@ class EcomDev_PHPUnit_Constraint_Config_Node ...@@ -171,27 +171,10 @@ class EcomDev_PHPUnit_Constraint_Config_Node
*/ */
protected function evaluateEqualsXml($other) protected function evaluateEqualsXml($other)
{ {
// Normalize expected XML for matching appropriate xml structure without $expectedValue = $this->getXmlAsDom($this->_expectedValue);
// whitespaces, etc $other = $this->getXmlAsDom($other);
if (!$this->_expectedValue instanceof Varien_Simplexml_Element) {
try {
if ($other instanceof SimpleXMLElement) {
$other = $other->asXML();
}
$expectedXml = new Varien_Simplexml_Element($this->_expectedValue);
} catch (Exception $e) {
throw new RuntimeException(sprintf(
'Expected value is not an xml string for node %s, passed expected value: %s, parsing error: %s',
$this->_nodePath,
PHPUnit_Util_Type::export($this->_expectedValue),
$e->getMessage()
));
}
$this->_expectedValue = $expectedXml;
}
return $this->_expectedValue->asNiceXml() == $other->asNiceXml(); return $this->compareValues($expectedValue, $other);
} }
......
...@@ -154,6 +154,7 @@ class EcomDev_PHPUnit_Constraint_Config_Resource_Script ...@@ -154,6 +154,7 @@ class EcomDev_PHPUnit_Constraint_Config_Resource_Script
self::FILE_UPGRADE_DATA => array('data', 'upgrade') self::FILE_UPGRADE_DATA => array('data', 'upgrade')
); );
foreach ($directoryIterator as $entry) { foreach ($directoryIterator as $entry) {
/* @var $entry SplFileInfo */ /* @var $entry SplFileInfo */
// We do not support scheme upgrade scripts with .sql // We do not support scheme upgrade scripts with .sql
...@@ -206,6 +207,9 @@ class EcomDev_PHPUnit_Constraint_Config_Resource_Script ...@@ -206,6 +207,9 @@ class EcomDev_PHPUnit_Constraint_Config_Resource_Script
*/ */
protected function getVersionScriptsDiff($versions, $from = null, $to = null, $scriptPrefix = '') protected function getVersionScriptsDiff($versions, $from = null, $to = null, $scriptPrefix = '')
{ {
usort($versions['install'], array($this, 'compareVersions'));
usort($versions['upgrade'], array($this, 'compareVersions'));
if ($from === null && end($versions['install'])) { if ($from === null && end($versions['install'])) {
$version = end($versions['install']); $version = end($versions['install']);
$from = $version['from']; $from = $version['from'];
...@@ -227,7 +231,7 @@ class EcomDev_PHPUnit_Constraint_Config_Resource_Script ...@@ -227,7 +231,7 @@ class EcomDev_PHPUnit_Constraint_Config_Resource_Script
$latestVersionFound = null; $latestVersionFound = null;
if (empty($versions['install']) && $from !== null) { if (empty($versions['install']) && $from !== null) {
$expectedVersions[] = sprintf('install-%s.php', $scriptPrefix, $from); $expectedVersions[] = sprintf('%sinstall-%s.php', $scriptPrefix, $from);
$latestVersionFound = $from; $latestVersionFound = $from;
} elseif ($from !== null) { } elseif ($from !== null) {
foreach ($versions['install'] as $index=>$version) { foreach ($versions['install'] as $index=>$version) {
......
# EcomDev_PHPUnit definition # EcomDev_PHPUnit definition
app/etc/modules/EcomDev_PHPUnit.xml app/etc/modules/EcomDev_PHPUnit.xml app/etc/modules/EcomDev_*.xml app/etc/modules/
app/code/community/EcomDev/PHPUnit app/code/community/EcomDev/PHPUnit app/code/community/EcomDev/* app/code/community/EcomDev/
lib/EcomDev/PHPUnit lib/EcomDev/PHPUnit lib/EcomDev/* lib/EcomDev/
lib/EcomDev/Utils lib/EcomDev/Utils
lib/Spyc lib/Spyc lib/Spyc lib/Spyc
lib/vfsStream lib/vfsStream lib/vfsStream lib/vfsStream
shell/ecomdev-phpunit-install.php shell/ecomdev-phpunit-install.php shell/ecomdev-phpunit-install.php shell/ecomdev-phpunit-install.php
......
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