Update Composer, update everything
This commit is contained in:
parent
ea3e94409f
commit
dda5c284b6
19527 changed files with 1135420 additions and 351004 deletions
29
vendor/symfony/config/Tests/ConfigCacheFactoryTest.php
vendored
Normal file
29
vendor/symfony/config/Tests/ConfigCacheFactoryTest.php
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\ConfigCacheFactory;
|
||||
|
||||
class ConfigCacheFactoryTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage Invalid type for callback argument. Expected callable, but got "object".
|
||||
*/
|
||||
public function testCacheWithInvalidCallback()
|
||||
{
|
||||
$cacheFactory = new ConfigCacheFactory(true);
|
||||
|
||||
$cacheFactory->cache('file', new \stdClass());
|
||||
}
|
||||
}
|
99
vendor/symfony/config/Tests/ConfigCacheTest.php
vendored
Normal file
99
vendor/symfony/config/Tests/ConfigCacheTest.php
vendored
Normal file
|
@ -0,0 +1,99 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\ConfigCache;
|
||||
use Symfony\Component\Config\Tests\Resource\ResourceStub;
|
||||
|
||||
class ConfigCacheTest extends TestCase
|
||||
{
|
||||
private $cacheFile = null;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->cacheFile = tempnam(sys_get_temp_dir(), 'config_');
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
$files = array($this->cacheFile, $this->cacheFile.'.meta');
|
||||
|
||||
foreach ($files as $file) {
|
||||
if (file_exists($file)) {
|
||||
unlink($file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider debugModes
|
||||
*/
|
||||
public function testCacheIsNotValidIfNothingHasBeenCached($debug)
|
||||
{
|
||||
unlink($this->cacheFile); // remove tempnam() side effect
|
||||
$cache = new ConfigCache($this->cacheFile, $debug);
|
||||
|
||||
$this->assertFalse($cache->isFresh());
|
||||
}
|
||||
|
||||
public function testIsAlwaysFreshInProduction()
|
||||
{
|
||||
$staleResource = new ResourceStub();
|
||||
$staleResource->setFresh(false);
|
||||
|
||||
$cache = new ConfigCache($this->cacheFile, false);
|
||||
$cache->write('', array($staleResource));
|
||||
|
||||
$this->assertTrue($cache->isFresh());
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider debugModes
|
||||
*/
|
||||
public function testIsFreshWhenNoResourceProvided($debug)
|
||||
{
|
||||
$cache = new ConfigCache($this->cacheFile, $debug);
|
||||
$cache->write('', array());
|
||||
$this->assertTrue($cache->isFresh());
|
||||
}
|
||||
|
||||
public function testFreshResourceInDebug()
|
||||
{
|
||||
$freshResource = new ResourceStub();
|
||||
$freshResource->setFresh(true);
|
||||
|
||||
$cache = new ConfigCache($this->cacheFile, true);
|
||||
$cache->write('', array($freshResource));
|
||||
|
||||
$this->assertTrue($cache->isFresh());
|
||||
}
|
||||
|
||||
public function testStaleResourceInDebug()
|
||||
{
|
||||
$staleResource = new ResourceStub();
|
||||
$staleResource->setFresh(false);
|
||||
|
||||
$cache = new ConfigCache($this->cacheFile, true);
|
||||
$cache->write('', array($staleResource));
|
||||
|
||||
$this->assertFalse($cache->isFresh());
|
||||
}
|
||||
|
||||
public function debugModes()
|
||||
{
|
||||
return array(
|
||||
array(true),
|
||||
array(false),
|
||||
);
|
||||
}
|
||||
}
|
251
vendor/symfony/config/Tests/Definition/ArrayNodeTest.php
vendored
Normal file
251
vendor/symfony/config/Tests/Definition/ArrayNodeTest.php
vendored
Normal file
|
@ -0,0 +1,251 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\ArrayNode;
|
||||
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
|
||||
use Symfony\Component\Config\Definition\ScalarNode;
|
||||
|
||||
class ArrayNodeTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidTypeException
|
||||
*/
|
||||
public function testNormalizeThrowsExceptionWhenFalseIsNotAllowed()
|
||||
{
|
||||
$node = new ArrayNode('root');
|
||||
$node->normalize(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
|
||||
* @expectedExceptionMessage Unrecognized option "foo" under "root"
|
||||
*/
|
||||
public function testExceptionThrownOnUnrecognizedChild()
|
||||
{
|
||||
$node = new ArrayNode('root');
|
||||
$node->normalize(array('foo' => 'bar'));
|
||||
}
|
||||
|
||||
public function ignoreAndRemoveMatrixProvider()
|
||||
{
|
||||
$unrecognizedOptionException = new InvalidConfigurationException('Unrecognized option "foo" under "root"');
|
||||
|
||||
return array(
|
||||
array(true, true, array(), 'no exception is thrown for an unrecognized child if the ignoreExtraKeys option is set to true'),
|
||||
array(true, false, array('foo' => 'bar'), 'extra keys are not removed when ignoreExtraKeys second option is set to false'),
|
||||
array(false, true, $unrecognizedOptionException),
|
||||
array(false, false, $unrecognizedOptionException),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider ignoreAndRemoveMatrixProvider
|
||||
*/
|
||||
public function testIgnoreAndRemoveBehaviors($ignore, $remove, $expected, $message = '')
|
||||
{
|
||||
if ($expected instanceof \Exception) {
|
||||
if (method_exists($this, 'expectException')) {
|
||||
$this->expectException(\get_class($expected));
|
||||
$this->expectExceptionMessage($expected->getMessage());
|
||||
} else {
|
||||
$this->setExpectedException(\get_class($expected), $expected->getMessage());
|
||||
}
|
||||
}
|
||||
$node = new ArrayNode('root');
|
||||
$node->setIgnoreExtraKeys($ignore, $remove);
|
||||
$result = $node->normalize(array('foo' => 'bar'));
|
||||
$this->assertSame($expected, $result, $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getPreNormalizationTests
|
||||
*/
|
||||
public function testPreNormalize($denormalized, $normalized)
|
||||
{
|
||||
$node = new ArrayNode('foo');
|
||||
|
||||
$r = new \ReflectionMethod($node, 'preNormalize');
|
||||
$r->setAccessible(true);
|
||||
|
||||
$this->assertSame($normalized, $r->invoke($node, $denormalized));
|
||||
}
|
||||
|
||||
public function getPreNormalizationTests()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
array('foo-bar' => 'foo'),
|
||||
array('foo_bar' => 'foo'),
|
||||
),
|
||||
array(
|
||||
array('foo-bar_moo' => 'foo'),
|
||||
array('foo-bar_moo' => 'foo'),
|
||||
),
|
||||
array(
|
||||
array('anything-with-dash-and-no-underscore' => 'first', 'no_dash' => 'second'),
|
||||
array('anything_with_dash_and_no_underscore' => 'first', 'no_dash' => 'second'),
|
||||
),
|
||||
array(
|
||||
array('foo-bar' => null, 'foo_bar' => 'foo'),
|
||||
array('foo-bar' => null, 'foo_bar' => 'foo'),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getZeroNamedNodeExamplesData
|
||||
*/
|
||||
public function testNodeNameCanBeZero($denormalized, $normalized)
|
||||
{
|
||||
$zeroNode = new ArrayNode(0);
|
||||
$zeroNode->addChild(new ScalarNode('name'));
|
||||
$fiveNode = new ArrayNode(5);
|
||||
$fiveNode->addChild(new ScalarNode(0));
|
||||
$fiveNode->addChild(new ScalarNode('new_key'));
|
||||
$rootNode = new ArrayNode('root');
|
||||
$rootNode->addChild($zeroNode);
|
||||
$rootNode->addChild($fiveNode);
|
||||
$rootNode->addChild(new ScalarNode('string_key'));
|
||||
$r = new \ReflectionMethod($rootNode, 'normalizeValue');
|
||||
$r->setAccessible(true);
|
||||
|
||||
$this->assertSame($normalized, $r->invoke($rootNode, $denormalized));
|
||||
}
|
||||
|
||||
public function getZeroNamedNodeExamplesData()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
array(
|
||||
0 => array(
|
||||
'name' => 'something',
|
||||
),
|
||||
5 => array(
|
||||
0 => 'this won\'t work too',
|
||||
'new_key' => 'some other value',
|
||||
),
|
||||
'string_key' => 'just value',
|
||||
),
|
||||
array(
|
||||
0 => array(
|
||||
'name' => 'something',
|
||||
),
|
||||
5 => array(
|
||||
0 => 'this won\'t work too',
|
||||
'new_key' => 'some other value',
|
||||
),
|
||||
'string_key' => 'just value',
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getPreNormalizedNormalizedOrderedData
|
||||
*/
|
||||
public function testChildrenOrderIsMaintainedOnNormalizeValue($prenormalized, $normalized)
|
||||
{
|
||||
$scalar1 = new ScalarNode('1');
|
||||
$scalar2 = new ScalarNode('2');
|
||||
$scalar3 = new ScalarNode('3');
|
||||
$node = new ArrayNode('foo');
|
||||
$node->addChild($scalar1);
|
||||
$node->addChild($scalar3);
|
||||
$node->addChild($scalar2);
|
||||
|
||||
$r = new \ReflectionMethod($node, 'normalizeValue');
|
||||
$r->setAccessible(true);
|
||||
|
||||
$this->assertSame($normalized, $r->invoke($node, $prenormalized));
|
||||
}
|
||||
|
||||
public function getPreNormalizedNormalizedOrderedData()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
array('2' => 'two', '1' => 'one', '3' => 'three'),
|
||||
array('2' => 'two', '1' => 'one', '3' => 'three'),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage Child nodes must be named.
|
||||
*/
|
||||
public function testAddChildEmptyName()
|
||||
{
|
||||
$node = new ArrayNode('root');
|
||||
|
||||
$childNode = new ArrayNode('');
|
||||
$node->addChild($childNode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage A child node named "foo" already exists.
|
||||
*/
|
||||
public function testAddChildNameAlreadyExists()
|
||||
{
|
||||
$node = new ArrayNode('root');
|
||||
|
||||
$childNode = new ArrayNode('foo');
|
||||
$node->addChild($childNode);
|
||||
|
||||
$childNodeWithSameName = new ArrayNode('foo');
|
||||
$node->addChild($childNodeWithSameName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
* @expectedExceptionMessage The node at path "foo" has no default value.
|
||||
*/
|
||||
public function testGetDefaultValueWithoutDefaultValue()
|
||||
{
|
||||
$node = new ArrayNode('foo');
|
||||
$node->getDefaultValue();
|
||||
}
|
||||
|
||||
public function testSetDeprecated()
|
||||
{
|
||||
$childNode = new ArrayNode('foo');
|
||||
$childNode->setDeprecated('"%node%" is deprecated');
|
||||
|
||||
$this->assertTrue($childNode->isDeprecated());
|
||||
$this->assertSame('"foo" is deprecated', $childNode->getDeprecationMessage($childNode->getName(), $childNode->getPath()));
|
||||
|
||||
$node = new ArrayNode('root');
|
||||
$node->addChild($childNode);
|
||||
|
||||
$deprecationTriggered = false;
|
||||
$deprecationHandler = function ($level, $message, $file, $line) use (&$prevErrorHandler, &$deprecationTriggered) {
|
||||
if (E_USER_DEPRECATED === $level) {
|
||||
return $deprecationTriggered = true;
|
||||
}
|
||||
|
||||
return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false;
|
||||
};
|
||||
|
||||
$prevErrorHandler = set_error_handler($deprecationHandler);
|
||||
$node->finalize(array());
|
||||
restore_error_handler();
|
||||
|
||||
$this->assertFalse($deprecationTriggered, '->finalize() should not trigger if the deprecated node is not set');
|
||||
|
||||
$prevErrorHandler = set_error_handler($deprecationHandler);
|
||||
$node->finalize(array('foo' => array()));
|
||||
restore_error_handler();
|
||||
$this->assertTrue($deprecationTriggered, '->finalize() should trigger if the deprecated node is set');
|
||||
}
|
||||
}
|
74
vendor/symfony/config/Tests/Definition/BooleanNodeTest.php
vendored
Normal file
74
vendor/symfony/config/Tests/Definition/BooleanNodeTest.php
vendored
Normal file
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\BooleanNode;
|
||||
|
||||
class BooleanNodeTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider getValidValues
|
||||
*/
|
||||
public function testNormalize($value)
|
||||
{
|
||||
$node = new BooleanNode('test');
|
||||
$this->assertSame($value, $node->normalize($value));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getValidValues
|
||||
*
|
||||
* @param bool $value
|
||||
*/
|
||||
public function testValidNonEmptyValues($value)
|
||||
{
|
||||
$node = new BooleanNode('test');
|
||||
$node->setAllowEmptyValue(false);
|
||||
|
||||
$this->assertSame($value, $node->finalize($value));
|
||||
}
|
||||
|
||||
public function getValidValues()
|
||||
{
|
||||
return array(
|
||||
array(false),
|
||||
array(true),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getInvalidValues
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidTypeException
|
||||
*/
|
||||
public function testNormalizeThrowsExceptionOnInvalidValues($value)
|
||||
{
|
||||
$node = new BooleanNode('test');
|
||||
$node->normalize($value);
|
||||
}
|
||||
|
||||
public function getInvalidValues()
|
||||
{
|
||||
return array(
|
||||
array(null),
|
||||
array(''),
|
||||
array('foo'),
|
||||
array(0),
|
||||
array(1),
|
||||
array(0.0),
|
||||
array(0.1),
|
||||
array(array()),
|
||||
array(array('foo' => 'bar')),
|
||||
array(new \stdClass()),
|
||||
);
|
||||
}
|
||||
}
|
347
vendor/symfony/config/Tests/Definition/Builder/ArrayNodeDefinitionTest.php
vendored
Normal file
347
vendor/symfony/config/Tests/Definition/Builder/ArrayNodeDefinitionTest.php
vendored
Normal file
|
@ -0,0 +1,347 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition\Builder;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
|
||||
use Symfony\Component\Config\Definition\Builder\ScalarNodeDefinition;
|
||||
use Symfony\Component\Config\Definition\Exception\InvalidDefinitionException;
|
||||
use Symfony\Component\Config\Definition\Processor;
|
||||
|
||||
class ArrayNodeDefinitionTest extends TestCase
|
||||
{
|
||||
public function testAppendingSomeNode()
|
||||
{
|
||||
$parent = new ArrayNodeDefinition('root');
|
||||
$child = new ScalarNodeDefinition('child');
|
||||
|
||||
$parent
|
||||
->children()
|
||||
->scalarNode('foo')->end()
|
||||
->scalarNode('bar')->end()
|
||||
->end()
|
||||
->append($child);
|
||||
|
||||
$this->assertCount(3, $this->getField($parent, 'children'));
|
||||
$this->assertContains($child, $this->getField($parent, 'children'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidDefinitionException
|
||||
* @dataProvider providePrototypeNodeSpecificCalls
|
||||
*/
|
||||
public function testPrototypeNodeSpecificOption($method, $args)
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
|
||||
\call_user_func_array(array($node, $method), $args);
|
||||
|
||||
$node->getNode();
|
||||
}
|
||||
|
||||
public function providePrototypeNodeSpecificCalls()
|
||||
{
|
||||
return array(
|
||||
array('defaultValue', array(array())),
|
||||
array('addDefaultChildrenIfNoneSet', array()),
|
||||
array('requiresAtLeastOneElement', array()),
|
||||
array('useAttributeAsKey', array('foo')),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidDefinitionException
|
||||
*/
|
||||
public function testConcreteNodeSpecificOption()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$node
|
||||
->addDefaultsIfNotSet()
|
||||
->prototype('array')
|
||||
;
|
||||
$node->getNode();
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidDefinitionException
|
||||
*/
|
||||
public function testPrototypeNodesCantHaveADefaultValueWhenUsingDefaultChildren()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$node
|
||||
->defaultValue(array())
|
||||
->addDefaultChildrenIfNoneSet('foo')
|
||||
->prototype('array')
|
||||
;
|
||||
$node->getNode();
|
||||
}
|
||||
|
||||
public function testPrototypedArrayNodeDefaultWhenUsingDefaultChildren()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$node
|
||||
->addDefaultChildrenIfNoneSet()
|
||||
->prototype('array')
|
||||
;
|
||||
$tree = $node->getNode();
|
||||
$this->assertEquals(array(array()), $tree->getDefaultValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider providePrototypedArrayNodeDefaults
|
||||
*/
|
||||
public function testPrototypedArrayNodeDefault($args, $shouldThrowWhenUsingAttrAsKey, $shouldThrowWhenNotUsingAttrAsKey, $defaults)
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$node
|
||||
->addDefaultChildrenIfNoneSet($args)
|
||||
->prototype('array')
|
||||
;
|
||||
|
||||
try {
|
||||
$tree = $node->getNode();
|
||||
$this->assertFalse($shouldThrowWhenNotUsingAttrAsKey);
|
||||
$this->assertEquals($defaults, $tree->getDefaultValue());
|
||||
} catch (InvalidDefinitionException $e) {
|
||||
$this->assertTrue($shouldThrowWhenNotUsingAttrAsKey);
|
||||
}
|
||||
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$node
|
||||
->useAttributeAsKey('attr')
|
||||
->addDefaultChildrenIfNoneSet($args)
|
||||
->prototype('array')
|
||||
;
|
||||
|
||||
try {
|
||||
$tree = $node->getNode();
|
||||
$this->assertFalse($shouldThrowWhenUsingAttrAsKey);
|
||||
$this->assertEquals($defaults, $tree->getDefaultValue());
|
||||
} catch (InvalidDefinitionException $e) {
|
||||
$this->assertTrue($shouldThrowWhenUsingAttrAsKey);
|
||||
}
|
||||
}
|
||||
|
||||
public function providePrototypedArrayNodeDefaults()
|
||||
{
|
||||
return array(
|
||||
array(null, true, false, array(array())),
|
||||
array(2, true, false, array(array(), array())),
|
||||
array('2', false, true, array('2' => array())),
|
||||
array('foo', false, true, array('foo' => array())),
|
||||
array(array('foo'), false, true, array('foo' => array())),
|
||||
array(array('foo', 'bar'), false, true, array('foo' => array(), 'bar' => array())),
|
||||
);
|
||||
}
|
||||
|
||||
public function testNestedPrototypedArrayNodes()
|
||||
{
|
||||
$nodeDefinition = new ArrayNodeDefinition('root');
|
||||
$nodeDefinition
|
||||
->addDefaultChildrenIfNoneSet()
|
||||
->prototype('array')
|
||||
->prototype('array')
|
||||
;
|
||||
$node = $nodeDefinition->getNode();
|
||||
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Definition\PrototypedArrayNode', $node);
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Definition\PrototypedArrayNode', $node->getPrototype());
|
||||
}
|
||||
|
||||
public function testEnabledNodeDefaults()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$node
|
||||
->canBeEnabled()
|
||||
->children()
|
||||
->scalarNode('foo')->defaultValue('bar')->end()
|
||||
;
|
||||
|
||||
$this->assertEquals(array('enabled' => false, 'foo' => 'bar'), $node->getNode()->getDefaultValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getEnableableNodeFixtures
|
||||
*/
|
||||
public function testTrueEnableEnabledNode($expected, $config, $message)
|
||||
{
|
||||
$processor = new Processor();
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$node
|
||||
->canBeEnabled()
|
||||
->children()
|
||||
->scalarNode('foo')->defaultValue('bar')->end()
|
||||
;
|
||||
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$processor->process($node->getNode(), $config),
|
||||
$message
|
||||
);
|
||||
}
|
||||
|
||||
public function testCanBeDisabled()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$node->canBeDisabled();
|
||||
|
||||
$this->assertTrue($this->getField($node, 'addDefaults'));
|
||||
$this->assertEquals(array('enabled' => false), $this->getField($node, 'falseEquivalent'));
|
||||
$this->assertEquals(array('enabled' => true), $this->getField($node, 'trueEquivalent'));
|
||||
$this->assertEquals(array('enabled' => true), $this->getField($node, 'nullEquivalent'));
|
||||
|
||||
$nodeChildren = $this->getField($node, 'children');
|
||||
$this->assertArrayHasKey('enabled', $nodeChildren);
|
||||
|
||||
$enabledNode = $nodeChildren['enabled'];
|
||||
$this->assertTrue($this->getField($enabledNode, 'default'));
|
||||
$this->assertTrue($this->getField($enabledNode, 'defaultValue'));
|
||||
}
|
||||
|
||||
public function testIgnoreExtraKeys()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
|
||||
$this->assertFalse($this->getField($node, 'ignoreExtraKeys'));
|
||||
|
||||
$result = $node->ignoreExtraKeys();
|
||||
|
||||
$this->assertEquals($node, $result);
|
||||
$this->assertTrue($this->getField($node, 'ignoreExtraKeys'));
|
||||
}
|
||||
|
||||
public function testNormalizeKeys()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
|
||||
$this->assertTrue($this->getField($node, 'normalizeKeys'));
|
||||
|
||||
$result = $node->normalizeKeys(false);
|
||||
|
||||
$this->assertEquals($node, $result);
|
||||
$this->assertFalse($this->getField($node, 'normalizeKeys'));
|
||||
}
|
||||
|
||||
public function testPrototypeVariable()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$this->assertEquals($node->prototype('variable'), $node->variablePrototype());
|
||||
}
|
||||
|
||||
public function testPrototypeScalar()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$this->assertEquals($node->prototype('scalar'), $node->scalarPrototype());
|
||||
}
|
||||
|
||||
public function testPrototypeBoolean()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$this->assertEquals($node->prototype('boolean'), $node->booleanPrototype());
|
||||
}
|
||||
|
||||
public function testPrototypeInteger()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$this->assertEquals($node->prototype('integer'), $node->integerPrototype());
|
||||
}
|
||||
|
||||
public function testPrototypeFloat()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$this->assertEquals($node->prototype('float'), $node->floatPrototype());
|
||||
}
|
||||
|
||||
public function testPrototypeArray()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$this->assertEquals($node->prototype('array'), $node->arrayPrototype());
|
||||
}
|
||||
|
||||
public function testPrototypeEnum()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$this->assertEquals($node->prototype('enum'), $node->enumPrototype());
|
||||
}
|
||||
|
||||
public function getEnableableNodeFixtures()
|
||||
{
|
||||
return array(
|
||||
array(array('enabled' => true, 'foo' => 'bar'), array(true), 'true enables an enableable node'),
|
||||
array(array('enabled' => true, 'foo' => 'bar'), array(null), 'null enables an enableable node'),
|
||||
array(array('enabled' => true, 'foo' => 'bar'), array(array('enabled' => true)), 'An enableable node can be enabled'),
|
||||
array(array('enabled' => true, 'foo' => 'baz'), array(array('foo' => 'baz')), 'any configuration enables an enableable node'),
|
||||
array(array('enabled' => false, 'foo' => 'baz'), array(array('foo' => 'baz', 'enabled' => false)), 'An enableable node can be disabled'),
|
||||
array(array('enabled' => false, 'foo' => 'bar'), array(false), 'false disables an enableable node'),
|
||||
);
|
||||
}
|
||||
|
||||
public function testRequiresAtLeastOneElement()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$node
|
||||
->requiresAtLeastOneElement()
|
||||
->integerPrototype();
|
||||
|
||||
$node->getNode()->finalize(array(1));
|
||||
|
||||
$this->addToAssertionCount(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
* @expectedDeprecation Using Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition::cannotBeEmpty() at path "root" has no effect, consider requiresAtLeastOneElement() instead. In 4.0 both methods will behave the same.
|
||||
*/
|
||||
public function testCannotBeEmpty()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$node
|
||||
->cannotBeEmpty()
|
||||
->integerPrototype();
|
||||
|
||||
$node->getNode()->finalize(array());
|
||||
}
|
||||
|
||||
public function testSetDeprecated()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$node
|
||||
->children()
|
||||
->arrayNode('foo')->setDeprecated('The "%path%" node is deprecated.')->end()
|
||||
->end()
|
||||
;
|
||||
$deprecatedNode = $node->getNode()->getChildren()['foo'];
|
||||
|
||||
$this->assertTrue($deprecatedNode->isDeprecated());
|
||||
$this->assertSame('The "root.foo" node is deprecated.', $deprecatedNode->getDeprecationMessage($deprecatedNode->getName(), $deprecatedNode->getPath()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
* @expectedDeprecation ->cannotBeEmpty() is not applicable to concrete nodes at path "root". In 4.0 it will throw an exception.
|
||||
*/
|
||||
public function testCannotBeEmptyOnConcreteNode()
|
||||
{
|
||||
$node = new ArrayNodeDefinition('root');
|
||||
$node->cannotBeEmpty();
|
||||
|
||||
$node->getNode()->finalize(array());
|
||||
}
|
||||
|
||||
protected function getField($object, $field)
|
||||
{
|
||||
$reflection = new \ReflectionProperty($object, $field);
|
||||
$reflection->setAccessible(true);
|
||||
|
||||
return $reflection->getValue($object);
|
||||
}
|
||||
}
|
39
vendor/symfony/config/Tests/Definition/Builder/BooleanNodeDefinitionTest.php
vendored
Normal file
39
vendor/symfony/config/Tests/Definition/Builder/BooleanNodeDefinitionTest.php
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition\Builder;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition;
|
||||
|
||||
class BooleanNodeDefinitionTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidDefinitionException
|
||||
* @expectedExceptionMessage ->cannotBeEmpty() is not applicable to BooleanNodeDefinition.
|
||||
*/
|
||||
public function testCannotBeEmptyThrowsAnException()
|
||||
{
|
||||
$def = new BooleanNodeDefinition('foo');
|
||||
$def->cannotBeEmpty();
|
||||
}
|
||||
|
||||
public function testSetDeprecated()
|
||||
{
|
||||
$def = new BooleanNodeDefinition('foo');
|
||||
$def->setDeprecated('The "%path%" node is deprecated.');
|
||||
|
||||
$node = $def->getNode();
|
||||
|
||||
$this->assertTrue($node->isDeprecated());
|
||||
$this->assertSame('The "foo" node is deprecated.', $node->getDeprecationMessage($node->getName(), $node->getPath()));
|
||||
}
|
||||
}
|
77
vendor/symfony/config/Tests/Definition/Builder/EnumNodeDefinitionTest.php
vendored
Normal file
77
vendor/symfony/config/Tests/Definition/Builder/EnumNodeDefinitionTest.php
vendored
Normal file
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition\Builder;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\Builder\EnumNodeDefinition;
|
||||
|
||||
class EnumNodeDefinitionTest extends TestCase
|
||||
{
|
||||
public function testWithOneValue()
|
||||
{
|
||||
$def = new EnumNodeDefinition('foo');
|
||||
$def->values(array('foo'));
|
||||
|
||||
$node = $def->getNode();
|
||||
$this->assertEquals(array('foo'), $node->getValues());
|
||||
}
|
||||
|
||||
public function testWithOneDistinctValue()
|
||||
{
|
||||
$def = new EnumNodeDefinition('foo');
|
||||
$def->values(array('foo', 'foo'));
|
||||
|
||||
$node = $def->getNode();
|
||||
$this->assertEquals(array('foo'), $node->getValues());
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
* @expectedExceptionMessage You must call ->values() on enum nodes.
|
||||
*/
|
||||
public function testNoValuesPassed()
|
||||
{
|
||||
$def = new EnumNodeDefinition('foo');
|
||||
$def->getNode();
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage ->values() must be called with at least one value.
|
||||
*/
|
||||
public function testWithNoValues()
|
||||
{
|
||||
$def = new EnumNodeDefinition('foo');
|
||||
$def->values(array());
|
||||
}
|
||||
|
||||
public function testGetNode()
|
||||
{
|
||||
$def = new EnumNodeDefinition('foo');
|
||||
$def->values(array('foo', 'bar'));
|
||||
|
||||
$node = $def->getNode();
|
||||
$this->assertEquals(array('foo', 'bar'), $node->getValues());
|
||||
}
|
||||
|
||||
public function testSetDeprecated()
|
||||
{
|
||||
$def = new EnumNodeDefinition('foo');
|
||||
$def->values(array('foo', 'bar'));
|
||||
$def->setDeprecated('The "%path%" node is deprecated.');
|
||||
|
||||
$node = $def->getNode();
|
||||
|
||||
$this->assertTrue($node->isDeprecated());
|
||||
$this->assertSame('The "foo" node is deprecated.', $def->getNode()->getDeprecationMessage($node->getName(), $node->getPath()));
|
||||
}
|
||||
}
|
270
vendor/symfony/config/Tests/Definition/Builder/ExprBuilderTest.php
vendored
Normal file
270
vendor/symfony/config/Tests/Definition/Builder/ExprBuilderTest.php
vendored
Normal file
|
@ -0,0 +1,270 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition\Builder;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
|
||||
|
||||
class ExprBuilderTest extends TestCase
|
||||
{
|
||||
public function testAlwaysExpression()
|
||||
{
|
||||
$test = $this->getTestBuilder()
|
||||
->always($this->returnClosure('new_value'))
|
||||
->end();
|
||||
|
||||
$this->assertFinalizedValueIs('new_value', $test);
|
||||
}
|
||||
|
||||
public function testIfTrueExpression()
|
||||
{
|
||||
$test = $this->getTestBuilder()
|
||||
->ifTrue()
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('new_value', $test, array('key' => true));
|
||||
|
||||
$test = $this->getTestBuilder()
|
||||
->ifTrue(function ($v) { return true; })
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('new_value', $test);
|
||||
|
||||
$test = $this->getTestBuilder()
|
||||
->ifTrue(function ($v) { return false; })
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('value', $test);
|
||||
}
|
||||
|
||||
public function testIfStringExpression()
|
||||
{
|
||||
$test = $this->getTestBuilder()
|
||||
->ifString()
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('new_value', $test);
|
||||
|
||||
$test = $this->getTestBuilder()
|
||||
->ifString()
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs(45, $test, array('key' => 45));
|
||||
}
|
||||
|
||||
public function testIfNullExpression()
|
||||
{
|
||||
$test = $this->getTestBuilder()
|
||||
->ifNull()
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('new_value', $test, array('key' => null));
|
||||
|
||||
$test = $this->getTestBuilder()
|
||||
->ifNull()
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('value', $test);
|
||||
}
|
||||
|
||||
public function testIfEmptyExpression()
|
||||
{
|
||||
$test = $this->getTestBuilder()
|
||||
->ifEmpty()
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('new_value', $test, array('key' => array()));
|
||||
|
||||
$test = $this->getTestBuilder()
|
||||
->ifEmpty()
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('value', $test);
|
||||
}
|
||||
|
||||
public function testIfArrayExpression()
|
||||
{
|
||||
$test = $this->getTestBuilder()
|
||||
->ifArray()
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('new_value', $test, array('key' => array()));
|
||||
|
||||
$test = $this->getTestBuilder()
|
||||
->ifArray()
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('value', $test);
|
||||
}
|
||||
|
||||
public function testIfInArrayExpression()
|
||||
{
|
||||
$test = $this->getTestBuilder()
|
||||
->ifInArray(array('foo', 'bar', 'value'))
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('new_value', $test);
|
||||
|
||||
$test = $this->getTestBuilder()
|
||||
->ifInArray(array('foo', 'bar'))
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('value', $test);
|
||||
}
|
||||
|
||||
public function testIfNotInArrayExpression()
|
||||
{
|
||||
$test = $this->getTestBuilder()
|
||||
->ifNotInArray(array('foo', 'bar'))
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('new_value', $test);
|
||||
|
||||
$test = $this->getTestBuilder()
|
||||
->ifNotInArray(array('foo', 'bar', 'value_from_config'))
|
||||
->then($this->returnClosure('new_value'))
|
||||
->end();
|
||||
$this->assertFinalizedValueIs('new_value', $test);
|
||||
}
|
||||
|
||||
public function testThenEmptyArrayExpression()
|
||||
{
|
||||
$test = $this->getTestBuilder()
|
||||
->ifString()
|
||||
->thenEmptyArray()
|
||||
->end();
|
||||
$this->assertFinalizedValueIs(array(), $test);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider castToArrayValues
|
||||
*/
|
||||
public function testcastToArrayExpression($configValue, $expectedValue)
|
||||
{
|
||||
$test = $this->getTestBuilder()
|
||||
->castToArray()
|
||||
->end();
|
||||
$this->assertFinalizedValueIs($expectedValue, $test, array('key' => $configValue));
|
||||
}
|
||||
|
||||
public function castToArrayValues()
|
||||
{
|
||||
yield array('value', array('value'));
|
||||
yield array(-3.14, array(-3.14));
|
||||
yield array(null, array(null));
|
||||
yield array(array('value'), array('value'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
|
||||
*/
|
||||
public function testThenInvalid()
|
||||
{
|
||||
$test = $this->getTestBuilder()
|
||||
->ifString()
|
||||
->thenInvalid('Invalid value')
|
||||
->end();
|
||||
$this->finalizeTestBuilder($test);
|
||||
}
|
||||
|
||||
public function testThenUnsetExpression()
|
||||
{
|
||||
$test = $this->getTestBuilder()
|
||||
->ifString()
|
||||
->thenUnset()
|
||||
->end();
|
||||
$this->assertEquals(array(), $this->finalizeTestBuilder($test));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
* @expectedExceptionMessage You must specify an if part.
|
||||
*/
|
||||
public function testEndIfPartNotSpecified()
|
||||
{
|
||||
$this->getTestBuilder()->end();
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
* @expectedExceptionMessage You must specify a then part.
|
||||
*/
|
||||
public function testEndThenPartNotSpecified()
|
||||
{
|
||||
$builder = $this->getTestBuilder();
|
||||
$builder->ifPart = 'test';
|
||||
$builder->end();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a test treebuilder with a variable node, and init the validation.
|
||||
*
|
||||
* @return TreeBuilder
|
||||
*/
|
||||
protected function getTestBuilder()
|
||||
{
|
||||
$builder = new TreeBuilder();
|
||||
|
||||
return $builder
|
||||
->root('test')
|
||||
->children()
|
||||
->variableNode('key')
|
||||
->validate()
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the validation process and finalize with the given config.
|
||||
*
|
||||
* @param TreeBuilder $testBuilder The tree builder to finalize
|
||||
* @param array $config The config you want to use for the finalization, if nothing provided
|
||||
* a simple array('key'=>'value') will be used
|
||||
*
|
||||
* @return array The finalized config values
|
||||
*/
|
||||
protected function finalizeTestBuilder($testBuilder, $config = null)
|
||||
{
|
||||
return $testBuilder
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->buildTree()
|
||||
->finalize(null === $config ? array('key' => 'value') : $config)
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a closure that will return the given value.
|
||||
*
|
||||
* @param mixed $val The value that the closure must return
|
||||
*
|
||||
* @return \Closure
|
||||
*/
|
||||
protected function returnClosure($val)
|
||||
{
|
||||
return function ($v) use ($val) {
|
||||
return $val;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Assert that the given test builder, will return the given value.
|
||||
*
|
||||
* @param mixed $value The value to test
|
||||
* @param TreeBuilder $treeBuilder The tree builder to finalize
|
||||
* @param mixed $config The config values that new to be finalized
|
||||
*/
|
||||
protected function assertFinalizedValueIs($value, $treeBuilder, $config = null)
|
||||
{
|
||||
$this->assertEquals(array('key' => $value), $this->finalizeTestBuilder($treeBuilder, $config));
|
||||
}
|
||||
}
|
95
vendor/symfony/config/Tests/Definition/Builder/NodeBuilderTest.php
vendored
Normal file
95
vendor/symfony/config/Tests/Definition/Builder/NodeBuilderTest.php
vendored
Normal file
|
@ -0,0 +1,95 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition\Builder;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\Builder\NodeBuilder as BaseNodeBuilder;
|
||||
use Symfony\Component\Config\Definition\Builder\VariableNodeDefinition as BaseVariableNodeDefinition;
|
||||
|
||||
class NodeBuilderTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
*/
|
||||
public function testThrowsAnExceptionWhenTryingToCreateANonRegisteredNodeType()
|
||||
{
|
||||
$builder = new BaseNodeBuilder();
|
||||
$builder->node('', 'foobar');
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \RuntimeException
|
||||
*/
|
||||
public function testThrowsAnExceptionWhenTheNodeClassIsNotFound()
|
||||
{
|
||||
$builder = new BaseNodeBuilder();
|
||||
$builder
|
||||
->setNodeClass('noclasstype', '\\foo\\bar\\noclass')
|
||||
->node('', 'noclasstype');
|
||||
}
|
||||
|
||||
public function testAddingANewNodeType()
|
||||
{
|
||||
$class = __NAMESPACE__.'\\SomeNodeDefinition';
|
||||
|
||||
$builder = new BaseNodeBuilder();
|
||||
$node = $builder
|
||||
->setNodeClass('newtype', $class)
|
||||
->node('', 'newtype');
|
||||
|
||||
$this->assertInstanceOf($class, $node);
|
||||
}
|
||||
|
||||
public function testOverridingAnExistingNodeType()
|
||||
{
|
||||
$class = __NAMESPACE__.'\\SomeNodeDefinition';
|
||||
|
||||
$builder = new BaseNodeBuilder();
|
||||
$node = $builder
|
||||
->setNodeClass('variable', $class)
|
||||
->node('', 'variable');
|
||||
|
||||
$this->assertInstanceOf($class, $node);
|
||||
}
|
||||
|
||||
public function testNodeTypesAreNotCaseSensitive()
|
||||
{
|
||||
$builder = new BaseNodeBuilder();
|
||||
|
||||
$node1 = $builder->node('', 'VaRiAbLe');
|
||||
$node2 = $builder->node('', 'variable');
|
||||
|
||||
$this->assertInstanceOf(\get_class($node1), $node2);
|
||||
|
||||
$builder->setNodeClass('CuStOm', __NAMESPACE__.'\\SomeNodeDefinition');
|
||||
|
||||
$node1 = $builder->node('', 'CUSTOM');
|
||||
$node2 = $builder->node('', 'custom');
|
||||
|
||||
$this->assertInstanceOf(\get_class($node1), $node2);
|
||||
}
|
||||
|
||||
public function testNumericNodeCreation()
|
||||
{
|
||||
$builder = new BaseNodeBuilder();
|
||||
|
||||
$node = $builder->integerNode('foo')->min(3)->max(5);
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Definition\Builder\IntegerNodeDefinition', $node);
|
||||
|
||||
$node = $builder->floatNode('bar')->min(3.0)->max(5.0);
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Definition\Builder\FloatNodeDefinition', $node);
|
||||
}
|
||||
}
|
||||
|
||||
class SomeNodeDefinition extends BaseVariableNodeDefinition
|
||||
{
|
||||
}
|
104
vendor/symfony/config/Tests/Definition/Builder/NumericNodeDefinitionTest.php
vendored
Normal file
104
vendor/symfony/config/Tests/Definition/Builder/NumericNodeDefinitionTest.php
vendored
Normal file
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition\Builder;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\Builder\FloatNodeDefinition;
|
||||
use Symfony\Component\Config\Definition\Builder\IntegerNodeDefinition;
|
||||
use Symfony\Component\Config\Definition\Builder\IntegerNodeDefinition as NumericNodeDefinition;
|
||||
|
||||
class NumericNodeDefinitionTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage You cannot define a min(4) as you already have a max(3)
|
||||
*/
|
||||
public function testIncoherentMinAssertion()
|
||||
{
|
||||
$def = new NumericNodeDefinition('foo');
|
||||
$def->max(3)->min(4);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage You cannot define a max(2) as you already have a min(3)
|
||||
*/
|
||||
public function testIncoherentMaxAssertion()
|
||||
{
|
||||
$node = new NumericNodeDefinition('foo');
|
||||
$node->min(3)->max(2);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
|
||||
* @expectedExceptionMessage The value 4 is too small for path "foo". Should be greater than or equal to 5
|
||||
*/
|
||||
public function testIntegerMinAssertion()
|
||||
{
|
||||
$def = new IntegerNodeDefinition('foo');
|
||||
$def->min(5)->getNode()->finalize(4);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
|
||||
* @expectedExceptionMessage The value 4 is too big for path "foo". Should be less than or equal to 3
|
||||
*/
|
||||
public function testIntegerMaxAssertion()
|
||||
{
|
||||
$def = new IntegerNodeDefinition('foo');
|
||||
$def->max(3)->getNode()->finalize(4);
|
||||
}
|
||||
|
||||
public function testIntegerValidMinMaxAssertion()
|
||||
{
|
||||
$def = new IntegerNodeDefinition('foo');
|
||||
$node = $def->min(3)->max(7)->getNode();
|
||||
$this->assertEquals(4, $node->finalize(4));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
|
||||
* @expectedExceptionMessage The value 400 is too small for path "foo". Should be greater than or equal to 500
|
||||
*/
|
||||
public function testFloatMinAssertion()
|
||||
{
|
||||
$def = new FloatNodeDefinition('foo');
|
||||
$def->min(5E2)->getNode()->finalize(4e2);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
|
||||
* @expectedExceptionMessage The value 4.3 is too big for path "foo". Should be less than or equal to 0.3
|
||||
*/
|
||||
public function testFloatMaxAssertion()
|
||||
{
|
||||
$def = new FloatNodeDefinition('foo');
|
||||
$def->max(0.3)->getNode()->finalize(4.3);
|
||||
}
|
||||
|
||||
public function testFloatValidMinMaxAssertion()
|
||||
{
|
||||
$def = new FloatNodeDefinition('foo');
|
||||
$node = $def->min(3.0)->max(7e2)->getNode();
|
||||
$this->assertEquals(4.5, $node->finalize(4.5));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidDefinitionException
|
||||
* @expectedExceptionMessage ->cannotBeEmpty() is not applicable to NumericNodeDefinition.
|
||||
*/
|
||||
public function testCannotBeEmptyThrowsAnException()
|
||||
{
|
||||
$def = new NumericNodeDefinition('foo');
|
||||
$def->cannotBeEmpty();
|
||||
}
|
||||
}
|
134
vendor/symfony/config/Tests/Definition/Builder/TreeBuilderTest.php
vendored
Normal file
134
vendor/symfony/config/Tests/Definition/Builder/TreeBuilderTest.php
vendored
Normal file
|
@ -0,0 +1,134 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition\Builder;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
|
||||
use Symfony\Component\Config\Tests\Fixtures\Builder\NodeBuilder as CustomNodeBuilder;
|
||||
|
||||
class TreeBuilderTest extends TestCase
|
||||
{
|
||||
public function testUsingACustomNodeBuilder()
|
||||
{
|
||||
$builder = new TreeBuilder();
|
||||
$root = $builder->root('custom', 'array', new CustomNodeBuilder());
|
||||
|
||||
$nodeBuilder = $root->children();
|
||||
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\NodeBuilder', $nodeBuilder);
|
||||
|
||||
$nodeBuilder = $nodeBuilder->arrayNode('deeper')->children();
|
||||
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\NodeBuilder', $nodeBuilder);
|
||||
}
|
||||
|
||||
public function testOverrideABuiltInNodeType()
|
||||
{
|
||||
$builder = new TreeBuilder();
|
||||
$root = $builder->root('override', 'array', new CustomNodeBuilder());
|
||||
|
||||
$definition = $root->children()->variableNode('variable');
|
||||
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\VariableNodeDefinition', $definition);
|
||||
}
|
||||
|
||||
public function testAddANodeType()
|
||||
{
|
||||
$builder = new TreeBuilder();
|
||||
$root = $builder->root('override', 'array', new CustomNodeBuilder());
|
||||
|
||||
$definition = $root->children()->barNode('variable');
|
||||
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\BarNodeDefinition', $definition);
|
||||
}
|
||||
|
||||
public function testCreateABuiltInNodeTypeWithACustomNodeBuilder()
|
||||
{
|
||||
$builder = new TreeBuilder();
|
||||
$root = $builder->root('builtin', 'array', new CustomNodeBuilder());
|
||||
|
||||
$definition = $root->children()->booleanNode('boolean');
|
||||
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition', $definition);
|
||||
}
|
||||
|
||||
public function testPrototypedArrayNodeUseTheCustomNodeBuilder()
|
||||
{
|
||||
$builder = new TreeBuilder();
|
||||
$root = $builder->root('override', 'array', new CustomNodeBuilder());
|
||||
|
||||
$root->prototype('bar')->end();
|
||||
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\BarNode', $root->getNode(true)->getPrototype());
|
||||
}
|
||||
|
||||
public function testAnExtendedNodeBuilderGetsPropagatedToTheChildren()
|
||||
{
|
||||
$builder = new TreeBuilder();
|
||||
|
||||
$builder->root('propagation')
|
||||
->children()
|
||||
->setNodeClass('extended', 'Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition')
|
||||
->node('foo', 'extended')->end()
|
||||
->arrayNode('child')
|
||||
->children()
|
||||
->node('foo', 'extended')
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end();
|
||||
|
||||
$node = $builder->buildTree();
|
||||
$children = $node->getChildren();
|
||||
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Definition\BooleanNode', $children['foo']);
|
||||
|
||||
$childChildren = $children['child']->getChildren();
|
||||
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Definition\BooleanNode', $childChildren['foo']);
|
||||
}
|
||||
|
||||
public function testDefinitionInfoGetsTransferredToNode()
|
||||
{
|
||||
$builder = new TreeBuilder();
|
||||
|
||||
$builder->root('test')->info('root info')
|
||||
->children()
|
||||
->node('child', 'variable')->info('child info')->defaultValue('default')
|
||||
->end()
|
||||
->end();
|
||||
|
||||
$tree = $builder->buildTree();
|
||||
$children = $tree->getChildren();
|
||||
|
||||
$this->assertEquals('root info', $tree->getInfo());
|
||||
$this->assertEquals('child info', $children['child']->getInfo());
|
||||
}
|
||||
|
||||
public function testDefinitionExampleGetsTransferredToNode()
|
||||
{
|
||||
$builder = new TreeBuilder();
|
||||
|
||||
$builder->root('test')
|
||||
->example(array('key' => 'value'))
|
||||
->children()
|
||||
->node('child', 'variable')->info('child info')->defaultValue('default')->example('example')
|
||||
->end()
|
||||
->end();
|
||||
|
||||
$tree = $builder->buildTree();
|
||||
$children = $tree->getChildren();
|
||||
|
||||
$this->assertInternalType('array', $tree->getExample());
|
||||
$this->assertEquals('example', $children['child']->getExample());
|
||||
}
|
||||
}
|
114
vendor/symfony/config/Tests/Definition/Dumper/XmlReferenceDumperTest.php
vendored
Normal file
114
vendor/symfony/config/Tests/Definition/Dumper/XmlReferenceDumperTest.php
vendored
Normal file
|
@ -0,0 +1,114 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition\Dumper;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\Dumper\XmlReferenceDumper;
|
||||
use Symfony\Component\Config\Tests\Fixtures\Configuration\ExampleConfiguration;
|
||||
|
||||
class XmlReferenceDumperTest extends TestCase
|
||||
{
|
||||
public function testDumper()
|
||||
{
|
||||
$configuration = new ExampleConfiguration();
|
||||
|
||||
$dumper = new XmlReferenceDumper();
|
||||
$this->assertEquals($this->getConfigurationAsString(), $dumper->dump($configuration));
|
||||
}
|
||||
|
||||
public function testNamespaceDumper()
|
||||
{
|
||||
$configuration = new ExampleConfiguration();
|
||||
|
||||
$dumper = new XmlReferenceDumper();
|
||||
$this->assertEquals(str_replace('http://example.org/schema/dic/acme_root', 'http://symfony.com/schema/dic/symfony', $this->getConfigurationAsString()), $dumper->dump($configuration, 'http://symfony.com/schema/dic/symfony'));
|
||||
}
|
||||
|
||||
private function getConfigurationAsString()
|
||||
{
|
||||
return str_replace("\n", PHP_EOL, <<<'EOL'
|
||||
<!-- Namespace: http://example.org/schema/dic/acme_root -->
|
||||
<!-- scalar-required: Required -->
|
||||
<!-- scalar-deprecated: Deprecated (The child node "scalar_deprecated" at path "acme_root" is deprecated.) -->
|
||||
<!-- scalar-deprecated-with-message: Deprecated (Deprecation custom message for "scalar_deprecated_with_message" at "acme_root") -->
|
||||
<!-- enum-with-default: One of "this"; "that" -->
|
||||
<!-- enum: One of "this"; "that" -->
|
||||
<config
|
||||
boolean="true"
|
||||
scalar-empty=""
|
||||
scalar-null="null"
|
||||
scalar-true="true"
|
||||
scalar-false="false"
|
||||
scalar-default="default"
|
||||
scalar-array-empty=""
|
||||
scalar-array-defaults="elem1,elem2"
|
||||
scalar-required=""
|
||||
scalar-deprecated=""
|
||||
scalar-deprecated-with-message=""
|
||||
node-with-a-looong-name=""
|
||||
enum-with-default="this"
|
||||
enum=""
|
||||
>
|
||||
|
||||
<!-- some info -->
|
||||
<!--
|
||||
child3: this is a long
|
||||
multi-line info text
|
||||
which should be indented;
|
||||
Example: example setting
|
||||
-->
|
||||
<array
|
||||
child1=""
|
||||
child2=""
|
||||
child3=""
|
||||
/>
|
||||
|
||||
<!-- prototype -->
|
||||
<scalar-prototyped>scalar value</scalar-prototyped>
|
||||
|
||||
<!-- prototype: Parameter name -->
|
||||
<parameter name="parameter name">scalar value</parameter>
|
||||
|
||||
<!-- prototype -->
|
||||
<connection
|
||||
user=""
|
||||
pass=""
|
||||
/>
|
||||
|
||||
<!-- prototype -->
|
||||
<cms-page page="cms page page">
|
||||
|
||||
<!-- prototype -->
|
||||
<!-- title: Required -->
|
||||
<!-- path: Required -->
|
||||
<page
|
||||
locale="page locale"
|
||||
title=""
|
||||
path=""
|
||||
/>
|
||||
|
||||
</cms-page>
|
||||
|
||||
<!-- prototype -->
|
||||
<pipou name="pipou name">
|
||||
|
||||
<!-- prototype -->
|
||||
<name didou="" />
|
||||
|
||||
</pipou>
|
||||
|
||||
</config>
|
||||
|
||||
EOL
|
||||
);
|
||||
}
|
||||
}
|
143
vendor/symfony/config/Tests/Definition/Dumper/YamlReferenceDumperTest.php
vendored
Normal file
143
vendor/symfony/config/Tests/Definition/Dumper/YamlReferenceDumperTest.php
vendored
Normal file
|
@ -0,0 +1,143 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition\Dumper;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\Dumper\YamlReferenceDumper;
|
||||
use Symfony\Component\Config\Tests\Fixtures\Configuration\ExampleConfiguration;
|
||||
|
||||
class YamlReferenceDumperTest extends TestCase
|
||||
{
|
||||
public function testDumper()
|
||||
{
|
||||
$configuration = new ExampleConfiguration();
|
||||
|
||||
$dumper = new YamlReferenceDumper();
|
||||
|
||||
$this->assertEquals($this->getConfigurationAsString(), $dumper->dump($configuration));
|
||||
}
|
||||
|
||||
public function provideDumpAtPath()
|
||||
{
|
||||
return array(
|
||||
'Regular node' => array('scalar_true', <<<EOL
|
||||
scalar_true: true
|
||||
EOL
|
||||
),
|
||||
'Array node' => array('array', <<<EOL
|
||||
# some info
|
||||
array:
|
||||
child1: ~
|
||||
child2: ~
|
||||
|
||||
# this is a long
|
||||
# multi-line info text
|
||||
# which should be indented
|
||||
child3: ~ # Example: example setting
|
||||
EOL
|
||||
),
|
||||
'Regular nested' => array('array.child2', <<<EOL
|
||||
child2: ~
|
||||
EOL
|
||||
),
|
||||
'Prototype' => array('cms_pages.page', <<<EOL
|
||||
# Prototype
|
||||
page:
|
||||
|
||||
# Prototype
|
||||
locale:
|
||||
title: ~ # Required
|
||||
path: ~ # Required
|
||||
EOL
|
||||
),
|
||||
'Nested prototype' => array('cms_pages.page.locale', <<<EOL
|
||||
# Prototype
|
||||
locale:
|
||||
title: ~ # Required
|
||||
path: ~ # Required
|
||||
EOL
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideDumpAtPath
|
||||
*/
|
||||
public function testDumpAtPath($path, $expected)
|
||||
{
|
||||
$configuration = new ExampleConfiguration();
|
||||
|
||||
$dumper = new YamlReferenceDumper();
|
||||
|
||||
$this->assertSame(trim($expected), trim($dumper->dumpAtPath($configuration, $path)));
|
||||
}
|
||||
|
||||
private function getConfigurationAsString()
|
||||
{
|
||||
return <<<'EOL'
|
||||
acme_root:
|
||||
boolean: true
|
||||
scalar_empty: ~
|
||||
scalar_null: null
|
||||
scalar_true: true
|
||||
scalar_false: false
|
||||
scalar_default: default
|
||||
scalar_array_empty: []
|
||||
scalar_array_defaults:
|
||||
|
||||
# Defaults:
|
||||
- elem1
|
||||
- elem2
|
||||
scalar_required: ~ # Required
|
||||
scalar_deprecated: ~ # Deprecated (The child node "scalar_deprecated" at path "acme_root" is deprecated.)
|
||||
scalar_deprecated_with_message: ~ # Deprecated (Deprecation custom message for "scalar_deprecated_with_message" at "acme_root")
|
||||
node_with_a_looong_name: ~
|
||||
enum_with_default: this # One of "this"; "that"
|
||||
enum: ~ # One of "this"; "that"
|
||||
|
||||
# some info
|
||||
array:
|
||||
child1: ~
|
||||
child2: ~
|
||||
|
||||
# this is a long
|
||||
# multi-line info text
|
||||
# which should be indented
|
||||
child3: ~ # Example: example setting
|
||||
scalar_prototyped: []
|
||||
parameters:
|
||||
|
||||
# Prototype: Parameter name
|
||||
name: ~
|
||||
connections:
|
||||
|
||||
# Prototype
|
||||
-
|
||||
user: ~
|
||||
pass: ~
|
||||
cms_pages:
|
||||
|
||||
# Prototype
|
||||
page:
|
||||
|
||||
# Prototype
|
||||
locale:
|
||||
title: ~ # Required
|
||||
path: ~ # Required
|
||||
pipou:
|
||||
|
||||
# Prototype
|
||||
name: []
|
||||
|
||||
EOL;
|
||||
}
|
||||
}
|
55
vendor/symfony/config/Tests/Definition/EnumNodeTest.php
vendored
Normal file
55
vendor/symfony/config/Tests/Definition/EnumNodeTest.php
vendored
Normal file
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\EnumNode;
|
||||
|
||||
class EnumNodeTest extends TestCase
|
||||
{
|
||||
public function testFinalizeValue()
|
||||
{
|
||||
$node = new EnumNode('foo', null, array('foo', 'bar'));
|
||||
$this->assertSame('foo', $node->finalize('foo'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage $values must contain at least one element.
|
||||
*/
|
||||
public function testConstructionWithNoValues()
|
||||
{
|
||||
new EnumNode('foo', null, array());
|
||||
}
|
||||
|
||||
public function testConstructionWithOneValue()
|
||||
{
|
||||
$node = new EnumNode('foo', null, array('foo'));
|
||||
$this->assertSame('foo', $node->finalize('foo'));
|
||||
}
|
||||
|
||||
public function testConstructionWithOneDistinctValue()
|
||||
{
|
||||
$node = new EnumNode('foo', null, array('foo', 'foo'));
|
||||
$this->assertSame('foo', $node->finalize('foo'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
|
||||
* @expectedExceptionMessage The value "foobar" is not allowed for path "foo". Permissible values: "foo", "bar"
|
||||
*/
|
||||
public function testFinalizeWithInvalidValue()
|
||||
{
|
||||
$node = new EnumNode('foo', null, array('foo', 'bar'));
|
||||
$node->finalize('foobar');
|
||||
}
|
||||
}
|
74
vendor/symfony/config/Tests/Definition/FinalizationTest.php
vendored
Normal file
74
vendor/symfony/config/Tests/Definition/FinalizationTest.php
vendored
Normal file
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
|
||||
use Symfony\Component\Config\Definition\NodeInterface;
|
||||
use Symfony\Component\Config\Definition\Processor;
|
||||
|
||||
class FinalizationTest extends TestCase
|
||||
{
|
||||
public function testUnsetKeyWithDeepHierarchy()
|
||||
{
|
||||
$tb = new TreeBuilder();
|
||||
$tree = $tb
|
||||
->root('config', 'array')
|
||||
->children()
|
||||
->node('level1', 'array')
|
||||
->canBeUnset()
|
||||
->children()
|
||||
->node('level2', 'array')
|
||||
->canBeUnset()
|
||||
->children()
|
||||
->node('somevalue', 'scalar')->end()
|
||||
->node('anothervalue', 'scalar')->end()
|
||||
->end()
|
||||
->end()
|
||||
->node('level1_scalar', 'scalar')->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->buildTree()
|
||||
;
|
||||
|
||||
$a = array(
|
||||
'level1' => array(
|
||||
'level2' => array(
|
||||
'somevalue' => 'foo',
|
||||
'anothervalue' => 'bar',
|
||||
),
|
||||
'level1_scalar' => 'foo',
|
||||
),
|
||||
);
|
||||
|
||||
$b = array(
|
||||
'level1' => array(
|
||||
'level2' => false,
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'level1' => array(
|
||||
'level1_scalar' => 'foo',
|
||||
),
|
||||
), $this->process($tree, array($a, $b)));
|
||||
}
|
||||
|
||||
protected function process(NodeInterface $tree, array $configs)
|
||||
{
|
||||
$processor = new Processor();
|
||||
|
||||
return $processor->process($tree, $configs);
|
||||
}
|
||||
}
|
78
vendor/symfony/config/Tests/Definition/FloatNodeTest.php
vendored
Normal file
78
vendor/symfony/config/Tests/Definition/FloatNodeTest.php
vendored
Normal file
|
@ -0,0 +1,78 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\FloatNode;
|
||||
|
||||
class FloatNodeTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider getValidValues
|
||||
*/
|
||||
public function testNormalize($value)
|
||||
{
|
||||
$node = new FloatNode('test');
|
||||
$this->assertSame($value, $node->normalize($value));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getValidValues
|
||||
*
|
||||
* @param int $value
|
||||
*/
|
||||
public function testValidNonEmptyValues($value)
|
||||
{
|
||||
$node = new FloatNode('test');
|
||||
$node->setAllowEmptyValue(false);
|
||||
|
||||
$this->assertSame($value, $node->finalize($value));
|
||||
}
|
||||
|
||||
public function getValidValues()
|
||||
{
|
||||
return array(
|
||||
array(1798.0),
|
||||
array(-678.987),
|
||||
array(12.56E45),
|
||||
array(0.0),
|
||||
// Integer are accepted too, they will be cast
|
||||
array(17),
|
||||
array(-10),
|
||||
array(0),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getInvalidValues
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidTypeException
|
||||
*/
|
||||
public function testNormalizeThrowsExceptionOnInvalidValues($value)
|
||||
{
|
||||
$node = new FloatNode('test');
|
||||
$node->normalize($value);
|
||||
}
|
||||
|
||||
public function getInvalidValues()
|
||||
{
|
||||
return array(
|
||||
array(null),
|
||||
array(''),
|
||||
array('foo'),
|
||||
array(true),
|
||||
array(false),
|
||||
array(array()),
|
||||
array(array('foo' => 'bar')),
|
||||
array(new \stdClass()),
|
||||
);
|
||||
}
|
||||
}
|
75
vendor/symfony/config/Tests/Definition/IntegerNodeTest.php
vendored
Normal file
75
vendor/symfony/config/Tests/Definition/IntegerNodeTest.php
vendored
Normal file
|
@ -0,0 +1,75 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\IntegerNode;
|
||||
|
||||
class IntegerNodeTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider getValidValues
|
||||
*/
|
||||
public function testNormalize($value)
|
||||
{
|
||||
$node = new IntegerNode('test');
|
||||
$this->assertSame($value, $node->normalize($value));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getValidValues
|
||||
*
|
||||
* @param int $value
|
||||
*/
|
||||
public function testValidNonEmptyValues($value)
|
||||
{
|
||||
$node = new IntegerNode('test');
|
||||
$node->setAllowEmptyValue(false);
|
||||
|
||||
$this->assertSame($value, $node->finalize($value));
|
||||
}
|
||||
|
||||
public function getValidValues()
|
||||
{
|
||||
return array(
|
||||
array(1798),
|
||||
array(-678),
|
||||
array(0),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getInvalidValues
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidTypeException
|
||||
*/
|
||||
public function testNormalizeThrowsExceptionOnInvalidValues($value)
|
||||
{
|
||||
$node = new IntegerNode('test');
|
||||
$node->normalize($value);
|
||||
}
|
||||
|
||||
public function getInvalidValues()
|
||||
{
|
||||
return array(
|
||||
array(null),
|
||||
array(''),
|
||||
array('foo'),
|
||||
array(true),
|
||||
array(false),
|
||||
array(0.0),
|
||||
array(0.1),
|
||||
array(array()),
|
||||
array(array('foo' => 'bar')),
|
||||
array(new \stdClass()),
|
||||
);
|
||||
}
|
||||
}
|
196
vendor/symfony/config/Tests/Definition/MergeTest.php
vendored
Normal file
196
vendor/symfony/config/Tests/Definition/MergeTest.php
vendored
Normal file
|
@ -0,0 +1,196 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
|
||||
|
||||
class MergeTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\ForbiddenOverwriteException
|
||||
*/
|
||||
public function testForbiddenOverwrite()
|
||||
{
|
||||
$tb = new TreeBuilder();
|
||||
$tree = $tb
|
||||
->root('root', 'array')
|
||||
->children()
|
||||
->node('foo', 'scalar')
|
||||
->cannotBeOverwritten()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->buildTree()
|
||||
;
|
||||
|
||||
$a = array(
|
||||
'foo' => 'bar',
|
||||
);
|
||||
|
||||
$b = array(
|
||||
'foo' => 'moo',
|
||||
);
|
||||
|
||||
$tree->merge($a, $b);
|
||||
}
|
||||
|
||||
public function testUnsetKey()
|
||||
{
|
||||
$tb = new TreeBuilder();
|
||||
$tree = $tb
|
||||
->root('root', 'array')
|
||||
->children()
|
||||
->node('foo', 'scalar')->end()
|
||||
->node('bar', 'scalar')->end()
|
||||
->node('unsettable', 'array')
|
||||
->canBeUnset()
|
||||
->children()
|
||||
->node('foo', 'scalar')->end()
|
||||
->node('bar', 'scalar')->end()
|
||||
->end()
|
||||
->end()
|
||||
->node('unsetted', 'array')
|
||||
->canBeUnset()
|
||||
->prototype('scalar')->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->buildTree()
|
||||
;
|
||||
|
||||
$a = array(
|
||||
'foo' => 'bar',
|
||||
'unsettable' => array(
|
||||
'foo' => 'a',
|
||||
'bar' => 'b',
|
||||
),
|
||||
'unsetted' => false,
|
||||
);
|
||||
|
||||
$b = array(
|
||||
'foo' => 'moo',
|
||||
'bar' => 'b',
|
||||
'unsettable' => false,
|
||||
'unsetted' => array('a', 'b'),
|
||||
);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'foo' => 'moo',
|
||||
'bar' => 'b',
|
||||
'unsettable' => false,
|
||||
'unsetted' => array('a', 'b'),
|
||||
), $tree->merge($a, $b));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
|
||||
*/
|
||||
public function testDoesNotAllowNewKeysInSubsequentConfigs()
|
||||
{
|
||||
$tb = new TreeBuilder();
|
||||
$tree = $tb
|
||||
->root('config', 'array')
|
||||
->children()
|
||||
->node('test', 'array')
|
||||
->disallowNewKeysInSubsequentConfigs()
|
||||
->useAttributeAsKey('key')
|
||||
->prototype('array')
|
||||
->children()
|
||||
->node('value', 'scalar')->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->buildTree();
|
||||
|
||||
$a = array(
|
||||
'test' => array(
|
||||
'a' => array('value' => 'foo'),
|
||||
),
|
||||
);
|
||||
|
||||
$b = array(
|
||||
'test' => array(
|
||||
'b' => array('value' => 'foo'),
|
||||
),
|
||||
);
|
||||
|
||||
$tree->merge($a, $b);
|
||||
}
|
||||
|
||||
public function testPerformsNoDeepMerging()
|
||||
{
|
||||
$tb = new TreeBuilder();
|
||||
|
||||
$tree = $tb
|
||||
->root('config', 'array')
|
||||
->children()
|
||||
->node('no_deep_merging', 'array')
|
||||
->performNoDeepMerging()
|
||||
->children()
|
||||
->node('foo', 'scalar')->end()
|
||||
->node('bar', 'scalar')->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->buildTree()
|
||||
;
|
||||
|
||||
$a = array(
|
||||
'no_deep_merging' => array(
|
||||
'foo' => 'a',
|
||||
'bar' => 'b',
|
||||
),
|
||||
);
|
||||
|
||||
$b = array(
|
||||
'no_deep_merging' => array(
|
||||
'c' => 'd',
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertEquals(array(
|
||||
'no_deep_merging' => array(
|
||||
'c' => 'd',
|
||||
),
|
||||
), $tree->merge($a, $b));
|
||||
}
|
||||
|
||||
public function testPrototypeWithoutAKeyAttribute()
|
||||
{
|
||||
$tb = new TreeBuilder();
|
||||
|
||||
$tree = $tb
|
||||
->root('config', 'array')
|
||||
->children()
|
||||
->arrayNode('append_elements')
|
||||
->prototype('scalar')->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->buildTree()
|
||||
;
|
||||
|
||||
$a = array(
|
||||
'append_elements' => array('a', 'b'),
|
||||
);
|
||||
|
||||
$b = array(
|
||||
'append_elements' => array('c', 'd'),
|
||||
);
|
||||
|
||||
$this->assertEquals(array('append_elements' => array('a', 'b', 'c', 'd')), $tree->merge($a, $b));
|
||||
}
|
||||
}
|
230
vendor/symfony/config/Tests/Definition/NormalizationTest.php
vendored
Normal file
230
vendor/symfony/config/Tests/Definition/NormalizationTest.php
vendored
Normal file
|
@ -0,0 +1,230 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
|
||||
use Symfony\Component\Config\Definition\NodeInterface;
|
||||
|
||||
class NormalizationTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider getEncoderTests
|
||||
*/
|
||||
public function testNormalizeEncoders($denormalized)
|
||||
{
|
||||
$tb = new TreeBuilder();
|
||||
$tree = $tb
|
||||
->root('root_name', 'array')
|
||||
->fixXmlConfig('encoder')
|
||||
->children()
|
||||
->node('encoders', 'array')
|
||||
->useAttributeAsKey('class')
|
||||
->prototype('array')
|
||||
->beforeNormalization()->ifString()->then(function ($v) { return array('algorithm' => $v); })->end()
|
||||
->children()
|
||||
->node('algorithm', 'scalar')->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->buildTree()
|
||||
;
|
||||
|
||||
$normalized = array(
|
||||
'encoders' => array(
|
||||
'foo' => array('algorithm' => 'plaintext'),
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertNormalized($tree, $denormalized, $normalized);
|
||||
}
|
||||
|
||||
public function getEncoderTests()
|
||||
{
|
||||
$configs = array();
|
||||
|
||||
// XML
|
||||
$configs[] = array(
|
||||
'encoder' => array(
|
||||
array('class' => 'foo', 'algorithm' => 'plaintext'),
|
||||
),
|
||||
);
|
||||
|
||||
// XML when only one element of this type
|
||||
$configs[] = array(
|
||||
'encoder' => array('class' => 'foo', 'algorithm' => 'plaintext'),
|
||||
);
|
||||
|
||||
// YAML/PHP
|
||||
$configs[] = array(
|
||||
'encoders' => array(
|
||||
array('class' => 'foo', 'algorithm' => 'plaintext'),
|
||||
),
|
||||
);
|
||||
|
||||
// YAML/PHP
|
||||
$configs[] = array(
|
||||
'encoders' => array(
|
||||
'foo' => 'plaintext',
|
||||
),
|
||||
);
|
||||
|
||||
// YAML/PHP
|
||||
$configs[] = array(
|
||||
'encoders' => array(
|
||||
'foo' => array('algorithm' => 'plaintext'),
|
||||
),
|
||||
);
|
||||
|
||||
return array_map(function ($v) {
|
||||
return array($v);
|
||||
}, $configs);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getAnonymousKeysTests
|
||||
*/
|
||||
public function testAnonymousKeysArray($denormalized)
|
||||
{
|
||||
$tb = new TreeBuilder();
|
||||
$tree = $tb
|
||||
->root('root', 'array')
|
||||
->children()
|
||||
->node('logout', 'array')
|
||||
->fixXmlConfig('handler')
|
||||
->children()
|
||||
->node('handlers', 'array')
|
||||
->prototype('scalar')->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->buildTree()
|
||||
;
|
||||
|
||||
$normalized = array('logout' => array('handlers' => array('a', 'b', 'c')));
|
||||
|
||||
$this->assertNormalized($tree, $denormalized, $normalized);
|
||||
}
|
||||
|
||||
public function getAnonymousKeysTests()
|
||||
{
|
||||
$configs = array();
|
||||
|
||||
$configs[] = array(
|
||||
'logout' => array(
|
||||
'handlers' => array('a', 'b', 'c'),
|
||||
),
|
||||
);
|
||||
|
||||
$configs[] = array(
|
||||
'logout' => array(
|
||||
'handler' => array('a', 'b', 'c'),
|
||||
),
|
||||
);
|
||||
|
||||
return array_map(function ($v) { return array($v); }, $configs);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getNumericKeysTests
|
||||
*/
|
||||
public function testNumericKeysAsAttributes($denormalized)
|
||||
{
|
||||
$normalized = array(
|
||||
'thing' => array(42 => array('foo', 'bar'), 1337 => array('baz', 'qux')),
|
||||
);
|
||||
|
||||
$this->assertNormalized($this->getNumericKeysTestTree(), $denormalized, $normalized);
|
||||
}
|
||||
|
||||
public function getNumericKeysTests()
|
||||
{
|
||||
$configs = array();
|
||||
|
||||
$configs[] = array(
|
||||
'thing' => array(
|
||||
42 => array('foo', 'bar'), 1337 => array('baz', 'qux'),
|
||||
),
|
||||
);
|
||||
|
||||
$configs[] = array(
|
||||
'thing' => array(
|
||||
array('foo', 'bar', 'id' => 42), array('baz', 'qux', 'id' => 1337),
|
||||
),
|
||||
);
|
||||
|
||||
return array_map(function ($v) { return array($v); }, $configs);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
|
||||
* @expectedExceptionMessage The attribute "id" must be set for path "root.thing".
|
||||
*/
|
||||
public function testNonAssociativeArrayThrowsExceptionIfAttributeNotSet()
|
||||
{
|
||||
$denormalized = array(
|
||||
'thing' => array(
|
||||
array('foo', 'bar'), array('baz', 'qux'),
|
||||
),
|
||||
);
|
||||
|
||||
$this->assertNormalized($this->getNumericKeysTestTree(), $denormalized, array());
|
||||
}
|
||||
|
||||
public function testAssociativeArrayPreserveKeys()
|
||||
{
|
||||
$tb = new TreeBuilder();
|
||||
$tree = $tb
|
||||
->root('root', 'array')
|
||||
->prototype('array')
|
||||
->children()
|
||||
->node('foo', 'scalar')->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->buildTree()
|
||||
;
|
||||
|
||||
$data = array('first' => array('foo' => 'bar'));
|
||||
|
||||
$this->assertNormalized($tree, $data, $data);
|
||||
}
|
||||
|
||||
public static function assertNormalized(NodeInterface $tree, $denormalized, $normalized)
|
||||
{
|
||||
self::assertSame($normalized, $tree->normalize($denormalized));
|
||||
}
|
||||
|
||||
private function getNumericKeysTestTree()
|
||||
{
|
||||
$tb = new TreeBuilder();
|
||||
$tree = $tb
|
||||
->root('root', 'array')
|
||||
->children()
|
||||
->node('thing', 'array')
|
||||
->useAttributeAsKey('id')
|
||||
->prototype('array')
|
||||
->prototype('scalar')->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->buildTree()
|
||||
;
|
||||
|
||||
return $tree;
|
||||
}
|
||||
}
|
342
vendor/symfony/config/Tests/Definition/PrototypedArrayNodeTest.php
vendored
Normal file
342
vendor/symfony/config/Tests/Definition/PrototypedArrayNodeTest.php
vendored
Normal file
|
@ -0,0 +1,342 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\ArrayNode;
|
||||
use Symfony\Component\Config\Definition\PrototypedArrayNode;
|
||||
use Symfony\Component\Config\Definition\ScalarNode;
|
||||
use Symfony\Component\Config\Definition\VariableNode;
|
||||
|
||||
class PrototypedArrayNodeTest extends TestCase
|
||||
{
|
||||
public function testGetDefaultValueReturnsAnEmptyArrayForPrototypes()
|
||||
{
|
||||
$node = new PrototypedArrayNode('root');
|
||||
$prototype = new ArrayNode(null, $node);
|
||||
$node->setPrototype($prototype);
|
||||
$this->assertEmpty($node->getDefaultValue());
|
||||
}
|
||||
|
||||
public function testGetDefaultValueReturnsDefaultValueForPrototypes()
|
||||
{
|
||||
$node = new PrototypedArrayNode('root');
|
||||
$prototype = new ArrayNode(null, $node);
|
||||
$node->setPrototype($prototype);
|
||||
$node->setDefaultValue(array('test'));
|
||||
$this->assertEquals(array('test'), $node->getDefaultValue());
|
||||
}
|
||||
|
||||
// a remapped key (e.g. "mapping" -> "mappings") should be unset after being used
|
||||
public function testRemappedKeysAreUnset()
|
||||
{
|
||||
$node = new ArrayNode('root');
|
||||
$mappingsNode = new PrototypedArrayNode('mappings');
|
||||
$node->addChild($mappingsNode);
|
||||
|
||||
// each item under mappings is just a scalar
|
||||
$prototype = new ScalarNode(null, $mappingsNode);
|
||||
$mappingsNode->setPrototype($prototype);
|
||||
|
||||
$remappings = array();
|
||||
$remappings[] = array('mapping', 'mappings');
|
||||
$node->setXmlRemappings($remappings);
|
||||
|
||||
$normalized = $node->normalize(array('mapping' => array('foo', 'bar')));
|
||||
$this->assertEquals(array('mappings' => array('foo', 'bar')), $normalized);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that when a key attribute is mapped, that key is removed from the array.
|
||||
*
|
||||
* <things>
|
||||
* <option id="option1" value="foo">
|
||||
* <option id="option2" value="bar">
|
||||
* </things>
|
||||
*
|
||||
* The above should finally be mapped to an array that looks like this
|
||||
* (because "id" is the key attribute).
|
||||
*
|
||||
* array(
|
||||
* 'things' => array(
|
||||
* 'option1' => 'foo',
|
||||
* 'option2' => 'bar',
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
public function testMappedAttributeKeyIsRemoved()
|
||||
{
|
||||
$node = new PrototypedArrayNode('root');
|
||||
$node->setKeyAttribute('id', true);
|
||||
|
||||
// each item under the root is an array, with one scalar item
|
||||
$prototype = new ArrayNode(null, $node);
|
||||
$prototype->addChild(new ScalarNode('foo'));
|
||||
$node->setPrototype($prototype);
|
||||
|
||||
$children = array();
|
||||
$children[] = array('id' => 'item_name', 'foo' => 'bar');
|
||||
$normalized = $node->normalize($children);
|
||||
|
||||
$expected = array();
|
||||
$expected['item_name'] = array('foo' => 'bar');
|
||||
$this->assertEquals($expected, $normalized);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the opposite of the testMappedAttributeKeyIsRemoved because
|
||||
* the removal can be toggled with an option.
|
||||
*/
|
||||
public function testMappedAttributeKeyNotRemoved()
|
||||
{
|
||||
$node = new PrototypedArrayNode('root');
|
||||
$node->setKeyAttribute('id', false);
|
||||
|
||||
// each item under the root is an array, with two scalar items
|
||||
$prototype = new ArrayNode(null, $node);
|
||||
$prototype->addChild(new ScalarNode('foo'));
|
||||
$prototype->addChild(new ScalarNode('id')); // the key attribute will remain
|
||||
$node->setPrototype($prototype);
|
||||
|
||||
$children = array();
|
||||
$children[] = array('id' => 'item_name', 'foo' => 'bar');
|
||||
$normalized = $node->normalize($children);
|
||||
|
||||
$expected = array();
|
||||
$expected['item_name'] = array('id' => 'item_name', 'foo' => 'bar');
|
||||
$this->assertEquals($expected, $normalized);
|
||||
}
|
||||
|
||||
public function testAddDefaultChildren()
|
||||
{
|
||||
$node = $this->getPrototypeNodeWithDefaultChildren();
|
||||
$node->setAddChildrenIfNoneSet();
|
||||
$this->assertTrue($node->hasDefaultValue());
|
||||
$this->assertEquals(array(array('foo' => 'bar')), $node->getDefaultValue());
|
||||
|
||||
$node = $this->getPrototypeNodeWithDefaultChildren();
|
||||
$node->setKeyAttribute('foobar');
|
||||
$node->setAddChildrenIfNoneSet();
|
||||
$this->assertTrue($node->hasDefaultValue());
|
||||
$this->assertEquals(array('defaults' => array('foo' => 'bar')), $node->getDefaultValue());
|
||||
|
||||
$node = $this->getPrototypeNodeWithDefaultChildren();
|
||||
$node->setKeyAttribute('foobar');
|
||||
$node->setAddChildrenIfNoneSet('defaultkey');
|
||||
$this->assertTrue($node->hasDefaultValue());
|
||||
$this->assertEquals(array('defaultkey' => array('foo' => 'bar')), $node->getDefaultValue());
|
||||
|
||||
$node = $this->getPrototypeNodeWithDefaultChildren();
|
||||
$node->setKeyAttribute('foobar');
|
||||
$node->setAddChildrenIfNoneSet(array('defaultkey'));
|
||||
$this->assertTrue($node->hasDefaultValue());
|
||||
$this->assertEquals(array('defaultkey' => array('foo' => 'bar')), $node->getDefaultValue());
|
||||
|
||||
$node = $this->getPrototypeNodeWithDefaultChildren();
|
||||
$node->setKeyAttribute('foobar');
|
||||
$node->setAddChildrenIfNoneSet(array('dk1', 'dk2'));
|
||||
$this->assertTrue($node->hasDefaultValue());
|
||||
$this->assertEquals(array('dk1' => array('foo' => 'bar'), 'dk2' => array('foo' => 'bar')), $node->getDefaultValue());
|
||||
|
||||
$node = $this->getPrototypeNodeWithDefaultChildren();
|
||||
$node->setAddChildrenIfNoneSet(array(5, 6));
|
||||
$this->assertTrue($node->hasDefaultValue());
|
||||
$this->assertEquals(array(0 => array('foo' => 'bar'), 1 => array('foo' => 'bar')), $node->getDefaultValue());
|
||||
|
||||
$node = $this->getPrototypeNodeWithDefaultChildren();
|
||||
$node->setAddChildrenIfNoneSet(2);
|
||||
$this->assertTrue($node->hasDefaultValue());
|
||||
$this->assertEquals(array(array('foo' => 'bar'), array('foo' => 'bar')), $node->getDefaultValue());
|
||||
}
|
||||
|
||||
public function testDefaultChildrenWinsOverDefaultValue()
|
||||
{
|
||||
$node = $this->getPrototypeNodeWithDefaultChildren();
|
||||
$node->setAddChildrenIfNoneSet();
|
||||
$node->setDefaultValue(array('bar' => 'foo'));
|
||||
$this->assertTrue($node->hasDefaultValue());
|
||||
$this->assertEquals(array(array('foo' => 'bar')), $node->getDefaultValue());
|
||||
}
|
||||
|
||||
protected function getPrototypeNodeWithDefaultChildren()
|
||||
{
|
||||
$node = new PrototypedArrayNode('root');
|
||||
$prototype = new ArrayNode(null, $node);
|
||||
$child = new ScalarNode('foo');
|
||||
$child->setDefaultValue('bar');
|
||||
$prototype->addChild($child);
|
||||
$prototype->setAddIfNotSet(true);
|
||||
$node->setPrototype($prototype);
|
||||
|
||||
return $node;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that when a key attribute is mapped, that key is removed from the array.
|
||||
* And if only 'value' element is left in the array, it will replace its wrapper array.
|
||||
*
|
||||
* <things>
|
||||
* <option id="option1" value="value1">
|
||||
* </things>
|
||||
*
|
||||
* The above should finally be mapped to an array that looks like this
|
||||
* (because "id" is the key attribute).
|
||||
*
|
||||
* array(
|
||||
* 'things' => array(
|
||||
* 'option1' => 'value1'
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* It's also possible to mix 'value-only' and 'non-value-only' elements in the array.
|
||||
*
|
||||
* <things>
|
||||
* <option id="option1" value="value1">
|
||||
* <option id="option2" value="value2" foo="foo2">
|
||||
* </things>
|
||||
*
|
||||
* The above should finally be mapped to an array as follows
|
||||
*
|
||||
* array(
|
||||
* 'things' => array(
|
||||
* 'option1' => 'value1',
|
||||
* 'option2' => array(
|
||||
* 'value' => 'value2',
|
||||
* 'foo' => 'foo2'
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* The 'value' element can also be ArrayNode:
|
||||
*
|
||||
* <things>
|
||||
* <option id="option1">
|
||||
* <value>
|
||||
* <foo>foo1</foo>
|
||||
* <bar>bar1</bar>
|
||||
* </value>
|
||||
* </option>
|
||||
* </things>
|
||||
*
|
||||
* The above should be finally be mapped to an array as follows
|
||||
*
|
||||
* array(
|
||||
* 'things' => array(
|
||||
* 'option1' => array(
|
||||
* 'foo' => 'foo1',
|
||||
* 'bar' => 'bar1'
|
||||
* )
|
||||
* )
|
||||
* )
|
||||
*
|
||||
* If using VariableNode for value node, it's also possible to mix different types of value nodes:
|
||||
*
|
||||
* <things>
|
||||
* <option id="option1">
|
||||
* <value>
|
||||
* <foo>foo1</foo>
|
||||
* <bar>bar1</bar>
|
||||
* </value>
|
||||
* </option>
|
||||
* <option id="option2" value="value2">
|
||||
* </things>
|
||||
*
|
||||
* The above should be finally mapped to an array as follows
|
||||
*
|
||||
* array(
|
||||
* 'things' => array(
|
||||
* 'option1' => array(
|
||||
* 'foo' => 'foo1',
|
||||
* 'bar' => 'bar1'
|
||||
* ),
|
||||
* 'option2' => 'value2'
|
||||
* )
|
||||
* )
|
||||
*
|
||||
*
|
||||
* @dataProvider getDataForKeyRemovedLeftValueOnly
|
||||
*/
|
||||
public function testMappedAttributeKeyIsRemovedLeftValueOnly($value, $children, $expected)
|
||||
{
|
||||
$node = new PrototypedArrayNode('root');
|
||||
$node->setKeyAttribute('id', true);
|
||||
|
||||
// each item under the root is an array, with one scalar item
|
||||
$prototype = new ArrayNode(null, $node);
|
||||
$prototype->addChild(new ScalarNode('id'));
|
||||
$prototype->addChild(new ScalarNode('foo'));
|
||||
$prototype->addChild($value);
|
||||
$node->setPrototype($prototype);
|
||||
|
||||
$normalized = $node->normalize($children);
|
||||
$this->assertEquals($expected, $normalized);
|
||||
}
|
||||
|
||||
public function getDataForKeyRemovedLeftValueOnly()
|
||||
{
|
||||
$scalarValue = new ScalarNode('value');
|
||||
|
||||
$arrayValue = new ArrayNode('value');
|
||||
$arrayValue->addChild(new ScalarNode('foo'));
|
||||
$arrayValue->addChild(new ScalarNode('bar'));
|
||||
|
||||
$variableValue = new VariableNode('value');
|
||||
|
||||
return array(
|
||||
array(
|
||||
$scalarValue,
|
||||
array(
|
||||
array('id' => 'option1', 'value' => 'value1'),
|
||||
),
|
||||
array('option1' => 'value1'),
|
||||
),
|
||||
|
||||
array(
|
||||
$scalarValue,
|
||||
array(
|
||||
array('id' => 'option1', 'value' => 'value1'),
|
||||
array('id' => 'option2', 'value' => 'value2', 'foo' => 'foo2'),
|
||||
),
|
||||
array(
|
||||
'option1' => 'value1',
|
||||
'option2' => array('value' => 'value2', 'foo' => 'foo2'),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
$arrayValue,
|
||||
array(
|
||||
array(
|
||||
'id' => 'option1',
|
||||
'value' => array('foo' => 'foo1', 'bar' => 'bar1'),
|
||||
),
|
||||
),
|
||||
array(
|
||||
'option1' => array('foo' => 'foo1', 'bar' => 'bar1'),
|
||||
),
|
||||
),
|
||||
|
||||
array($variableValue,
|
||||
array(
|
||||
array(
|
||||
'id' => 'option1', 'value' => array('foo' => 'foo1', 'bar' => 'bar1'),
|
||||
),
|
||||
array('id' => 'option2', 'value' => 'value2'),
|
||||
),
|
||||
array(
|
||||
'option1' => array('foo' => 'foo1', 'bar' => 'bar1'),
|
||||
'option2' => 'value2',
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
169
vendor/symfony/config/Tests/Definition/ScalarNodeTest.php
vendored
Normal file
169
vendor/symfony/config/Tests/Definition/ScalarNodeTest.php
vendored
Normal file
|
@ -0,0 +1,169 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Definition;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\ArrayNode;
|
||||
use Symfony\Component\Config\Definition\ScalarNode;
|
||||
|
||||
class ScalarNodeTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider getValidValues
|
||||
*/
|
||||
public function testNormalize($value)
|
||||
{
|
||||
$node = new ScalarNode('test');
|
||||
$this->assertSame($value, $node->normalize($value));
|
||||
}
|
||||
|
||||
public function getValidValues()
|
||||
{
|
||||
return array(
|
||||
array(false),
|
||||
array(true),
|
||||
array(null),
|
||||
array(''),
|
||||
array('foo'),
|
||||
array(0),
|
||||
array(1),
|
||||
array(0.0),
|
||||
array(0.1),
|
||||
);
|
||||
}
|
||||
|
||||
public function testSetDeprecated()
|
||||
{
|
||||
$childNode = new ScalarNode('foo');
|
||||
$childNode->setDeprecated('"%node%" is deprecated');
|
||||
|
||||
$this->assertTrue($childNode->isDeprecated());
|
||||
$this->assertSame('"foo" is deprecated', $childNode->getDeprecationMessage($childNode->getName(), $childNode->getPath()));
|
||||
|
||||
$node = new ArrayNode('root');
|
||||
$node->addChild($childNode);
|
||||
|
||||
$deprecationTriggered = 0;
|
||||
$deprecationHandler = function ($level, $message, $file, $line) use (&$prevErrorHandler, &$deprecationTriggered) {
|
||||
if (E_USER_DEPRECATED === $level) {
|
||||
return ++$deprecationTriggered;
|
||||
}
|
||||
|
||||
return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false;
|
||||
};
|
||||
|
||||
$prevErrorHandler = set_error_handler($deprecationHandler);
|
||||
$node->finalize(array());
|
||||
restore_error_handler();
|
||||
$this->assertSame(0, $deprecationTriggered, '->finalize() should not trigger if the deprecated node is not set');
|
||||
|
||||
$prevErrorHandler = set_error_handler($deprecationHandler);
|
||||
$node->finalize(array('foo' => ''));
|
||||
restore_error_handler();
|
||||
$this->assertSame(1, $deprecationTriggered, '->finalize() should trigger if the deprecated node is set');
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getInvalidValues
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidTypeException
|
||||
*/
|
||||
public function testNormalizeThrowsExceptionOnInvalidValues($value)
|
||||
{
|
||||
$node = new ScalarNode('test');
|
||||
$node->normalize($value);
|
||||
}
|
||||
|
||||
public function getInvalidValues()
|
||||
{
|
||||
return array(
|
||||
array(array()),
|
||||
array(array('foo' => 'bar')),
|
||||
array(new \stdClass()),
|
||||
);
|
||||
}
|
||||
|
||||
public function testNormalizeThrowsExceptionWithoutHint()
|
||||
{
|
||||
$node = new ScalarNode('test');
|
||||
|
||||
if (method_exists($this, 'expectException')) {
|
||||
$this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
|
||||
$this->expectExceptionMessage('Invalid type for path "test". Expected scalar, but got array.');
|
||||
} else {
|
||||
$this->setExpectedException('Symfony\Component\Config\Definition\Exception\InvalidTypeException', 'Invalid type for path "test". Expected scalar, but got array.');
|
||||
}
|
||||
|
||||
$node->normalize(array());
|
||||
}
|
||||
|
||||
public function testNormalizeThrowsExceptionWithErrorMessage()
|
||||
{
|
||||
$node = new ScalarNode('test');
|
||||
$node->setInfo('"the test value"');
|
||||
|
||||
if (method_exists($this, 'expectException')) {
|
||||
$this->expectException('Symfony\Component\Config\Definition\Exception\InvalidTypeException');
|
||||
$this->expectExceptionMessage("Invalid type for path \"test\". Expected scalar, but got array.\nHint: \"the test value\"");
|
||||
} else {
|
||||
$this->setExpectedException('Symfony\Component\Config\Definition\Exception\InvalidTypeException', "Invalid type for path \"test\". Expected scalar, but got array.\nHint: \"the test value\"");
|
||||
}
|
||||
|
||||
$node->normalize(array());
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getValidNonEmptyValues
|
||||
*
|
||||
* @param mixed $value
|
||||
*/
|
||||
public function testValidNonEmptyValues($value)
|
||||
{
|
||||
$node = new ScalarNode('test');
|
||||
$node->setAllowEmptyValue(false);
|
||||
|
||||
$this->assertSame($value, $node->finalize($value));
|
||||
}
|
||||
|
||||
public function getValidNonEmptyValues()
|
||||
{
|
||||
return array(
|
||||
array(false),
|
||||
array(true),
|
||||
array('foo'),
|
||||
array(0),
|
||||
array(1),
|
||||
array(0.0),
|
||||
array(0.1),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getEmptyValues
|
||||
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
|
||||
*
|
||||
* @param mixed $value
|
||||
*/
|
||||
public function testNotAllowedEmptyValuesThrowException($value)
|
||||
{
|
||||
$node = new ScalarNode('test');
|
||||
$node->setAllowEmptyValue(false);
|
||||
$node->finalize($value);
|
||||
}
|
||||
|
||||
public function getEmptyValues()
|
||||
{
|
||||
return array(
|
||||
array(null),
|
||||
array(''),
|
||||
);
|
||||
}
|
||||
}
|
59
vendor/symfony/config/Tests/DependencyInjection/ConfigCachePassTest.php
vendored
Normal file
59
vendor/symfony/config/Tests/DependencyInjection/ConfigCachePassTest.php
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\DependencyInjection;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\DependencyInjection\ConfigCachePass;
|
||||
use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
*/
|
||||
class ConfigCachePassTest extends TestCase
|
||||
{
|
||||
public function testThatCheckersAreProcessedInPriorityOrder()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
|
||||
$definition = $container->register('config_cache_factory')->addArgument(null);
|
||||
$container->register('checker_2')->addTag('config_cache.resource_checker', array('priority' => 100));
|
||||
$container->register('checker_1')->addTag('config_cache.resource_checker', array('priority' => 200));
|
||||
$container->register('checker_3')->addTag('config_cache.resource_checker');
|
||||
|
||||
$pass = new ConfigCachePass();
|
||||
$pass->process($container);
|
||||
|
||||
$expected = new IteratorArgument(array(
|
||||
new Reference('checker_1'),
|
||||
new Reference('checker_2'),
|
||||
new Reference('checker_3'),
|
||||
));
|
||||
$this->assertEquals($expected, $definition->getArgument(0));
|
||||
}
|
||||
|
||||
public function testThatCheckersCanBeMissing()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
|
||||
$definitionsBefore = \count($container->getDefinitions());
|
||||
$aliasesBefore = \count($container->getAliases());
|
||||
|
||||
$pass = new ConfigCachePass();
|
||||
$pass->process($container);
|
||||
|
||||
// the container is untouched (i.e. no new definitions or aliases)
|
||||
$this->assertCount($definitionsBefore, $container->getDefinitions());
|
||||
$this->assertCount($aliasesBefore, $container->getAliases());
|
||||
}
|
||||
}
|
98
vendor/symfony/config/Tests/Exception/FileLoaderLoadExceptionTest.php
vendored
Normal file
98
vendor/symfony/config/Tests/Exception/FileLoaderLoadExceptionTest.php
vendored
Normal file
|
@ -0,0 +1,98 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Exception;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Exception\FileLoaderLoadException;
|
||||
|
||||
class FileLoaderLoadExceptionTest extends TestCase
|
||||
{
|
||||
public function testMessageCannotLoadResource()
|
||||
{
|
||||
$exception = new FileLoaderLoadException('resource', null);
|
||||
$this->assertEquals('Cannot load resource "resource".', $exception->getMessage());
|
||||
}
|
||||
|
||||
public function testMessageCannotLoadResourceWithType()
|
||||
{
|
||||
$exception = new FileLoaderLoadException('resource', null, null, null, 'foobar');
|
||||
$this->assertEquals('Cannot load resource "resource". Make sure there is a loader supporting the "foobar" type.', $exception->getMessage());
|
||||
}
|
||||
|
||||
public function testMessageCannotLoadResourceWithAnnotationType()
|
||||
{
|
||||
$exception = new FileLoaderLoadException('resource', null, null, null, 'annotation');
|
||||
$this->assertEquals('Cannot load resource "resource". Make sure annotations are installed and enabled.', $exception->getMessage());
|
||||
}
|
||||
|
||||
public function testMessageCannotImportResourceFromSource()
|
||||
{
|
||||
$exception = new FileLoaderLoadException('resource', 'sourceResource');
|
||||
$this->assertEquals('Cannot import resource "resource" from "sourceResource".', $exception->getMessage());
|
||||
}
|
||||
|
||||
public function testMessageCannotImportBundleResource()
|
||||
{
|
||||
$exception = new FileLoaderLoadException('@resource', 'sourceResource');
|
||||
$this->assertEquals(
|
||||
'Cannot import resource "@resource" from "sourceResource". '.
|
||||
'Make sure the "resource" bundle is correctly registered and loaded in the application kernel class. '.
|
||||
'If the bundle is registered, make sure the bundle path "@resource" is not empty.',
|
||||
$exception->getMessage()
|
||||
);
|
||||
}
|
||||
|
||||
public function testMessageHasPreviousErrorWithDotAndUnableToLoad()
|
||||
{
|
||||
$exception = new FileLoaderLoadException(
|
||||
'resource',
|
||||
null,
|
||||
null,
|
||||
new \Exception('There was a previous error with an ending dot.')
|
||||
);
|
||||
$this->assertEquals(
|
||||
'There was a previous error with an ending dot in resource (which is loaded in resource "resource").',
|
||||
$exception->getMessage()
|
||||
);
|
||||
}
|
||||
|
||||
public function testMessageHasPreviousErrorWithoutDotAndUnableToLoad()
|
||||
{
|
||||
$exception = new FileLoaderLoadException(
|
||||
'resource',
|
||||
null,
|
||||
null,
|
||||
new \Exception('There was a previous error with no ending dot')
|
||||
);
|
||||
$this->assertEquals(
|
||||
'There was a previous error with no ending dot in resource (which is loaded in resource "resource").',
|
||||
$exception->getMessage()
|
||||
);
|
||||
}
|
||||
|
||||
public function testMessageHasPreviousErrorAndUnableToLoadBundle()
|
||||
{
|
||||
$exception = new FileLoaderLoadException(
|
||||
'@resource',
|
||||
null,
|
||||
null,
|
||||
new \Exception('There was a previous error with an ending dot.')
|
||||
);
|
||||
$this->assertEquals(
|
||||
'There was a previous error with an ending dot in @resource '.
|
||||
'(which is loaded in resource "@resource"). '.
|
||||
'Make sure the "resource" bundle is correctly registered and loaded in the application kernel class. '.
|
||||
'If the bundle is registered, make sure the bundle path "@resource" is not empty.',
|
||||
$exception->getMessage()
|
||||
);
|
||||
}
|
||||
}
|
120
vendor/symfony/config/Tests/FileLocatorTest.php
vendored
Normal file
120
vendor/symfony/config/Tests/FileLocatorTest.php
vendored
Normal file
|
@ -0,0 +1,120 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
|
||||
class FileLocatorTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider getIsAbsolutePathTests
|
||||
*/
|
||||
public function testIsAbsolutePath($path)
|
||||
{
|
||||
$loader = new FileLocator(array());
|
||||
$r = new \ReflectionObject($loader);
|
||||
$m = $r->getMethod('isAbsolutePath');
|
||||
$m->setAccessible(true);
|
||||
|
||||
$this->assertTrue($m->invoke($loader, $path), '->isAbsolutePath() returns true for an absolute path');
|
||||
}
|
||||
|
||||
public function getIsAbsolutePathTests()
|
||||
{
|
||||
return array(
|
||||
array('/foo.xml'),
|
||||
array('c:\\\\foo.xml'),
|
||||
array('c:/foo.xml'),
|
||||
array('\\server\\foo.xml'),
|
||||
array('https://server/foo.xml'),
|
||||
array('phar://server/foo.xml'),
|
||||
);
|
||||
}
|
||||
|
||||
public function testLocate()
|
||||
{
|
||||
$loader = new FileLocator(__DIR__.'/Fixtures');
|
||||
|
||||
$this->assertEquals(
|
||||
__DIR__.\DIRECTORY_SEPARATOR.'FileLocatorTest.php',
|
||||
$loader->locate('FileLocatorTest.php', __DIR__),
|
||||
'->locate() returns the absolute filename if the file exists in the given path'
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml',
|
||||
$loader->locate('foo.xml', __DIR__),
|
||||
'->locate() returns the absolute filename if the file exists in one of the paths given in the constructor'
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml',
|
||||
$loader->locate(__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml', __DIR__),
|
||||
'->locate() returns the absolute filename if the file exists in one of the paths given in the constructor'
|
||||
);
|
||||
|
||||
$loader = new FileLocator(array(__DIR__.'/Fixtures', __DIR__.'/Fixtures/Again'));
|
||||
|
||||
$this->assertEquals(
|
||||
array(__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml', __DIR__.'/Fixtures/Again'.\DIRECTORY_SEPARATOR.'foo.xml'),
|
||||
$loader->locate('foo.xml', __DIR__, false),
|
||||
'->locate() returns an array of absolute filenames'
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
array(__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml', __DIR__.'/Fixtures/Again'.\DIRECTORY_SEPARATOR.'foo.xml'),
|
||||
$loader->locate('foo.xml', __DIR__.'/Fixtures', false),
|
||||
'->locate() returns an array of absolute filenames'
|
||||
);
|
||||
|
||||
$loader = new FileLocator(__DIR__.'/Fixtures/Again');
|
||||
|
||||
$this->assertEquals(
|
||||
array(__DIR__.'/Fixtures'.\DIRECTORY_SEPARATOR.'foo.xml', __DIR__.'/Fixtures/Again'.\DIRECTORY_SEPARATOR.'foo.xml'),
|
||||
$loader->locate('foo.xml', __DIR__.'/Fixtures', false),
|
||||
'->locate() returns an array of absolute filenames'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Exception\FileLocatorFileNotFoundException
|
||||
* @expectedExceptionMessage The file "foobar.xml" does not exist
|
||||
*/
|
||||
public function testLocateThrowsAnExceptionIfTheFileDoesNotExists()
|
||||
{
|
||||
$loader = new FileLocator(array(__DIR__.'/Fixtures'));
|
||||
|
||||
$loader->locate('foobar.xml', __DIR__);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Exception\FileLocatorFileNotFoundException
|
||||
*/
|
||||
public function testLocateThrowsAnExceptionIfTheFileDoesNotExistsInAbsolutePath()
|
||||
{
|
||||
$loader = new FileLocator(array(__DIR__.'/Fixtures'));
|
||||
|
||||
$loader->locate(__DIR__.'/Fixtures/foobar.xml', __DIR__);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessage An empty file name is not valid to be located.
|
||||
*/
|
||||
public function testLocateEmpty()
|
||||
{
|
||||
$loader = new FileLocator(array(__DIR__.'/Fixtures'));
|
||||
|
||||
$loader->locate(null, __DIR__);
|
||||
}
|
||||
}
|
0
vendor/symfony/config/Tests/Fixtures/Again/foo.xml
vendored
Normal file
0
vendor/symfony/config/Tests/Fixtures/Again/foo.xml
vendored
Normal file
7
vendor/symfony/config/Tests/Fixtures/BadParent.php
vendored
Normal file
7
vendor/symfony/config/Tests/Fixtures/BadParent.php
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?php
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Fixtures;
|
||||
|
||||
class BadParent extends MissingParent
|
||||
{
|
||||
}
|
18
vendor/symfony/config/Tests/Fixtures/BarNode.php
vendored
Normal file
18
vendor/symfony/config/Tests/Fixtures/BarNode.php
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Fixtures;
|
||||
|
||||
use Symfony\Component\Config\Definition\ArrayNode;
|
||||
|
||||
class BarNode extends ArrayNode
|
||||
{
|
||||
}
|
23
vendor/symfony/config/Tests/Fixtures/Builder/BarNodeDefinition.php
vendored
Normal file
23
vendor/symfony/config/Tests/Fixtures/Builder/BarNodeDefinition.php
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Fixtures\Builder;
|
||||
|
||||
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
|
||||
use Symfony\Component\Config\Tests\Fixtures\BarNode;
|
||||
|
||||
class BarNodeDefinition extends NodeDefinition
|
||||
{
|
||||
protected function createNode()
|
||||
{
|
||||
return new BarNode($this->name);
|
||||
}
|
||||
}
|
34
vendor/symfony/config/Tests/Fixtures/Builder/NodeBuilder.php
vendored
Normal file
34
vendor/symfony/config/Tests/Fixtures/Builder/NodeBuilder.php
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Fixtures\Builder;
|
||||
|
||||
use Symfony\Component\Config\Definition\Builder\NodeBuilder as BaseNodeBuilder;
|
||||
|
||||
class NodeBuilder extends BaseNodeBuilder
|
||||
{
|
||||
public function barNode($name)
|
||||
{
|
||||
return $this->node($name, 'bar');
|
||||
}
|
||||
|
||||
protected function getNodeClass($type)
|
||||
{
|
||||
switch ($type) {
|
||||
case 'variable':
|
||||
return __NAMESPACE__.'\\'.ucfirst($type).'NodeDefinition';
|
||||
case 'bar':
|
||||
return __NAMESPACE__.'\\'.ucfirst($type).'NodeDefinition';
|
||||
default:
|
||||
return parent::getNodeClass($type);
|
||||
}
|
||||
}
|
||||
}
|
18
vendor/symfony/config/Tests/Fixtures/Builder/VariableNodeDefinition.php
vendored
Normal file
18
vendor/symfony/config/Tests/Fixtures/Builder/VariableNodeDefinition.php
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Fixtures\Builder;
|
||||
|
||||
use Symfony\Component\Config\Definition\Builder\VariableNodeDefinition as BaseVariableNodeDefinition;
|
||||
|
||||
class VariableNodeDefinition extends BaseVariableNodeDefinition
|
||||
{
|
||||
}
|
102
vendor/symfony/config/Tests/Fixtures/Configuration/ExampleConfiguration.php
vendored
Normal file
102
vendor/symfony/config/Tests/Fixtures/Configuration/ExampleConfiguration.php
vendored
Normal file
|
@ -0,0 +1,102 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Fixtures\Configuration;
|
||||
|
||||
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
|
||||
use Symfony\Component\Config\Definition\ConfigurationInterface;
|
||||
|
||||
class ExampleConfiguration implements ConfigurationInterface
|
||||
{
|
||||
public function getConfigTreeBuilder()
|
||||
{
|
||||
$treeBuilder = new TreeBuilder();
|
||||
$rootNode = $treeBuilder->root('acme_root');
|
||||
|
||||
$rootNode
|
||||
->fixXmlConfig('parameter')
|
||||
->fixXmlConfig('connection')
|
||||
->fixXmlConfig('cms_page')
|
||||
->children()
|
||||
->booleanNode('boolean')->defaultTrue()->end()
|
||||
->scalarNode('scalar_empty')->end()
|
||||
->scalarNode('scalar_null')->defaultNull()->end()
|
||||
->scalarNode('scalar_true')->defaultTrue()->end()
|
||||
->scalarNode('scalar_false')->defaultFalse()->end()
|
||||
->scalarNode('scalar_default')->defaultValue('default')->end()
|
||||
->scalarNode('scalar_array_empty')->defaultValue(array())->end()
|
||||
->scalarNode('scalar_array_defaults')->defaultValue(array('elem1', 'elem2'))->end()
|
||||
->scalarNode('scalar_required')->isRequired()->end()
|
||||
->scalarNode('scalar_deprecated')->setDeprecated()->end()
|
||||
->scalarNode('scalar_deprecated_with_message')->setDeprecated('Deprecation custom message for "%node%" at "%path%"')->end()
|
||||
->scalarNode('node_with_a_looong_name')->end()
|
||||
->enumNode('enum_with_default')->values(array('this', 'that'))->defaultValue('this')->end()
|
||||
->enumNode('enum')->values(array('this', 'that'))->end()
|
||||
->arrayNode('array')
|
||||
->info('some info')
|
||||
->canBeUnset()
|
||||
->children()
|
||||
->scalarNode('child1')->end()
|
||||
->scalarNode('child2')->end()
|
||||
->scalarNode('child3')
|
||||
->info(
|
||||
"this is a long\n".
|
||||
"multi-line info text\n".
|
||||
'which should be indented'
|
||||
)
|
||||
->example('example setting')
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->arrayNode('scalar_prototyped')
|
||||
->prototype('scalar')->end()
|
||||
->end()
|
||||
->arrayNode('parameters')
|
||||
->useAttributeAsKey('name')
|
||||
->prototype('scalar')->info('Parameter name')->end()
|
||||
->end()
|
||||
->arrayNode('connections')
|
||||
->prototype('array')
|
||||
->children()
|
||||
->scalarNode('user')->end()
|
||||
->scalarNode('pass')->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->arrayNode('cms_pages')
|
||||
->useAttributeAsKey('page')
|
||||
->prototype('array')
|
||||
->useAttributeAsKey('locale')
|
||||
->prototype('array')
|
||||
->children()
|
||||
->scalarNode('title')->isRequired()->end()
|
||||
->scalarNode('path')->isRequired()->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->arrayNode('pipou')
|
||||
->useAttributeAsKey('name')
|
||||
->prototype('array')
|
||||
->prototype('array')
|
||||
->children()
|
||||
->scalarNode('didou')
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
;
|
||||
|
||||
return $treeBuilder;
|
||||
}
|
||||
}
|
0
vendor/symfony/config/Tests/Fixtures/Resource/.hiddenFile
vendored
Normal file
0
vendor/symfony/config/Tests/Fixtures/Resource/.hiddenFile
vendored
Normal file
9
vendor/symfony/config/Tests/Fixtures/Resource/ConditionalClass.php
vendored
Normal file
9
vendor/symfony/config/Tests/Fixtures/Resource/ConditionalClass.php
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Fixtures\Resource;
|
||||
|
||||
if (!class_exists(MissingClass::class)) {
|
||||
class ConditionalClass
|
||||
{
|
||||
}
|
||||
}
|
3
vendor/symfony/config/Tests/Fixtures/Util/document_type.xml
vendored
Normal file
3
vendor/symfony/config/Tests/Fixtures/Util/document_type.xml
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE scan [<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource={{ resource }}">]>
|
||||
<scan></scan>
|
2
vendor/symfony/config/Tests/Fixtures/Util/invalid.xml
vendored
Normal file
2
vendor/symfony/config/Tests/Fixtures/Util/invalid.xml
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<root>
|
2
vendor/symfony/config/Tests/Fixtures/Util/invalid_schema.xml
vendored
Normal file
2
vendor/symfony/config/Tests/Fixtures/Util/invalid_schema.xml
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<root2 xmlns="http://example.com/schema" />
|
9
vendor/symfony/config/Tests/Fixtures/Util/schema.xsd
vendored
Normal file
9
vendor/symfony/config/Tests/Fixtures/Util/schema.xsd
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<xsd:schema xmlns="http://example.com/schema"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://example.com/schema"
|
||||
elementFormDefault="qualified">
|
||||
|
||||
<xsd:element name="root" />
|
||||
</xsd:schema>
|
3
vendor/symfony/config/Tests/Fixtures/Util/valid.xml
vendored
Normal file
3
vendor/symfony/config/Tests/Fixtures/Util/valid.xml
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<root xmlns="http://example.com/schema">
|
||||
</root>
|
0
vendor/symfony/config/Tests/Fixtures/foo.xml
vendored
Normal file
0
vendor/symfony/config/Tests/Fixtures/foo.xml
vendored
Normal file
71
vendor/symfony/config/Tests/Loader/DelegatingLoaderTest.php
vendored
Normal file
71
vendor/symfony/config/Tests/Loader/DelegatingLoaderTest.php
vendored
Normal file
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* 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 PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Loader\DelegatingLoader;
|
||||
use Symfony\Component\Config\Loader\LoaderResolver;
|
||||
|
||||
class DelegatingLoaderTest extends TestCase
|
||||
{
|
||||
public function testConstructor()
|
||||
{
|
||||
$loader = new DelegatingLoader($resolver = new LoaderResolver());
|
||||
$this->assertTrue(true, '__construct() takes a loader resolver as its first argument');
|
||||
}
|
||||
|
||||
public function testGetSetResolver()
|
||||
{
|
||||
$resolver = new LoaderResolver();
|
||||
$loader = new DelegatingLoader($resolver);
|
||||
$this->assertSame($resolver, $loader->getResolver(), '->getResolver() gets the resolver loader');
|
||||
$loader->setResolver($resolver = new LoaderResolver());
|
||||
$this->assertSame($resolver, $loader->getResolver(), '->setResolver() sets the resolver loader');
|
||||
}
|
||||
|
||||
public function testSupports()
|
||||
{
|
||||
$loader1 = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
|
||||
$loader1->expects($this->once())->method('supports')->will($this->returnValue(true));
|
||||
$loader = new DelegatingLoader(new LoaderResolver(array($loader1)));
|
||||
$this->assertTrue($loader->supports('foo.xml'), '->supports() returns true if the resource is loadable');
|
||||
|
||||
$loader1 = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
|
||||
$loader1->expects($this->once())->method('supports')->will($this->returnValue(false));
|
||||
$loader = new DelegatingLoader(new LoaderResolver(array($loader1)));
|
||||
$this->assertFalse($loader->supports('foo.foo'), '->supports() returns false if the resource is not loadable');
|
||||
}
|
||||
|
||||
public function testLoad()
|
||||
{
|
||||
$loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
|
||||
$loader->expects($this->once())->method('supports')->will($this->returnValue(true));
|
||||
$loader->expects($this->once())->method('load');
|
||||
$resolver = new LoaderResolver(array($loader));
|
||||
$loader = new DelegatingLoader($resolver);
|
||||
|
||||
$loader->load('foo');
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Exception\FileLoaderLoadException
|
||||
*/
|
||||
public function testLoadThrowsAnExceptionIfTheResourceCannotBeLoaded()
|
||||
{
|
||||
$loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
|
||||
$loader->expects($this->once())->method('supports')->will($this->returnValue(false));
|
||||
$resolver = new LoaderResolver(array($loader));
|
||||
$loader = new DelegatingLoader($resolver);
|
||||
|
||||
$loader->load('foo');
|
||||
}
|
||||
}
|
128
vendor/symfony/config/Tests/Loader/FileLoaderTest.php
vendored
Normal file
128
vendor/symfony/config/Tests/Loader/FileLoaderTest.php
vendored
Normal file
|
@ -0,0 +1,128 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* 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 PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
use Symfony\Component\Config\Loader\FileLoader;
|
||||
use Symfony\Component\Config\Loader\LoaderResolver;
|
||||
|
||||
class FileLoaderTest extends TestCase
|
||||
{
|
||||
public function testImportWithFileLocatorDelegation()
|
||||
{
|
||||
$locatorMock = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock();
|
||||
|
||||
$locatorMockForAdditionalLoader = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock();
|
||||
$locatorMockForAdditionalLoader->expects($this->any())->method('locate')->will($this->onConsecutiveCalls(
|
||||
array('path/to/file1'), // Default
|
||||
array('path/to/file1', 'path/to/file2'), // First is imported
|
||||
array('path/to/file1', 'path/to/file2'), // Second is imported
|
||||
array('path/to/file1'), // Exception
|
||||
array('path/to/file1', 'path/to/file2') // Exception
|
||||
));
|
||||
|
||||
$fileLoader = new TestFileLoader($locatorMock);
|
||||
$fileLoader->setSupports(false);
|
||||
$fileLoader->setCurrentDir('.');
|
||||
|
||||
$additionalLoader = new TestFileLoader($locatorMockForAdditionalLoader);
|
||||
$additionalLoader->setCurrentDir('.');
|
||||
|
||||
$fileLoader->setResolver($loaderResolver = new LoaderResolver(array($fileLoader, $additionalLoader)));
|
||||
|
||||
// Default case
|
||||
$this->assertSame('path/to/file1', $fileLoader->import('my_resource'));
|
||||
|
||||
// Check first file is imported if not already loading
|
||||
$this->assertSame('path/to/file1', $fileLoader->import('my_resource'));
|
||||
|
||||
// Check second file is imported if first is already loading
|
||||
$fileLoader->addLoading('path/to/file1');
|
||||
$this->assertSame('path/to/file2', $fileLoader->import('my_resource'));
|
||||
|
||||
// Check exception throws if first (and only available) file is already loading
|
||||
try {
|
||||
$fileLoader->import('my_resource');
|
||||
$this->fail('->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading');
|
||||
} catch (\Exception $e) {
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException', $e, '->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading');
|
||||
}
|
||||
|
||||
// Check exception throws if all files are already loading
|
||||
try {
|
||||
$fileLoader->addLoading('path/to/file2');
|
||||
$fileLoader->import('my_resource');
|
||||
$this->fail('->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading');
|
||||
} catch (\Exception $e) {
|
||||
$this->assertInstanceOf('Symfony\Component\Config\Exception\FileLoaderImportCircularReferenceException', $e, '->import() throws a FileLoaderImportCircularReferenceException if the resource is already loading');
|
||||
}
|
||||
}
|
||||
|
||||
public function testImportWithGlobLikeResource()
|
||||
{
|
||||
$locatorMock = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock();
|
||||
$loader = new TestFileLoader($locatorMock);
|
||||
|
||||
$this->assertSame('[foo]', $loader->import('[foo]'));
|
||||
}
|
||||
|
||||
public function testImportWithNoGlobMatch()
|
||||
{
|
||||
$locatorMock = $this->getMockBuilder('Symfony\Component\Config\FileLocatorInterface')->getMock();
|
||||
$loader = new TestFileLoader($locatorMock);
|
||||
|
||||
$this->assertNull($loader->import('./*.abc'));
|
||||
}
|
||||
|
||||
public function testImportWithSimpleGlob()
|
||||
{
|
||||
$loader = new TestFileLoader(new FileLocator(__DIR__));
|
||||
|
||||
$this->assertSame(__FILE__, strtr($loader->import('FileLoaderTest.*'), '/', \DIRECTORY_SEPARATOR));
|
||||
}
|
||||
}
|
||||
|
||||
class TestFileLoader extends FileLoader
|
||||
{
|
||||
private $supports = true;
|
||||
|
||||
public function load($resource, $type = null)
|
||||
{
|
||||
return $resource;
|
||||
}
|
||||
|
||||
public function supports($resource, $type = null)
|
||||
{
|
||||
return $this->supports;
|
||||
}
|
||||
|
||||
public function addLoading($resource)
|
||||
{
|
||||
self::$loading[$resource] = true;
|
||||
}
|
||||
|
||||
public function removeLoading($resource)
|
||||
{
|
||||
unset(self::$loading[$resource]);
|
||||
}
|
||||
|
||||
public function clearLoading()
|
||||
{
|
||||
self::$loading = array();
|
||||
}
|
||||
|
||||
public function setSupports($supports)
|
||||
{
|
||||
$this->supports = $supports;
|
||||
}
|
||||
}
|
47
vendor/symfony/config/Tests/Loader/LoaderResolverTest.php
vendored
Normal file
47
vendor/symfony/config/Tests/Loader/LoaderResolverTest.php
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* 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 PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Loader\LoaderResolver;
|
||||
|
||||
class LoaderResolverTest extends TestCase
|
||||
{
|
||||
public function testConstructor()
|
||||
{
|
||||
$resolver = new LoaderResolver(array(
|
||||
$loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock(),
|
||||
));
|
||||
|
||||
$this->assertEquals(array($loader), $resolver->getLoaders(), '__construct() takes an array of loaders as its first argument');
|
||||
}
|
||||
|
||||
public function testResolve()
|
||||
{
|
||||
$loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
|
||||
$resolver = new LoaderResolver(array($loader));
|
||||
$this->assertFalse($resolver->resolve('foo.foo'), '->resolve() returns false if no loader is able to load the resource');
|
||||
|
||||
$loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
|
||||
$loader->expects($this->once())->method('supports')->will($this->returnValue(true));
|
||||
$resolver = new LoaderResolver(array($loader));
|
||||
$this->assertEquals($loader, $resolver->resolve(function () {}), '->resolve() returns the loader for the given resource');
|
||||
}
|
||||
|
||||
public function testLoaders()
|
||||
{
|
||||
$resolver = new LoaderResolver();
|
||||
$resolver->addLoader($loader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock());
|
||||
|
||||
$this->assertEquals(array($loader), $resolver->getLoaders(), 'addLoader() adds a loader');
|
||||
}
|
||||
}
|
118
vendor/symfony/config/Tests/Loader/LoaderTest.php
vendored
Normal file
118
vendor/symfony/config/Tests/Loader/LoaderTest.php
vendored
Normal file
|
@ -0,0 +1,118 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* 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 PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Loader\Loader;
|
||||
|
||||
class LoaderTest extends TestCase
|
||||
{
|
||||
public function testGetSetResolver()
|
||||
{
|
||||
$resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
|
||||
|
||||
$loader = new ProjectLoader1();
|
||||
$loader->setResolver($resolver);
|
||||
|
||||
$this->assertSame($resolver, $loader->getResolver(), '->setResolver() sets the resolver loader');
|
||||
}
|
||||
|
||||
public function testResolve()
|
||||
{
|
||||
$resolvedLoader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
|
||||
|
||||
$resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
|
||||
$resolver->expects($this->once())
|
||||
->method('resolve')
|
||||
->with('foo.xml')
|
||||
->will($this->returnValue($resolvedLoader));
|
||||
|
||||
$loader = new ProjectLoader1();
|
||||
$loader->setResolver($resolver);
|
||||
|
||||
$this->assertSame($loader, $loader->resolve('foo.foo'), '->resolve() finds a loader');
|
||||
$this->assertSame($resolvedLoader, $loader->resolve('foo.xml'), '->resolve() finds a loader');
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Exception\FileLoaderLoadException
|
||||
*/
|
||||
public function testResolveWhenResolverCannotFindLoader()
|
||||
{
|
||||
$resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
|
||||
$resolver->expects($this->once())
|
||||
->method('resolve')
|
||||
->with('FOOBAR')
|
||||
->will($this->returnValue(false));
|
||||
|
||||
$loader = new ProjectLoader1();
|
||||
$loader->setResolver($resolver);
|
||||
|
||||
$loader->resolve('FOOBAR');
|
||||
}
|
||||
|
||||
public function testImport()
|
||||
{
|
||||
$resolvedLoader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
|
||||
$resolvedLoader->expects($this->once())
|
||||
->method('load')
|
||||
->with('foo')
|
||||
->will($this->returnValue('yes'));
|
||||
|
||||
$resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
|
||||
$resolver->expects($this->once())
|
||||
->method('resolve')
|
||||
->with('foo')
|
||||
->will($this->returnValue($resolvedLoader));
|
||||
|
||||
$loader = new ProjectLoader1();
|
||||
$loader->setResolver($resolver);
|
||||
|
||||
$this->assertEquals('yes', $loader->import('foo'));
|
||||
}
|
||||
|
||||
public function testImportWithType()
|
||||
{
|
||||
$resolvedLoader = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderInterface')->getMock();
|
||||
$resolvedLoader->expects($this->once())
|
||||
->method('load')
|
||||
->with('foo', 'bar')
|
||||
->will($this->returnValue('yes'));
|
||||
|
||||
$resolver = $this->getMockBuilder('Symfony\Component\Config\Loader\LoaderResolverInterface')->getMock();
|
||||
$resolver->expects($this->once())
|
||||
->method('resolve')
|
||||
->with('foo', 'bar')
|
||||
->will($this->returnValue($resolvedLoader));
|
||||
|
||||
$loader = new ProjectLoader1();
|
||||
$loader->setResolver($resolver);
|
||||
|
||||
$this->assertEquals('yes', $loader->import('foo', 'bar'));
|
||||
}
|
||||
}
|
||||
|
||||
class ProjectLoader1 extends Loader
|
||||
{
|
||||
public function load($resource, $type = null)
|
||||
{
|
||||
}
|
||||
|
||||
public function supports($resource, $type = null)
|
||||
{
|
||||
return \is_string($resource) && 'foo' === pathinfo($resource, PATHINFO_EXTENSION);
|
||||
}
|
||||
|
||||
public function getType()
|
||||
{
|
||||
}
|
||||
}
|
100
vendor/symfony/config/Tests/Resource/ClassExistenceResourceTest.php
vendored
Normal file
100
vendor/symfony/config/Tests/Resource/ClassExistenceResourceTest.php
vendored
Normal file
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Resource;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Resource\ClassExistenceResource;
|
||||
use Symfony\Component\Config\Tests\Fixtures\BadParent;
|
||||
use Symfony\Component\Config\Tests\Fixtures\Resource\ConditionalClass;
|
||||
|
||||
class ClassExistenceResourceTest extends TestCase
|
||||
{
|
||||
public function testToString()
|
||||
{
|
||||
$res = new ClassExistenceResource('BarClass');
|
||||
$this->assertSame('BarClass', (string) $res);
|
||||
}
|
||||
|
||||
public function testGetResource()
|
||||
{
|
||||
$res = new ClassExistenceResource('BarClass');
|
||||
$this->assertSame('BarClass', $res->getResource());
|
||||
}
|
||||
|
||||
public function testIsFreshWhenClassDoesNotExist()
|
||||
{
|
||||
$res = new ClassExistenceResource('Symfony\Component\Config\Tests\Fixtures\BarClass');
|
||||
|
||||
$this->assertTrue($res->isFresh(time()));
|
||||
|
||||
eval(<<<EOF
|
||||
namespace Symfony\Component\Config\Tests\Fixtures;
|
||||
|
||||
class BarClass
|
||||
{
|
||||
}
|
||||
EOF
|
||||
);
|
||||
|
||||
$this->assertFalse($res->isFresh(time()));
|
||||
}
|
||||
|
||||
public function testIsFreshWhenClassExists()
|
||||
{
|
||||
$res = new ClassExistenceResource('Symfony\Component\Config\Tests\Resource\ClassExistenceResourceTest');
|
||||
|
||||
$this->assertTrue($res->isFresh(time()));
|
||||
}
|
||||
|
||||
public function testExistsKo()
|
||||
{
|
||||
spl_autoload_register($autoloader = function ($class) use (&$loadedClass) { $loadedClass = $class; });
|
||||
|
||||
try {
|
||||
$res = new ClassExistenceResource('MissingFooClass');
|
||||
$this->assertTrue($res->isFresh(0));
|
||||
|
||||
$this->assertSame('MissingFooClass', $loadedClass);
|
||||
|
||||
$loadedClass = 123;
|
||||
|
||||
$res = new ClassExistenceResource('MissingFooClass', false);
|
||||
|
||||
$this->assertSame(123, $loadedClass);
|
||||
} finally {
|
||||
spl_autoload_unregister($autoloader);
|
||||
}
|
||||
}
|
||||
|
||||
public function testBadParentWithTimestamp()
|
||||
{
|
||||
$res = new ClassExistenceResource(BadParent::class, false);
|
||||
$this->assertTrue($res->isFresh(time()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \ReflectionException
|
||||
* @expectedExceptionMessage Class Symfony\Component\Config\Tests\Fixtures\MissingParent not found
|
||||
*/
|
||||
public function testBadParentWithNoTimestamp()
|
||||
{
|
||||
$res = new ClassExistenceResource(BadParent::class, false);
|
||||
$res->isFresh(0);
|
||||
}
|
||||
|
||||
public function testConditionalClass()
|
||||
{
|
||||
$res = new ClassExistenceResource(ConditionalClass::class, false);
|
||||
|
||||
$this->assertFalse($res->isFresh(0));
|
||||
}
|
||||
}
|
47
vendor/symfony/config/Tests/Resource/ComposerResourceTest.php
vendored
Normal file
47
vendor/symfony/config/Tests/Resource/ComposerResourceTest.php
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Resource;
|
||||
|
||||
use Composer\Autoload\ClassLoader;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Resource\ComposerResource;
|
||||
|
||||
class ComposerResourceTest extends TestCase
|
||||
{
|
||||
public function testGetVendor()
|
||||
{
|
||||
$res = new ComposerResource();
|
||||
|
||||
$r = new \ReflectionClass(ClassLoader::class);
|
||||
$found = false;
|
||||
|
||||
foreach ($res->getVendors() as $vendor) {
|
||||
if ($vendor && 0 === strpos($r->getFileName(), $vendor)) {
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$this->assertTrue($found);
|
||||
}
|
||||
|
||||
public function testSerializeUnserialize()
|
||||
{
|
||||
$res = new ComposerResource();
|
||||
$ser = unserialize(serialize($res));
|
||||
|
||||
$this->assertTrue($res->isFresh(0));
|
||||
$this->assertTrue($ser->isFresh(0));
|
||||
|
||||
$this->assertEquals($res, $ser);
|
||||
}
|
||||
}
|
183
vendor/symfony/config/Tests/Resource/DirectoryResourceTest.php
vendored
Normal file
183
vendor/symfony/config/Tests/Resource/DirectoryResourceTest.php
vendored
Normal file
|
@ -0,0 +1,183 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Resource;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Resource\DirectoryResource;
|
||||
|
||||
class DirectoryResourceTest extends TestCase
|
||||
{
|
||||
protected $directory;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->directory = sys_get_temp_dir().\DIRECTORY_SEPARATOR.'symfonyDirectoryIterator';
|
||||
if (!file_exists($this->directory)) {
|
||||
mkdir($this->directory);
|
||||
}
|
||||
touch($this->directory.'/tmp.xml');
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
if (!is_dir($this->directory)) {
|
||||
return;
|
||||
}
|
||||
$this->removeDirectory($this->directory);
|
||||
}
|
||||
|
||||
protected function removeDirectory($directory)
|
||||
{
|
||||
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($directory), \RecursiveIteratorIterator::CHILD_FIRST);
|
||||
foreach ($iterator as $path) {
|
||||
if (preg_match('#[/\\\\]\.\.?$#', $path->__toString())) {
|
||||
continue;
|
||||
}
|
||||
if ($path->isDir()) {
|
||||
rmdir($path->__toString());
|
||||
} else {
|
||||
unlink($path->__toString());
|
||||
}
|
||||
}
|
||||
rmdir($directory);
|
||||
}
|
||||
|
||||
public function testGetResource()
|
||||
{
|
||||
$resource = new DirectoryResource($this->directory);
|
||||
$this->assertSame(realpath($this->directory), $resource->getResource(), '->getResource() returns the path to the resource');
|
||||
}
|
||||
|
||||
public function testGetPattern()
|
||||
{
|
||||
$resource = new DirectoryResource($this->directory, 'bar');
|
||||
$this->assertEquals('bar', $resource->getPattern());
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessageRegExp /The directory ".*" does not exist./
|
||||
*/
|
||||
public function testResourceDoesNotExist()
|
||||
{
|
||||
$resource = new DirectoryResource('/____foo/foobar'.mt_rand(1, 999999));
|
||||
}
|
||||
|
||||
public function testIsFresh()
|
||||
{
|
||||
$resource = new DirectoryResource($this->directory);
|
||||
$this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if the resource has not changed');
|
||||
$this->assertFalse($resource->isFresh(time() - 86400), '->isFresh() returns false if the resource has been updated');
|
||||
}
|
||||
|
||||
public function testIsFreshForDeletedResources()
|
||||
{
|
||||
$resource = new DirectoryResource($this->directory);
|
||||
$this->removeDirectory($this->directory);
|
||||
|
||||
$this->assertFalse($resource->isFresh(time()), '->isFresh() returns false if the resource does not exist');
|
||||
}
|
||||
|
||||
public function testIsFreshUpdateFile()
|
||||
{
|
||||
$resource = new DirectoryResource($this->directory);
|
||||
touch($this->directory.'/tmp.xml', time() + 20);
|
||||
$this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if an existing file is modified');
|
||||
}
|
||||
|
||||
public function testIsFreshNewFile()
|
||||
{
|
||||
$resource = new DirectoryResource($this->directory);
|
||||
touch($this->directory.'/new.xml', time() + 20);
|
||||
$this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if a new file is added');
|
||||
}
|
||||
|
||||
public function testIsFreshNewFileWithDifferentPattern()
|
||||
{
|
||||
$resource = new DirectoryResource($this->directory, '/.xml$/');
|
||||
touch($this->directory.'/new.yaml', time() + 20);
|
||||
$this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if a new file with a non-matching pattern is added');
|
||||
}
|
||||
|
||||
public function testIsFreshDeleteFile()
|
||||
{
|
||||
$resource = new DirectoryResource($this->directory);
|
||||
$time = time();
|
||||
sleep(1);
|
||||
unlink($this->directory.'/tmp.xml');
|
||||
$this->assertFalse($resource->isFresh($time), '->isFresh() returns false if an existing file is removed');
|
||||
}
|
||||
|
||||
public function testIsFreshDeleteDirectory()
|
||||
{
|
||||
$resource = new DirectoryResource($this->directory);
|
||||
$this->removeDirectory($this->directory);
|
||||
$this->assertFalse($resource->isFresh(time()), '->isFresh() returns false if the whole resource is removed');
|
||||
}
|
||||
|
||||
public function testIsFreshCreateFileInSubdirectory()
|
||||
{
|
||||
$subdirectory = $this->directory.'/subdirectory';
|
||||
mkdir($subdirectory);
|
||||
|
||||
$resource = new DirectoryResource($this->directory);
|
||||
$this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if an unmodified subdirectory exists');
|
||||
|
||||
touch($subdirectory.'/newfile.xml', time() + 20);
|
||||
$this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if a new file in a subdirectory is added');
|
||||
}
|
||||
|
||||
public function testIsFreshModifySubdirectory()
|
||||
{
|
||||
$resource = new DirectoryResource($this->directory);
|
||||
|
||||
$subdirectory = $this->directory.'/subdirectory';
|
||||
mkdir($subdirectory);
|
||||
touch($subdirectory, time() + 20);
|
||||
|
||||
$this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if a subdirectory is modified (e.g. a file gets deleted)');
|
||||
}
|
||||
|
||||
public function testFilterRegexListNoMatch()
|
||||
{
|
||||
$resource = new DirectoryResource($this->directory, '/\.(foo|xml)$/');
|
||||
|
||||
touch($this->directory.'/new.bar', time() + 20);
|
||||
$this->assertTrue($resource->isFresh(time() + 10), '->isFresh() returns true if a new file not matching the filter regex is created');
|
||||
}
|
||||
|
||||
public function testFilterRegexListMatch()
|
||||
{
|
||||
$resource = new DirectoryResource($this->directory, '/\.(foo|xml)$/');
|
||||
|
||||
touch($this->directory.'/new.xml', time() + 20);
|
||||
$this->assertFalse($resource->isFresh(time() + 10), '->isFresh() returns false if an new file matching the filter regex is created ');
|
||||
}
|
||||
|
||||
public function testSerializeUnserialize()
|
||||
{
|
||||
$resource = new DirectoryResource($this->directory, '/\.(foo|xml)$/');
|
||||
|
||||
$unserialized = unserialize(serialize($resource));
|
||||
|
||||
$this->assertSame(realpath($this->directory), $resource->getResource());
|
||||
$this->assertSame('/\.(foo|xml)$/', $resource->getPattern());
|
||||
}
|
||||
|
||||
public function testResourcesWithDifferentPatternsAreDifferent()
|
||||
{
|
||||
$resourceA = new DirectoryResource($this->directory, '/.xml$/');
|
||||
$resourceB = new DirectoryResource($this->directory, '/.yaml$/');
|
||||
|
||||
$this->assertCount(2, array_unique(array($resourceA, $resourceB)));
|
||||
}
|
||||
}
|
71
vendor/symfony/config/Tests/Resource/FileExistenceResourceTest.php
vendored
Normal file
71
vendor/symfony/config/Tests/Resource/FileExistenceResourceTest.php
vendored
Normal file
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Resource;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Resource\FileExistenceResource;
|
||||
|
||||
class FileExistenceResourceTest extends TestCase
|
||||
{
|
||||
protected $resource;
|
||||
protected $file;
|
||||
protected $time;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->file = realpath(sys_get_temp_dir()).'/tmp.xml';
|
||||
$this->time = time();
|
||||
$this->resource = new FileExistenceResource($this->file);
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
if (file_exists($this->file)) {
|
||||
unlink($this->file);
|
||||
}
|
||||
}
|
||||
|
||||
public function testToString()
|
||||
{
|
||||
$this->assertSame($this->file, (string) $this->resource);
|
||||
}
|
||||
|
||||
public function testGetResource()
|
||||
{
|
||||
$this->assertSame($this->file, $this->resource->getResource(), '->getResource() returns the path to the resource');
|
||||
}
|
||||
|
||||
public function testIsFreshWithExistingResource()
|
||||
{
|
||||
touch($this->file, $this->time);
|
||||
$serialized = serialize(new FileExistenceResource($this->file));
|
||||
|
||||
$resource = unserialize($serialized);
|
||||
$this->assertTrue($resource->isFresh($this->time), '->isFresh() returns true if the resource is still present');
|
||||
|
||||
unlink($this->file);
|
||||
$resource = unserialize($serialized);
|
||||
$this->assertFalse($resource->isFresh($this->time), '->isFresh() returns false if the resource has been deleted');
|
||||
}
|
||||
|
||||
public function testIsFreshWithAbsentResource()
|
||||
{
|
||||
$serialized = serialize(new FileExistenceResource($this->file));
|
||||
|
||||
$resource = unserialize($serialized);
|
||||
$this->assertTrue($resource->isFresh($this->time), '->isFresh() returns true if the resource is still absent');
|
||||
|
||||
touch($this->file, $this->time);
|
||||
$resource = unserialize($serialized);
|
||||
$this->assertFalse($resource->isFresh($this->time), '->isFresh() returns false if the resource has been created');
|
||||
}
|
||||
}
|
85
vendor/symfony/config/Tests/Resource/FileResourceTest.php
vendored
Normal file
85
vendor/symfony/config/Tests/Resource/FileResourceTest.php
vendored
Normal file
|
@ -0,0 +1,85 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Resource;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Resource\FileResource;
|
||||
|
||||
class FileResourceTest extends TestCase
|
||||
{
|
||||
protected $resource;
|
||||
protected $file;
|
||||
protected $time;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->file = sys_get_temp_dir().'/tmp.xml';
|
||||
$this->time = time();
|
||||
touch($this->file, $this->time);
|
||||
$this->resource = new FileResource($this->file);
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
if (!file_exists($this->file)) {
|
||||
return;
|
||||
}
|
||||
|
||||
unlink($this->file);
|
||||
}
|
||||
|
||||
public function testGetResource()
|
||||
{
|
||||
$this->assertSame(realpath($this->file), $this->resource->getResource(), '->getResource() returns the path to the resource');
|
||||
}
|
||||
|
||||
public function testGetResourceWithScheme()
|
||||
{
|
||||
$resource = new FileResource('file://'.$this->file);
|
||||
$this->assertSame('file://'.$this->file, $resource->getResource(), '->getResource() returns the path to the schemed resource');
|
||||
}
|
||||
|
||||
public function testToString()
|
||||
{
|
||||
$this->assertSame(realpath($this->file), (string) $this->resource);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedExceptionMessageRegExp /The file ".*" does not exist./
|
||||
*/
|
||||
public function testResourceDoesNotExist()
|
||||
{
|
||||
$resource = new FileResource('/____foo/foobar'.mt_rand(1, 999999));
|
||||
}
|
||||
|
||||
public function testIsFresh()
|
||||
{
|
||||
$this->assertTrue($this->resource->isFresh($this->time), '->isFresh() returns true if the resource has not changed in same second');
|
||||
$this->assertTrue($this->resource->isFresh($this->time + 10), '->isFresh() returns true if the resource has not changed');
|
||||
$this->assertFalse($this->resource->isFresh($this->time - 86400), '->isFresh() returns false if the resource has been updated');
|
||||
}
|
||||
|
||||
public function testIsFreshForDeletedResources()
|
||||
{
|
||||
unlink($this->file);
|
||||
|
||||
$this->assertFalse($this->resource->isFresh($this->time), '->isFresh() returns false if the resource does not exist');
|
||||
}
|
||||
|
||||
public function testSerializeUnserialize()
|
||||
{
|
||||
$unserialized = unserialize(serialize($this->resource));
|
||||
|
||||
$this->assertSame(realpath($this->file), $this->resource->getResource());
|
||||
}
|
||||
}
|
114
vendor/symfony/config/Tests/Resource/GlobResourceTest.php
vendored
Normal file
114
vendor/symfony/config/Tests/Resource/GlobResourceTest.php
vendored
Normal file
|
@ -0,0 +1,114 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Resource;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Resource\GlobResource;
|
||||
|
||||
class GlobResourceTest extends TestCase
|
||||
{
|
||||
protected function tearDown()
|
||||
{
|
||||
$dir = \dirname(__DIR__).'/Fixtures';
|
||||
@rmdir($dir.'/TmpGlob');
|
||||
@unlink($dir.'/TmpGlob');
|
||||
@unlink($dir.'/Resource/TmpGlob');
|
||||
touch($dir.'/Resource/.hiddenFile');
|
||||
}
|
||||
|
||||
public function testIterator()
|
||||
{
|
||||
$dir = \dirname(__DIR__).\DIRECTORY_SEPARATOR.'Fixtures';
|
||||
$resource = new GlobResource($dir, '/Resource', true);
|
||||
|
||||
$paths = iterator_to_array($resource);
|
||||
|
||||
$file = $dir.'/Resource'.\DIRECTORY_SEPARATOR.'ConditionalClass.php';
|
||||
$this->assertEquals(array($file => new \SplFileInfo($file)), $paths);
|
||||
$this->assertInstanceOf('SplFileInfo', current($paths));
|
||||
$this->assertSame($dir, $resource->getPrefix());
|
||||
|
||||
$resource = new GlobResource($dir, '/**/Resource', true);
|
||||
|
||||
$paths = iterator_to_array($resource);
|
||||
|
||||
$file = $dir.\DIRECTORY_SEPARATOR.'Resource'.\DIRECTORY_SEPARATOR.'ConditionalClass.php';
|
||||
$this->assertEquals(array($file => $file), $paths);
|
||||
$this->assertInstanceOf('SplFileInfo', current($paths));
|
||||
$this->assertSame($dir, $resource->getPrefix());
|
||||
}
|
||||
|
||||
public function testIsFreshNonRecursiveDetectsNewFile()
|
||||
{
|
||||
$dir = \dirname(__DIR__).'/Fixtures';
|
||||
$resource = new GlobResource($dir, '/*', false);
|
||||
|
||||
$this->assertTrue($resource->isFresh(0));
|
||||
|
||||
mkdir($dir.'/TmpGlob');
|
||||
$this->assertTrue($resource->isFresh(0));
|
||||
|
||||
rmdir($dir.'/TmpGlob');
|
||||
$this->assertTrue($resource->isFresh(0));
|
||||
|
||||
touch($dir.'/TmpGlob');
|
||||
$this->assertFalse($resource->isFresh(0));
|
||||
|
||||
unlink($dir.'/TmpGlob');
|
||||
$this->assertTrue($resource->isFresh(0));
|
||||
}
|
||||
|
||||
public function testIsFreshNonRecursiveDetectsRemovedFile()
|
||||
{
|
||||
$dir = \dirname(__DIR__).'/Fixtures';
|
||||
$resource = new GlobResource($dir, '/*', false);
|
||||
|
||||
touch($dir.'/TmpGlob');
|
||||
touch($dir.'/.TmpGlob');
|
||||
$this->assertTrue($resource->isFresh(0));
|
||||
|
||||
unlink($dir.'/.TmpGlob');
|
||||
$this->assertTrue($resource->isFresh(0));
|
||||
|
||||
unlink($dir.'/TmpGlob');
|
||||
$this->assertFalse($resource->isFresh(0));
|
||||
}
|
||||
|
||||
public function testIsFreshRecursiveDetectsRemovedFile()
|
||||
{
|
||||
$dir = \dirname(__DIR__).'/Fixtures';
|
||||
$resource = new GlobResource($dir, '/*', true);
|
||||
|
||||
touch($dir.'/Resource/TmpGlob');
|
||||
$this->assertTrue($resource->isFresh(0));
|
||||
|
||||
unlink($dir.'/Resource/TmpGlob');
|
||||
$this->assertFalse($resource->isFresh(0));
|
||||
|
||||
touch($dir.'/Resource/TmpGlob');
|
||||
$this->assertTrue($resource->isFresh(0));
|
||||
|
||||
unlink($dir.'/Resource/.hiddenFile');
|
||||
$this->assertTrue($resource->isFresh(0));
|
||||
}
|
||||
|
||||
public function testIsFreshRecursiveDetectsNewFile()
|
||||
{
|
||||
$dir = \dirname(__DIR__).'/Fixtures';
|
||||
$resource = new GlobResource($dir, '/*', true);
|
||||
|
||||
$this->assertTrue($resource->isFresh(0));
|
||||
|
||||
touch($dir.'/Resource/TmpGlob');
|
||||
$this->assertFalse($resource->isFresh(0));
|
||||
}
|
||||
}
|
189
vendor/symfony/config/Tests/Resource/ReflectionClassResourceTest.php
vendored
Normal file
189
vendor/symfony/config/Tests/Resource/ReflectionClassResourceTest.php
vendored
Normal file
|
@ -0,0 +1,189 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Resource;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Resource\ReflectionClassResource;
|
||||
use Symfony\Component\DependencyInjection\ServiceSubscriberInterface;
|
||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||
|
||||
class ReflectionClassResourceTest extends TestCase
|
||||
{
|
||||
public function testToString()
|
||||
{
|
||||
$res = new ReflectionClassResource(new \ReflectionClass('ErrorException'));
|
||||
|
||||
$this->assertSame('reflection.ErrorException', (string) $res);
|
||||
}
|
||||
|
||||
public function testSerializeUnserialize()
|
||||
{
|
||||
$res = new ReflectionClassResource(new \ReflectionClass(DummyInterface::class));
|
||||
$ser = unserialize(serialize($res));
|
||||
|
||||
$this->assertTrue($res->isFresh(0));
|
||||
$this->assertTrue($ser->isFresh(0));
|
||||
|
||||
$this->assertSame((string) $res, (string) $ser);
|
||||
}
|
||||
|
||||
public function testIsFresh()
|
||||
{
|
||||
$res = new ReflectionClassResource(new \ReflectionClass(__CLASS__));
|
||||
$mtime = filemtime(__FILE__);
|
||||
|
||||
$this->assertTrue($res->isFresh($mtime), '->isFresh() returns true if the resource has not changed in same second');
|
||||
$this->assertTrue($res->isFresh($mtime + 10), '->isFresh() returns true if the resource has not changed');
|
||||
$this->assertTrue($res->isFresh($mtime - 86400), '->isFresh() returns true if the resource has not changed');
|
||||
}
|
||||
|
||||
public function testIsFreshForDeletedResources()
|
||||
{
|
||||
$now = time();
|
||||
$tmp = sys_get_temp_dir().'/tmp.php';
|
||||
file_put_contents($tmp, '<?php class ReflectionClassResourceTestClass {}');
|
||||
require $tmp;
|
||||
|
||||
$res = new ReflectionClassResource(new \ReflectionClass('ReflectionClassResourceTestClass'));
|
||||
$this->assertTrue($res->isFresh($now));
|
||||
|
||||
unlink($tmp);
|
||||
$this->assertFalse($res->isFresh($now), '->isFresh() returns false if the resource does not exist');
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideHashedSignature
|
||||
*/
|
||||
public function testHashedSignature($changeExpected, $changedLine, $changedCode)
|
||||
{
|
||||
$code = <<<'EOPHP'
|
||||
/* 0*/
|
||||
/* 1*/ class %s extends ErrorException
|
||||
/* 2*/ {
|
||||
/* 3*/ const FOO = 123;
|
||||
/* 4*/
|
||||
/* 5*/ public $pub = array();
|
||||
/* 6*/
|
||||
/* 7*/ protected $prot;
|
||||
/* 8*/
|
||||
/* 9*/ private $priv;
|
||||
/*10*/
|
||||
/*11*/ public function pub($arg = null) {}
|
||||
/*12*/
|
||||
/*13*/ protected function prot($a = array()) {}
|
||||
/*14*/
|
||||
/*15*/ private function priv() {}
|
||||
/*16*/ }
|
||||
EOPHP;
|
||||
|
||||
static $expectedSignature, $generateSignature;
|
||||
|
||||
if (null === $expectedSignature) {
|
||||
eval(sprintf($code, $class = 'Foo'.str_replace('.', '_', uniqid('', true))));
|
||||
$r = new \ReflectionClass(ReflectionClassResource::class);
|
||||
$generateSignature = $r->getMethod('generateSignature');
|
||||
$generateSignature->setAccessible(true);
|
||||
$generateSignature = $generateSignature->getClosure($r->newInstanceWithoutConstructor());
|
||||
$expectedSignature = implode("\n", iterator_to_array($generateSignature(new \ReflectionClass($class))));
|
||||
}
|
||||
|
||||
$code = explode("\n", $code);
|
||||
$code[$changedLine] = $changedCode;
|
||||
eval(sprintf(implode("\n", $code), $class = 'Foo'.str_replace('.', '_', uniqid('', true))));
|
||||
$signature = implode("\n", iterator_to_array($generateSignature(new \ReflectionClass($class))));
|
||||
|
||||
if ($changeExpected) {
|
||||
$this->assertNotSame($expectedSignature, $signature);
|
||||
} else {
|
||||
$this->assertSame($expectedSignature, $signature);
|
||||
}
|
||||
}
|
||||
|
||||
public function provideHashedSignature()
|
||||
{
|
||||
yield array(0, 0, "// line change\n\n");
|
||||
yield array(1, 0, '/** class docblock */');
|
||||
yield array(1, 1, 'abstract class %s');
|
||||
yield array(1, 1, 'final class %s');
|
||||
yield array(1, 1, 'class %s extends Exception');
|
||||
yield array(1, 1, 'class %s implements '.DummyInterface::class);
|
||||
yield array(1, 3, 'const FOO = 456;');
|
||||
yield array(1, 3, 'const BAR = 123;');
|
||||
yield array(1, 4, '/** pub docblock */');
|
||||
yield array(1, 5, 'protected $pub = array();');
|
||||
yield array(1, 5, 'public $pub = array(123);');
|
||||
yield array(1, 6, '/** prot docblock */');
|
||||
yield array(1, 7, 'private $prot;');
|
||||
yield array(0, 8, '/** priv docblock */');
|
||||
yield array(0, 9, 'private $priv = 123;');
|
||||
yield array(1, 10, '/** pub docblock */');
|
||||
if (\PHP_VERSION_ID >= 50600) {
|
||||
yield array(1, 11, 'public function pub(...$arg) {}');
|
||||
}
|
||||
if (\PHP_VERSION_ID >= 70000) {
|
||||
yield array(1, 11, 'public function pub($arg = null): Foo {}');
|
||||
}
|
||||
yield array(0, 11, "public function pub(\$arg = null) {\nreturn 123;\n}");
|
||||
yield array(1, 12, '/** prot docblock */');
|
||||
yield array(1, 13, 'protected function prot($a = array(123)) {}');
|
||||
yield array(0, 14, '/** priv docblock */');
|
||||
yield array(0, 15, '');
|
||||
}
|
||||
|
||||
public function testEventSubscriber()
|
||||
{
|
||||
$res = new ReflectionClassResource(new \ReflectionClass(TestEventSubscriber::class));
|
||||
$this->assertTrue($res->isFresh(0));
|
||||
|
||||
TestEventSubscriber::$subscribedEvents = array(123);
|
||||
$this->assertFalse($res->isFresh(0));
|
||||
|
||||
$res = new ReflectionClassResource(new \ReflectionClass(TestEventSubscriber::class));
|
||||
$this->assertTrue($res->isFresh(0));
|
||||
}
|
||||
|
||||
public function testServiceSubscriber()
|
||||
{
|
||||
$res = new ReflectionClassResource(new \ReflectionClass(TestServiceSubscriber::class));
|
||||
$this->assertTrue($res->isFresh(0));
|
||||
|
||||
TestServiceSubscriber::$subscribedServices = array(123);
|
||||
$this->assertFalse($res->isFresh(0));
|
||||
|
||||
$res = new ReflectionClassResource(new \ReflectionClass(TestServiceSubscriber::class));
|
||||
$this->assertTrue($res->isFresh(0));
|
||||
}
|
||||
}
|
||||
|
||||
interface DummyInterface
|
||||
{
|
||||
}
|
||||
|
||||
class TestEventSubscriber implements EventSubscriberInterface
|
||||
{
|
||||
public static $subscribedEvents = array();
|
||||
|
||||
public static function getSubscribedEvents()
|
||||
{
|
||||
return self::$subscribedEvents;
|
||||
}
|
||||
}
|
||||
|
||||
class TestServiceSubscriber implements ServiceSubscriberInterface
|
||||
{
|
||||
public static $subscribedServices = array();
|
||||
|
||||
public static function getSubscribedServices()
|
||||
{
|
||||
return self::$subscribedServices;
|
||||
}
|
||||
}
|
34
vendor/symfony/config/Tests/Resource/ResourceStub.php
vendored
Normal file
34
vendor/symfony/config/Tests/Resource/ResourceStub.php
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Resource;
|
||||
|
||||
use Symfony\Component\Config\Resource\SelfCheckingResourceInterface;
|
||||
|
||||
class ResourceStub implements SelfCheckingResourceInterface
|
||||
{
|
||||
private $fresh = true;
|
||||
|
||||
public function setFresh($isFresh)
|
||||
{
|
||||
$this->fresh = $isFresh;
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return 'stub';
|
||||
}
|
||||
|
||||
public function isFresh($timestamp)
|
||||
{
|
||||
return $this->fresh;
|
||||
}
|
||||
}
|
150
vendor/symfony/config/Tests/ResourceCheckerConfigCacheTest.php
vendored
Normal file
150
vendor/symfony/config/Tests/ResourceCheckerConfigCacheTest.php
vendored
Normal file
|
@ -0,0 +1,150 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Resource\FileResource;
|
||||
use Symfony\Component\Config\ResourceCheckerConfigCache;
|
||||
use Symfony\Component\Config\Tests\Resource\ResourceStub;
|
||||
|
||||
class ResourceCheckerConfigCacheTest extends TestCase
|
||||
{
|
||||
private $cacheFile = null;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->cacheFile = tempnam(sys_get_temp_dir(), 'config_');
|
||||
}
|
||||
|
||||
protected function tearDown()
|
||||
{
|
||||
$files = array($this->cacheFile, "{$this->cacheFile}.meta");
|
||||
|
||||
foreach ($files as $file) {
|
||||
if (file_exists($file)) {
|
||||
unlink($file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function testGetPath()
|
||||
{
|
||||
$cache = new ResourceCheckerConfigCache($this->cacheFile);
|
||||
|
||||
$this->assertSame($this->cacheFile, $cache->getPath());
|
||||
}
|
||||
|
||||
public function testCacheIsNotFreshIfEmpty()
|
||||
{
|
||||
$checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock()
|
||||
->expects($this->never())->method('supports');
|
||||
|
||||
/* If there is nothing in the cache, it needs to be filled (and thus it's not fresh).
|
||||
It does not matter if you provide checkers or not. */
|
||||
|
||||
unlink($this->cacheFile); // remove tempnam() side effect
|
||||
$cache = new ResourceCheckerConfigCache($this->cacheFile, array($checker));
|
||||
|
||||
$this->assertFalse($cache->isFresh());
|
||||
}
|
||||
|
||||
public function testCacheIsFreshIfNoCheckerProvided()
|
||||
{
|
||||
/* For example in prod mode, you may choose not to run any checkers
|
||||
at all. In that case, the cache should always be considered fresh. */
|
||||
$cache = new ResourceCheckerConfigCache($this->cacheFile);
|
||||
$this->assertTrue($cache->isFresh());
|
||||
}
|
||||
|
||||
public function testCacheIsFreshIfEmptyCheckerIteratorProvided()
|
||||
{
|
||||
$cache = new ResourceCheckerConfigCache($this->cacheFile, new \ArrayIterator(array()));
|
||||
$this->assertTrue($cache->isFresh());
|
||||
}
|
||||
|
||||
public function testResourcesWithoutcheckersAreIgnoredAndConsideredFresh()
|
||||
{
|
||||
/* As in the previous test, but this time we have a resource. */
|
||||
$cache = new ResourceCheckerConfigCache($this->cacheFile);
|
||||
$cache->write('', array(new ResourceStub()));
|
||||
|
||||
$this->assertTrue($cache->isFresh()); // no (matching) ResourceChecker passed
|
||||
}
|
||||
|
||||
public function testIsFreshWithchecker()
|
||||
{
|
||||
$checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock();
|
||||
|
||||
$checker->expects($this->once())
|
||||
->method('supports')
|
||||
->willReturn(true);
|
||||
|
||||
$checker->expects($this->once())
|
||||
->method('isFresh')
|
||||
->willReturn(true);
|
||||
|
||||
$cache = new ResourceCheckerConfigCache($this->cacheFile, array($checker));
|
||||
$cache->write('', array(new ResourceStub()));
|
||||
|
||||
$this->assertTrue($cache->isFresh());
|
||||
}
|
||||
|
||||
public function testIsNotFreshWithchecker()
|
||||
{
|
||||
$checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock();
|
||||
|
||||
$checker->expects($this->once())
|
||||
->method('supports')
|
||||
->willReturn(true);
|
||||
|
||||
$checker->expects($this->once())
|
||||
->method('isFresh')
|
||||
->willReturn(false);
|
||||
|
||||
$cache = new ResourceCheckerConfigCache($this->cacheFile, array($checker));
|
||||
$cache->write('', array(new ResourceStub()));
|
||||
|
||||
$this->assertFalse($cache->isFresh());
|
||||
}
|
||||
|
||||
public function testCacheIsNotFreshWhenUnserializeFails()
|
||||
{
|
||||
$checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock();
|
||||
$cache = new ResourceCheckerConfigCache($this->cacheFile, array($checker));
|
||||
$cache->write('foo', array(new FileResource(__FILE__)));
|
||||
|
||||
$metaFile = "{$this->cacheFile}.meta";
|
||||
file_put_contents($metaFile, str_replace('FileResource', 'ClassNotHere', file_get_contents($metaFile)));
|
||||
|
||||
$this->assertFalse($cache->isFresh());
|
||||
}
|
||||
|
||||
public function testCacheKeepsContent()
|
||||
{
|
||||
$cache = new ResourceCheckerConfigCache($this->cacheFile);
|
||||
$cache->write('FOOBAR');
|
||||
|
||||
$this->assertSame('FOOBAR', file_get_contents($cache->getPath()));
|
||||
}
|
||||
|
||||
public function testCacheIsNotFreshIfNotExistsMetaFile()
|
||||
{
|
||||
$checker = $this->getMockBuilder('\Symfony\Component\Config\ResourceCheckerInterface')->getMock();
|
||||
$cache = new ResourceCheckerConfigCache($this->cacheFile, array($checker));
|
||||
$cache->write('foo', array(new FileResource(__FILE__)));
|
||||
|
||||
$metaFile = "{$this->cacheFile}.meta";
|
||||
unlink($metaFile);
|
||||
|
||||
$this->assertFalse($cache->isFresh());
|
||||
}
|
||||
}
|
217
vendor/symfony/config/Tests/Util/XmlUtilsTest.php
vendored
Normal file
217
vendor/symfony/config/Tests/Util/XmlUtilsTest.php
vendored
Normal file
|
@ -0,0 +1,217 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Config\Tests\Util;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Util\XmlUtils;
|
||||
|
||||
class XmlUtilsTest extends 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->getMockBuilder(__NAMESPACE__.'\Validator')->getMock();
|
||||
$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->assertRegExp('/The XML file ".+" is not valid\./', $e->getMessage());
|
||||
}
|
||||
|
||||
$this->assertInstanceOf('DOMDocument', XmlUtils::loadFile($fixtures.'valid.xml', array($mock, 'validate')));
|
||||
$this->assertSame(array(), libxml_get_errors());
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Config\Util\Exception\InvalidXmlException
|
||||
* @expectedExceptionMessage The XML is not valid
|
||||
*/
|
||||
public function testParseWithInvalidValidatorCallable()
|
||||
{
|
||||
$fixtures = __DIR__.'/../Fixtures/Util/';
|
||||
|
||||
$mock = $this->getMockBuilder(__NAMESPACE__.'\Validator')->getMock();
|
||||
$mock->expects($this->once())->method('validate')->willReturn(false);
|
||||
|
||||
XmlUtils::parse(file_get_contents($fixtures.'valid.xml'), array($mock, 'validate'));
|
||||
}
|
||||
|
||||
public function testLoadFileWithInternalErrorsEnabled()
|
||||
{
|
||||
$internalErrors = libxml_use_internal_errors(true);
|
||||
|
||||
$this->assertSame(array(), libxml_get_errors());
|
||||
$this->assertInstanceOf('DOMDocument', XmlUtils::loadFile(__DIR__.'/../Fixtures/Util/invalid_schema.xml'));
|
||||
$this->assertSame(array(), libxml_get_errors());
|
||||
|
||||
libxml_clear_errors();
|
||||
libxml_use_internal_errors($internalErrors);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getDataForConvertDomToArray
|
||||
*/
|
||||
public function testConvertDomToArray($expected, $xml, $root = false, $checkPrefix = true)
|
||||
{
|
||||
$dom = new \DOMDocument();
|
||||
$dom->loadXML($root ? $xml : '<root>'.$xml.'</root>');
|
||||
|
||||
$this->assertSame($expected, XmlUtils::convertDomElementToArray($dom->documentElement, $checkPrefix));
|
||||
}
|
||||
|
||||
public function getDataForConvertDomToArray()
|
||||
{
|
||||
return array(
|
||||
array(null, ''),
|
||||
array('bar', 'bar'),
|
||||
array(array('bar' => 'foobar'), '<foo bar="foobar" />', true),
|
||||
array(array('foo' => null), '<foo />'),
|
||||
array(array('foo' => 'bar'), '<foo>bar</foo>'),
|
||||
array(array('foo' => array('foo' => 'bar')), '<foo foo="bar"/>'),
|
||||
array(array('foo' => array('foo' => 0)), '<foo><foo>0</foo></foo>'),
|
||||
array(array('foo' => array('foo' => 'bar')), '<foo><foo>bar</foo></foo>'),
|
||||
array(array('foo' => array('foo' => 'bar', 'value' => 'text')), '<foo foo="bar">text</foo>'),
|
||||
array(array('foo' => array('attr' => 'bar', 'foo' => 'text')), '<foo attr="bar"><foo>text</foo></foo>'),
|
||||
array(array('foo' => array('bar', 'text')), '<foo>bar</foo><foo>text</foo>'),
|
||||
array(array('foo' => array(array('foo' => 'bar'), array('foo' => 'text'))), '<foo foo="bar"/><foo foo="text" />'),
|
||||
array(array('foo' => array('foo' => array('bar', 'text'))), '<foo foo="bar"><foo>text</foo></foo>'),
|
||||
array(array('foo' => 'bar'), '<foo><!-- Comment -->bar</foo>'),
|
||||
array(array('foo' => 'text'), '<foo xmlns:h="http://www.example.org/bar" h:bar="bar">text</foo>'),
|
||||
array(array('foo' => array('bar' => 'bar', 'value' => 'text')), '<foo xmlns:h="http://www.example.org/bar" h:bar="bar">text</foo>', false, false),
|
||||
array(array('attr' => 1, 'b' => 'hello'), '<foo:a xmlns:foo="http://www.example.org/foo" xmlns:h="http://www.example.org/bar" attr="1" h:bar="bar"><foo:b>hello</foo:b><h:c>2</h:c></foo:a>', true),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getDataForPhpize
|
||||
*/
|
||||
public function testPhpize($expected, $value)
|
||||
{
|
||||
$this->assertSame($expected, XmlUtils::phpize($value));
|
||||
}
|
||||
|
||||
public function getDataForPhpize()
|
||||
{
|
||||
return array(
|
||||
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(-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'),
|
||||
array(6, '0b0110'),
|
||||
);
|
||||
}
|
||||
|
||||
public function testLoadEmptyXmlFile()
|
||||
{
|
||||
$file = __DIR__.'/../Fixtures/foo.xml';
|
||||
|
||||
if (method_exists($this, 'expectException')) {
|
||||
$this->expectException('InvalidArgumentException');
|
||||
$this->expectExceptionMessage(sprintf('File %s does not contain valid XML, it is empty.', $file));
|
||||
} else {
|
||||
$this->setExpectedException('InvalidArgumentException', sprintf('File %s does not contain valid XML, it is empty.', $file));
|
||||
}
|
||||
|
||||
XmlUtils::loadFile($file);
|
||||
}
|
||||
|
||||
// test for issue https://github.com/symfony/symfony/issues/9731
|
||||
public function testLoadWrongEmptyXMLWithErrorHandler()
|
||||
{
|
||||
$originalDisableEntities = libxml_disable_entity_loader(false);
|
||||
$errorReporting = error_reporting(-1);
|
||||
|
||||
set_error_handler(function ($errno, $errstr) {
|
||||
throw new \Exception($errstr, $errno);
|
||||
});
|
||||
|
||||
$file = __DIR__.'/../Fixtures/foo.xml';
|
||||
try {
|
||||
try {
|
||||
XmlUtils::loadFile($file);
|
||||
$this->fail('An exception should have been raised');
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
$this->assertEquals(sprintf('File %s does not contain valid XML, it is empty.', $file), $e->getMessage());
|
||||
}
|
||||
} finally {
|
||||
restore_error_handler();
|
||||
error_reporting($errorReporting);
|
||||
}
|
||||
|
||||
$disableEntities = libxml_disable_entity_loader(true);
|
||||
libxml_disable_entity_loader($disableEntities);
|
||||
|
||||
libxml_disable_entity_loader($originalDisableEntities);
|
||||
|
||||
$this->assertFalse($disableEntities);
|
||||
|
||||
// should not throw an exception
|
||||
XmlUtils::loadFile(__DIR__.'/../Fixtures/Util/valid.xml', __DIR__.'/../Fixtures/Util/schema.xsd');
|
||||
}
|
||||
}
|
||||
|
||||
interface Validator
|
||||
{
|
||||
public function validate();
|
||||
}
|
Reference in a new issue