*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Config\Tests\Loader;
use Symfony\Component\Config\Util\XmlUtils;
class XmlUtilsTest extends \PHPUnit_Framework_TestCase
{
public function testLoadFile()
{
$fixtures = __DIR__.'/../Fixtures/Util/';
try {
XmlUtils::loadFile($fixtures.'invalid.xml');
$this->fail();
} catch (\InvalidArgumentException $e) {
$this->assertContains('ERROR 77', $e->getMessage());
}
try {
XmlUtils::loadFile($fixtures.'document_type.xml');
$this->fail();
} catch (\InvalidArgumentException $e) {
$this->assertContains('Document types are not allowed', $e->getMessage());
}
try {
XmlUtils::loadFile($fixtures.'invalid_schema.xml', $fixtures.'schema.xsd');
$this->fail();
} catch (\InvalidArgumentException $e) {
$this->assertContains('ERROR 1845', $e->getMessage());
}
try {
XmlUtils::loadFile($fixtures.'invalid_schema.xml', 'invalid_callback_or_file');
$this->fail();
} catch (\InvalidArgumentException $e) {
$this->assertContains('XSD file or callable', $e->getMessage());
}
$mock = $this->getMock(__NAMESPACE__.'\Validator');
$mock->expects($this->exactly(2))->method('validate')->will($this->onConsecutiveCalls(false, true));
try {
XmlUtils::loadFile($fixtures.'valid.xml', array($mock, 'validate'));
$this->fail();
} catch (\InvalidArgumentException $e) {
$this->assertContains('is not valid', $e->getMessage());
}
$this->assertInstanceOf('DOMDocument', XmlUtils::loadFile($fixtures.'valid.xml', array($mock, 'validate')));
}
/**
* @dataProvider getDataForConvertDomToArray
*/
public function testConvertDomToArray($expected, $xml, $root = false, $checkPrefix = true)
{
$dom = new \DOMDocument();
$dom->loadXML($root ? $xml : ''.$xml.'');
$this->assertSame($expected, XmlUtils::convertDomElementToArray($dom->documentElement, $checkPrefix));
}
public function getDataForConvertDomToArray()
{
return array(
array(null, ''),
array('bar', 'bar'),
array(array('bar' => 'foobar'), '', true),
array(array('foo' => null), ''),
array(array('foo' => 'bar'), 'bar'),
array(array('foo' => array('foo' => 'bar')), ''),
array(array('foo' => array('foo' => 'bar')), 'bar'),
array(array('foo' => array('foo' => 'bar', 'value' => 'text')), 'text'),
array(array('foo' => array('attr' => 'bar', 'foo' => 'text')), 'text'),
array(array('foo' => array('bar', 'text')), 'bartext'),
array(array('foo' => array(array('foo' => 'bar'), array('foo' => 'text'))), ''),
array(array('foo' => array('foo' => array('bar', 'text'))), 'text'),
array(array('foo' => 'bar'), 'bar'),
array(array('foo' => 'text'), 'text'),
array(array('foo' => array('bar' => 'bar', 'value' => 'text')), 'text', false, false),
array(array('attr' => 1, 'b' => 'hello'), 'hello2', true),
);
}
/**
* @dataProvider getDataForPhpize
*/
public function testPhpize($expected, $value)
{
$this->assertSame($expected, XmlUtils::phpize($value));
}
public function getDataForPhpize()
{
return array(
array(null, 'null'),
array(true, 'true'),
array(false, 'false'),
array(null, 'Null'),
array(true, 'True'),
array(false, 'False'),
array(0, '0'),
array(1, '1'),
array(0777, '0777'),
array(255, '0xFF'),
array(100.0, '1e2'),
array(-120.0, '-1.2E2'),
array(-10100.1, '-10100.1'),
array('-10,100.1', '-10,100.1'),
array('1234 5678 9101 1121 3141', '1234 5678 9101 1121 3141'),
array('1,2,3,4', '1,2,3,4'),
array('11,22,33,44', '11,22,33,44'),
array('11,222,333,4', '11,222,333,4'),
array('1,222,333,444', '1,222,333,444'),
array('11,222,333,444', '11,222,333,444'),
array('111,222,333,444', '111,222,333,444'),
array('1111,2222,3333,4444,5555', '1111,2222,3333,4444,5555'),
array('foo', 'foo'),
);
}
}
interface Validator
{
public function validate();
}