fix some risky tests

This commit is contained in:
Christian Flothmann 2017-03-18 10:10:35 +01:00
parent 80af0838f5
commit fffcd247b2
27 changed files with 222 additions and 150 deletions

View File

@ -145,13 +145,16 @@ class ArrayNodeDefinitionTest extends TestCase
public function testNestedPrototypedArrayNodes() public function testNestedPrototypedArrayNodes()
{ {
$node = new ArrayNodeDefinition('root'); $nodeDefinition = new ArrayNodeDefinition('root');
$node $nodeDefinition
->addDefaultChildrenIfNoneSet() ->addDefaultChildrenIfNoneSet()
->prototype('array') ->prototype('array')
->prototype('array') ->prototype('array')
; ;
$node->getNode(); $node = $nodeDefinition->getNode();
$this->assertInstanceOf('Symfony\Component\Config\Definition\PrototypedArrayNode', $node);
$this->assertInstanceOf('Symfony\Component\Config\Definition\PrototypedArrayNode', $node->getPrototype());
} }
public function testEnabledNodeDefaults() public function testEnabledNodeDefaults()

View File

@ -71,6 +71,8 @@ class TreeBuilderTest extends TestCase
$root = $builder->root('override', 'array', new CustomNodeBuilder()); $root = $builder->root('override', 'array', new CustomNodeBuilder());
$root->prototype('bar')->end(); $root->prototype('bar')->end();
$this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\BarNode', $root->getNode(true)->getPrototype());
} }
public function testAnExtendedNodeBuilderGetsPropagatedToTheChildren() public function testAnExtendedNodeBuilderGetsPropagatedToTheChildren()
@ -79,7 +81,7 @@ class TreeBuilderTest extends TestCase
$builder->root('propagation') $builder->root('propagation')
->children() ->children()
->setNodeClass('extended', 'Symfony\Component\Config\Tests\Definition\Builder\VariableNodeDefinition') ->setNodeClass('extended', 'Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition')
->node('foo', 'extended')->end() ->node('foo', 'extended')->end()
->arrayNode('child') ->arrayNode('child')
->children() ->children()
@ -88,6 +90,15 @@ class TreeBuilderTest extends TestCase
->end() ->end()
->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() public function testDefinitionInfoGetsTransferredToNode()

View 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
{
}

View File

@ -12,10 +12,12 @@
namespace Symfony\Component\Config\Tests\Definition\Builder; namespace Symfony\Component\Config\Tests\Definition\Builder;
use Symfony\Component\Config\Definition\Builder\NodeDefinition; use Symfony\Component\Config\Definition\Builder\NodeDefinition;
use Symfony\Component\Config\Tests\Fixtures\BarNode;
class BarNodeDefinition extends NodeDefinition class BarNodeDefinition extends NodeDefinition
{ {
protected function createNode() protected function createNode()
{ {
return new BarNode($this->name);
} }
} }

View File

@ -299,6 +299,8 @@ class CompoundFormTest extends AbstractFormTest
public function testRemoveIgnoresUnknownName() public function testRemoveIgnoresUnknownName()
{ {
$this->form->remove('notexisting'); $this->form->remove('notexisting');
$this->assertCount(0, $this->form);
} }
public function testArrayAccess() public function testArrayAccess()

View File

@ -126,9 +126,9 @@ class ChoiceTypeTest extends BaseTypeTest
public function testChoiceListAndChoicesCanBeEmpty() public function testChoiceListAndChoicesCanBeEmpty()
{ {
$this->factory->create(static::TESTED_TYPE, null, array( $this->assertInstanceOf('Symfony\Component\Form\FormInterface', $this->factory->create(static::TESTED_TYPE, null, array(
'choices_as_values' => true, 'choices_as_values' => true,
)); )));
} }
public function testExpandedChoicesOptionsTurnIntoChildren() public function testExpandedChoicesOptionsTurnIntoChildren()
@ -2251,10 +2251,10 @@ class ChoiceTypeTest extends BaseTypeTest
// https://github.com/symfony/symfony/issues/3298 // https://github.com/symfony/symfony/issues/3298
public function testInitializeWithEmptyChoices() public function testInitializeWithEmptyChoices()
{ {
$this->factory->createNamed('name', static::TESTED_TYPE, null, array( $this->assertInstanceOf('Symfony\Component\Form\FormInterface', $this->factory->createNamed('name', static::TESTED_TYPE, null, array(
'choices' => array(), 'choices' => array(),
'choices_as_values' => true, 'choices_as_values' => true,
)); )));
} }
public function testInitializeWithDefaultObjectChoice() public function testInitializeWithDefaultObjectChoice()

View File

@ -43,11 +43,13 @@ class CountryTypeTest extends BaseTypeTest
$choices = $this->factory->create(static::TESTED_TYPE, 'country') $choices = $this->factory->create(static::TESTED_TYPE, 'country')
->createView()->vars['choices']; ->createView()->vars['choices'];
$countryCodes = array();
foreach ($choices as $choice) { foreach ($choices as $choice) {
if ('ZZ' === $choice->value) { $countryCodes[] = $choice->value;
$this->fail('Should not contain choice "ZZ"');
}
} }
$this->assertNotContains('ZZ', $countryCodes);
} }
public function testSubmitNull($expected = null, $norm = null, $view = null) public function testSubmitNull($expected = null, $norm = null, $view = null)

View File

@ -273,7 +273,7 @@ class DateTimeTypeTest extends BaseTypeTest
{ {
// Throws an exception if "data_class" option is not explicitly set // Throws an exception if "data_class" option is not explicitly set
// to null in the type // to null in the type
$this->factory->create(static::TESTED_TYPE, new \DateTime()); $this->assertInstanceOf('Symfony\Component\Form\FormInterface', $this->factory->create(static::TESTED_TYPE, new \DateTime()));
} }
public function testSingleTextWidgetShouldUseTheRightInputType() public function testSingleTextWidgetShouldUseTheRightInputType()

View File

@ -711,7 +711,7 @@ class DateTypeTest extends BaseTypeTest
{ {
// Throws an exception if "data_class" option is not explicitly set // Throws an exception if "data_class" option is not explicitly set
// to null in the type // to null in the type
$this->factory->create(static::TESTED_TYPE, new \DateTime()); $this->assertInstanceOf('Symfony\Component\Form\FormInterface', $this->factory->create(static::TESTED_TYPE, new \DateTime()));
} }
public function testSingleTextWidgetShouldUseTheRightInputType() public function testSingleTextWidgetShouldUseTheRightInputType()

View File

@ -149,23 +149,23 @@ class FormTypeTest extends BaseTypeTest
public function testDataClassMayBeNull() public function testDataClassMayBeNull()
{ {
$this->factory->createBuilder(static::TESTED_TYPE, null, array( $this->assertInstanceOf('Symfony\Component\Form\FormBuilderInterface', $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'data_class' => null, 'data_class' => null,
)); )));
} }
public function testDataClassMayBeAbstractClass() public function testDataClassMayBeAbstractClass()
{ {
$this->factory->createBuilder(static::TESTED_TYPE, null, array( $this->assertInstanceOf('Symfony\Component\Form\FormBuilderInterface', $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\AbstractAuthor', 'data_class' => 'Symfony\Component\Form\Tests\Fixtures\AbstractAuthor',
)); )));
} }
public function testDataClassMayBeInterface() public function testDataClassMayBeInterface()
{ {
$this->factory->createBuilder(static::TESTED_TYPE, null, array( $this->assertInstanceOf('Symfony\Component\Form\FormBuilderInterface', $this->factory->createBuilder(static::TESTED_TYPE, null, array(
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\AuthorInterface', 'data_class' => 'Symfony\Component\Form\Tests\Fixtures\AuthorInterface',
)); )));
} }
/** /**
@ -652,7 +652,7 @@ class FormTypeTest extends BaseTypeTest
$form = $builder->getForm(); $form = $builder->getForm();
//This method should not throw a Fatal Error Exception. //This method should not throw a Fatal Error Exception.
$form->getErrorsAsString(); $this->assertInternalType('string', $form->getErrorsAsString());
} }
public function testSubmitNull($expected = null, $norm = null, $view = null) public function testSubmitNull($expected = null, $norm = null, $view = null)

View File

@ -488,7 +488,7 @@ class TimeTypeTest extends BaseTypeTest
{ {
// Throws an exception if "data_class" option is not explicitly set // Throws an exception if "data_class" option is not explicitly set
// to null in the type // to null in the type
$this->factory->create(static::TESTED_TYPE, new \DateTime()); $this->assertInstanceOf('Symfony\Component\Form\FormInterface', $this->factory->create(static::TESTED_TYPE, new \DateTime()));
} }
public function testSingleTextWidgetShouldUseTheRightInputType() public function testSingleTextWidgetShouldUseTheRightInputType()

View File

@ -46,16 +46,21 @@ class DependencyInjectionExtensionTest extends TestCase
public function testThrowExceptionForInvalidExtendedType() public function testThrowExceptionForInvalidExtendedType()
{ {
$formTypeExtension = $this->createFormTypeExtensionMock('unmatched');
$container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerInterface')->getMock(); $container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerInterface')->getMock();
$container->expects($this->any()) $container->expects($this->any())
->method('get') ->method('get')
->with('extension') ->with('extension')
->willReturn($this->createFormTypeExtensionMock('unmatched')); ->willReturn($formTypeExtension);
$extension = new DependencyInjectionExtension($container, array(), array('test' => array('extension')), array()); $extension = new DependencyInjectionExtension($container, array(), array('test' => array('extension')), array());
$extension->getTypeExtensions('test'); $extensions = $extension->getTypeExtensions('test');
$this->assertCount(1, $extensions);
$this->assertSame($formTypeExtension, $extensions[0]);
} }
public function testGetTypeGuesser() public function testGetTypeGuesser()

View File

@ -161,6 +161,8 @@ class FormBuilderTest extends TestCase
{ {
$this->builder->add(new ButtonBuilder('reset')); $this->builder->add(new ButtonBuilder('reset'));
$this->builder->add(new SubmitButtonBuilder('submit')); $this->builder->add(new SubmitButtonBuilder('submit'));
$this->assertCount(2, $this->builder->all());
} }
public function testGetUnknown() public function testGetUnknown()

View File

@ -12,9 +12,7 @@
namespace Symfony\Component\Form\Tests; namespace Symfony\Component\Form\Tests;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use Symfony\Component\Form\Exception\UnexpectedTypeException;
use Symfony\Component\Form\FormConfigBuilder; use Symfony\Component\Form\FormConfigBuilder;
use Symfony\Component\Form\Exception\InvalidArgumentException;
/** /**
* @author Bernhard Schussek <bschussek@gmail.com> * @author Bernhard Schussek <bschussek@gmail.com>
@ -24,72 +22,65 @@ class FormConfigTest extends TestCase
public function getHtml4Ids() public function getHtml4Ids()
{ {
return array( return array(
array('z0', true), array('z0'),
array('A0', true), array('A0'),
array('A9', true), array('A9'),
array('Z0', true), array('Z0'),
array('#', false), array('#', 'Symfony\Component\Form\Exception\InvalidArgumentException'),
array('a#', false), array('a#', 'Symfony\Component\Form\Exception\InvalidArgumentException'),
array('a$', false), array('a$', 'Symfony\Component\Form\Exception\InvalidArgumentException'),
array('a%', false), array('a%', 'Symfony\Component\Form\Exception\InvalidArgumentException'),
array('a ', false), array('a ', 'Symfony\Component\Form\Exception\InvalidArgumentException'),
array("a\t", false), array("a\t", 'Symfony\Component\Form\Exception\InvalidArgumentException'),
array("a\n", false), array("a\n", 'Symfony\Component\Form\Exception\InvalidArgumentException'),
array('a-', true), array('a-'),
array('a_', true), array('a_'),
array('a:', true), array('a:'),
// Periods are allowed by the HTML4 spec, but disallowed by us // Periods are allowed by the HTML4 spec, but disallowed by us
// because they break the generated property paths // because they break the generated property paths
array('a.', false), array('a.', 'Symfony\Component\Form\Exception\InvalidArgumentException'),
// Contrary to the HTML4 spec, we allow names starting with a // Contrary to the HTML4 spec, we allow names starting with a
// number, otherwise naming fields by collection indices is not // number, otherwise naming fields by collection indices is not
// possible. // possible.
// For root forms, leading digits will be stripped from the // For root forms, leading digits will be stripped from the
// "id" attribute to produce valid HTML4. // "id" attribute to produce valid HTML4.
array('0', true), array('0'),
array('9', true), array('9'),
// Contrary to the HTML4 spec, we allow names starting with an // Contrary to the HTML4 spec, we allow names starting with an
// underscore, since this is already a widely used practice in // underscore, since this is already a widely used practice in
// Symfony. // Symfony.
// For root forms, leading underscores will be stripped from the // For root forms, leading underscores will be stripped from the
// "id" attribute to produce valid HTML4. // "id" attribute to produce valid HTML4.
array('_', true), array('_'),
// Integers are allowed // Integers are allowed
array(0, true), array(0),
array(123, true), array(123),
// NULL is allowed // NULL is allowed
array(null, true), array(null),
// Other types are not // Other types are not
array(1.23, false), array(1.23, 'Symfony\Component\Form\Exception\UnexpectedTypeException'),
array(5., false), array(5., 'Symfony\Component\Form\Exception\UnexpectedTypeException'),
array(true, false), array(true, 'Symfony\Component\Form\Exception\UnexpectedTypeException'),
array(new \stdClass(), false), array(new \stdClass(), 'Symfony\Component\Form\Exception\UnexpectedTypeException'),
); );
} }
/** /**
* @dataProvider getHtml4Ids * @dataProvider getHtml4Ids
*/ */
public function testNameAcceptsOnlyNamesValidAsIdsInHtml4($name, $accepted) public function testNameAcceptsOnlyNamesValidAsIdsInHtml4($name, $expectedException = null)
{ {
$dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock(); $dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock();
try { if (null !== $expectedException && method_exists($this, 'expectException')) {
new FormConfigBuilder($name, null, $dispatcher); $this->expectException($expectedException);
if (!$accepted) { } elseif (null !== $expectedException) {
$this->fail(sprintf('The value "%s" should not be accepted', $name)); $this->setExpectedException($expectedException);
}
} catch (UnexpectedTypeException $e) {
// if the value was not accepted, but should be, rethrow exception
if ($accepted) {
throw $e;
}
} catch (InvalidArgumentException $e) {
// if the value was not accepted, but should be, rethrow exception
if ($accepted) {
throw $e;
}
} }
$formConfigBuilder = new FormConfigBuilder($name, null, $dispatcher);
$this->assertSame((string) $name, $formConfigBuilder->getName());
} }
public function testGetRequestHandlerCreatesNativeRequestHandlerIfNotSet() public function testGetRequestHandlerCreatesNativeRequestHandlerIfNotSet()
@ -109,27 +100,42 @@ class FormConfigTest extends TestCase
public function testSetMethodAllowsGet() public function testSetMethodAllowsGet()
{ {
$this->getConfigBuilder()->setMethod('GET'); $formConfigBuilder = $this->getConfigBuilder();
$formConfigBuilder->setMethod('GET');
self::assertSame('GET', $formConfigBuilder->getMethod());
} }
public function testSetMethodAllowsPost() public function testSetMethodAllowsPost()
{ {
$this->getConfigBuilder()->setMethod('POST'); $formConfigBuilder = $this->getConfigBuilder();
$formConfigBuilder->setMethod('POST');
self::assertSame('POST', $formConfigBuilder->getMethod());
} }
public function testSetMethodAllowsPut() public function testSetMethodAllowsPut()
{ {
$this->getConfigBuilder()->setMethod('PUT'); $formConfigBuilder = $this->getConfigBuilder();
$formConfigBuilder->setMethod('PUT');
self::assertSame('PUT', $formConfigBuilder->getMethod());
} }
public function testSetMethodAllowsDelete() public function testSetMethodAllowsDelete()
{ {
$this->getConfigBuilder()->setMethod('DELETE'); $formConfigBuilder = $this->getConfigBuilder();
$formConfigBuilder->setMethod('DELETE');
self::assertSame('DELETE', $formConfigBuilder->getMethod());
} }
public function testSetMethodAllowsPatch() public function testSetMethodAllowsPatch()
{ {
$this->getConfigBuilder()->setMethod('PATCH'); $formConfigBuilder = $this->getConfigBuilder();
$formConfigBuilder->setMethod('PATCH');
self::assertSame('PATCH', $formConfigBuilder->getMethod());
} }
/** /**

View File

@ -918,12 +918,11 @@ class SimpleFormTest extends AbstractFormTest
public function testSubmittingWrongDataIsIgnored() public function testSubmittingWrongDataIsIgnored()
{ {
$test = $this; $called = 0;
$child = $this->getBuilder('child', $this->dispatcher); $child = $this->getBuilder('child', $this->dispatcher);
$child->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($test) { $child->addEventListener(FormEvents::PRE_SUBMIT, function () use (&$called) {
// child form doesn't receive the wrong data that is submitted on parent ++$called;
$test->assertNull($event->getData());
}); });
$parent = $this->getBuilder('parent', new EventDispatcher()) $parent = $this->getBuilder('parent', new EventDispatcher())
@ -933,6 +932,8 @@ class SimpleFormTest extends AbstractFormTest
->getForm(); ->getForm();
$parent->submit('not-an-array'); $parent->submit('not-an-array');
$this->assertSame(0, $called, 'PRE_SUBMIT event listeners are not called for wrong data');
} }
public function testHandleRequestForwardsToRequestHandler() public function testHandleRequestForwardsToRequestHandler()
@ -1036,15 +1037,17 @@ class SimpleFormTest extends AbstractFormTest
public function testSubmitIsNeverFiredIfInheritData() public function testSubmitIsNeverFiredIfInheritData()
{ {
$test = $this; $called = 0;
$form = $this->getBuilder() $form = $this->getBuilder()
->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) use ($test) { ->addEventListener(FormEvents::SUBMIT, function () use (&$called) {
$test->fail('The SUBMIT event should not be fired'); ++$called;
}) })
->setInheritData(true) ->setInheritData(true)
->getForm(); ->getForm();
$form->submit('foo'); $form->submit('foo');
$this->assertSame(0, $called, 'The SUBMIT event is not fired when data are inherited from the parent form');
} }
public function testInitializeSetsDefaultData() public function testInitializeSetsDefaultData()

View File

@ -114,8 +114,11 @@ class OrderedHashMapTest extends TestCase
public function testUnsetNonExistingSucceeds() public function testUnsetNonExistingSucceeds()
{ {
$map = new OrderedHashMap(); $map = new OrderedHashMap();
$map['second'] = 2;
unset($map['first']); unset($map['first']);
$this->assertSame(array('second' => 2), iterator_to_array($map));
} }
public function testEmptyIteration() public function testEmptyIteration()

View File

@ -17,14 +17,14 @@ use Symfony\Component\HttpFoundation\IpUtils;
class IpUtilsTest extends TestCase class IpUtilsTest extends TestCase
{ {
/** /**
* @dataProvider testIpv4Provider * @dataProvider getIpv4Data
*/ */
public function testIpv4($matches, $remoteAddr, $cidr) public function testIpv4($matches, $remoteAddr, $cidr)
{ {
$this->assertSame($matches, IpUtils::checkIp($remoteAddr, $cidr)); $this->assertSame($matches, IpUtils::checkIp($remoteAddr, $cidr));
} }
public function testIpv4Provider() public function getIpv4Data()
{ {
return array( return array(
array(true, '192.168.1.1', '192.168.1.1'), array(true, '192.168.1.1', '192.168.1.1'),
@ -43,7 +43,7 @@ class IpUtilsTest extends TestCase
} }
/** /**
* @dataProvider testIpv6Provider * @dataProvider getIpv6Data
*/ */
public function testIpv6($matches, $remoteAddr, $cidr) public function testIpv6($matches, $remoteAddr, $cidr)
{ {
@ -54,7 +54,7 @@ class IpUtilsTest extends TestCase
$this->assertSame($matches, IpUtils::checkIp($remoteAddr, $cidr)); $this->assertSame($matches, IpUtils::checkIp($remoteAddr, $cidr));
} }
public function testIpv6Provider() public function getIpv6Data()
{ {
return array( return array(
array(true, '2a01:198:603:0:396e:4789:8e99:890f', '2a01:198:603:0::/65'), array(true, '2a01:198:603:0:396e:4789:8e99:890f', '2a01:198:603:0::/65'),

View File

@ -18,7 +18,7 @@ use Symfony\Component\HttpFoundation\Request;
class RequestMatcherTest extends TestCase class RequestMatcherTest extends TestCase
{ {
/** /**
* @dataProvider testMethodFixtures * @dataProvider getMethodData
*/ */
public function testMethod($requestMethod, $matcherMethod, $isMatch) public function testMethod($requestMethod, $matcherMethod, $isMatch)
{ {
@ -32,7 +32,7 @@ class RequestMatcherTest extends TestCase
$this->assertSame($isMatch, $matcher->matches($request)); $this->assertSame($isMatch, $matcher->matches($request));
} }
public function testMethodFixtures() public function getMethodData()
{ {
return array( return array(
array('get', 'get', true), array('get', 'get', true),
@ -64,7 +64,7 @@ class RequestMatcherTest extends TestCase
} }
/** /**
* @dataProvider testHostFixture * @dataProvider getHostData
*/ */
public function testHost($pattern, $isMatch) public function testHost($pattern, $isMatch)
{ {
@ -78,7 +78,7 @@ class RequestMatcherTest extends TestCase
$this->assertSame($isMatch, $matcher->matches($request)); $this->assertSame($isMatch, $matcher->matches($request));
} }
public function testHostFixture() public function getHostData()
{ {
return array( return array(
array('.*\.example\.com', true), array('.*\.example\.com', true),

View File

@ -306,6 +306,10 @@ class RequestTest extends TestCase
$request->setFormat($format, $mimeTypes); $request->setFormat($format, $mimeTypes);
foreach ($mimeTypes as $mime) { foreach ($mimeTypes as $mime) {
$this->assertEquals($format, $request->getFormat($mime)); $this->assertEquals($format, $request->getFormat($mime));
if (null !== $format) {
$this->assertEquals($mimeTypes[0], $request->getMimeType($format));
}
} }
} }
@ -315,17 +319,6 @@ class RequestTest extends TestCase
$this->assertEquals('json', $request->getFormat('application/json; charset=utf-8')); $this->assertEquals('json', $request->getFormat('application/json; charset=utf-8'));
} }
/**
* @dataProvider getFormatToMimeTypeMapProvider
*/
public function testGetMimeTypeFromFormat($format, $mimeTypes)
{
if (null !== $format) {
$request = new Request();
$this->assertEquals($mimeTypes[0], $request->getMimeType($format));
}
}
public function testGetFormatWithCustomMimeType() public function testGetFormatWithCustomMimeType()
{ {
$request = new Request(); $request = new Request();
@ -821,7 +814,7 @@ class RequestTest extends TestCase
} }
/** /**
* @dataProvider testGetClientIpsProvider * @dataProvider getClientIpsProvider
*/ */
public function testGetClientIp($expected, $remoteAddr, $httpForwardedFor, $trustedProxies) public function testGetClientIp($expected, $remoteAddr, $httpForwardedFor, $trustedProxies)
{ {
@ -833,7 +826,7 @@ class RequestTest extends TestCase
} }
/** /**
* @dataProvider testGetClientIpsProvider * @dataProvider getClientIpsProvider
*/ */
public function testGetClientIps($expected, $remoteAddr, $httpForwardedFor, $trustedProxies) public function testGetClientIps($expected, $remoteAddr, $httpForwardedFor, $trustedProxies)
{ {
@ -845,7 +838,7 @@ class RequestTest extends TestCase
} }
/** /**
* @dataProvider testGetClientIpsForwardedProvider * @dataProvider getClientIpsForwardedProvider
*/ */
public function testGetClientIpsForwarded($expected, $remoteAddr, $httpForwarded, $trustedProxies) public function testGetClientIpsForwarded($expected, $remoteAddr, $httpForwarded, $trustedProxies)
{ {
@ -856,7 +849,7 @@ class RequestTest extends TestCase
Request::setTrustedProxies(array()); Request::setTrustedProxies(array());
} }
public function testGetClientIpsForwardedProvider() public function getClientIpsForwardedProvider()
{ {
// $expected $remoteAddr $httpForwarded $trustedProxies // $expected $remoteAddr $httpForwarded $trustedProxies
return array( return array(
@ -869,7 +862,7 @@ class RequestTest extends TestCase
); );
} }
public function testGetClientIpsProvider() public function getClientIpsProvider()
{ {
// $expected $remoteAddr $httpForwardedFor $trustedProxies // $expected $remoteAddr $httpForwardedFor $trustedProxies
return array( return array(
@ -926,7 +919,7 @@ class RequestTest extends TestCase
/** /**
* @expectedException \Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException * @expectedException \Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException
* @dataProvider testGetClientIpsWithConflictingHeadersProvider * @dataProvider getClientIpsWithConflictingHeadersProvider
*/ */
public function testGetClientIpsWithConflictingHeaders($httpForwarded, $httpXForwardedFor) public function testGetClientIpsWithConflictingHeaders($httpForwarded, $httpXForwardedFor)
{ {
@ -945,7 +938,7 @@ class RequestTest extends TestCase
$request->getClientIps(); $request->getClientIps();
} }
public function testGetClientIpsWithConflictingHeadersProvider() public function getClientIpsWithConflictingHeadersProvider()
{ {
// $httpForwarded $httpXForwardedFor // $httpForwarded $httpXForwardedFor
return array( return array(
@ -958,9 +951,9 @@ class RequestTest extends TestCase
} }
/** /**
* @dataProvider testGetClientIpsWithAgreeingHeadersProvider * @dataProvider getClientIpsWithAgreeingHeadersProvider
*/ */
public function testGetClientIpsWithAgreeingHeaders($httpForwarded, $httpXForwardedFor) public function testGetClientIpsWithAgreeingHeaders($httpForwarded, $httpXForwardedFor, $expectedIps)
{ {
$request = new Request(); $request = new Request();
@ -974,21 +967,23 @@ class RequestTest extends TestCase
$request->initialize(array(), array(), array(), array(), array(), $server); $request->initialize(array(), array(), array(), array(), array(), $server);
$request->getClientIps(); $clientIps = $request->getClientIps();
Request::setTrustedProxies(array()); Request::setTrustedProxies(array());
$this->assertSame($expectedIps, $clientIps);
} }
public function testGetClientIpsWithAgreeingHeadersProvider() public function getClientIpsWithAgreeingHeadersProvider()
{ {
// $httpForwarded $httpXForwardedFor // $httpForwarded $httpXForwardedFor
return array( return array(
array('for="192.0.2.60"', '192.0.2.60'), array('for="192.0.2.60"', '192.0.2.60', array('192.0.2.60')),
array('for=192.0.2.60, for=87.65.43.21', '192.0.2.60,87.65.43.21'), array('for=192.0.2.60, for=87.65.43.21', '192.0.2.60,87.65.43.21', array('87.65.43.21', '192.0.2.60')),
array('for="[::face]", for=192.0.2.60', '::face,192.0.2.60'), array('for="[::face]", for=192.0.2.60', '::face,192.0.2.60', array('192.0.2.60', '::face')),
array('for="192.0.2.60:80"', '192.0.2.60'), array('for="192.0.2.60:80"', '192.0.2.60', array('192.0.2.60')),
array('for=192.0.2.60;proto=http;by=203.0.113.43', '192.0.2.60'), array('for=192.0.2.60;proto=http;by=203.0.113.43', '192.0.2.60', array('192.0.2.60')),
array('for="[2001:db8:cafe::17]:4711"', '2001:db8:cafe::17'), array('for="[2001:db8:cafe::17]:4711"', '2001:db8:cafe::17', array('2001:db8:cafe::17')),
); );
} }

View File

@ -177,6 +177,8 @@ class SessionTest extends TestCase
{ {
$this->session->start(); $this->session->start();
$this->session->save(); $this->session->save();
$this->assertFalse($this->session->isStarted());
} }
public function testGetId() public function testGetId()

View File

@ -103,6 +103,9 @@ class MetadataBagTest extends TestCase
public function testClear() public function testClear()
{ {
$this->bag->clear(); $this->bag->clear();
// the clear method has no side effects, we just want to ensure it doesn't trigger any exceptions
$this->addToAssertionCount(1);
} }
public function testSkipLastUsedUpdate() public function testSkipLastUsedUpdate()

View File

@ -51,10 +51,12 @@ class StreamedResponseTest extends TestCase
public function testPrepareWithHeadRequest() public function testPrepareWithHeadRequest()
{ {
$response = new StreamedResponse(function () { echo 'foo'; }); $response = new StreamedResponse(function () { echo 'foo'; }, 200, array('Content-Length' => '123'));
$request = Request::create('/', 'HEAD'); $request = Request::create('/', 'HEAD');
$response->prepare($request); $response->prepare($request);
$this->assertSame('123', $response->headers->get('Content-Length'));
} }
public function testPrepareWithCacheHeaders() public function testPrepareWithCacheHeaders()

View File

@ -19,8 +19,6 @@ use Symfony\Component\Security\Acl\Model\EntryInterface;
use Symfony\Component\Security\Acl\Domain\Entry; use Symfony\Component\Security\Acl\Domain\Entry;
use Symfony\Component\Security\Acl\Domain\UserSecurityIdentity; use Symfony\Component\Security\Acl\Domain\UserSecurityIdentity;
use Symfony\Component\Security\Acl\Domain\Acl; use Symfony\Component\Security\Acl\Domain\Acl;
use Symfony\Component\Security\Acl\Exception\AclNotFoundException;
use Symfony\Component\Security\Acl\Exception\ConcurrentModificationException;
use Symfony\Component\Security\Acl\Dbal\AclProvider; use Symfony\Component\Security\Acl\Dbal\AclProvider;
use Symfony\Component\Security\Acl\Domain\PermissionGrantingStrategy; use Symfony\Component\Security\Acl\Domain\PermissionGrantingStrategy;
use Symfony\Component\Security\Acl\Dbal\MutableAclProvider; use Symfony\Component\Security\Acl\Dbal\MutableAclProvider;
@ -79,23 +77,25 @@ class MutableAclProviderTest extends TestCase
$this->assertTrue($acl->getObjectIdentity()->equals($oid)); $this->assertTrue($acl->getObjectIdentity()->equals($oid));
} }
/**
* @expectedException \Symfony\Component\Security\Acl\Exception\AclNotFoundException
*/
public function testDeleteAcl() public function testDeleteAcl()
{ {
$provider = $this->getProvider(); $provider = $this->getProvider();
$oid = new ObjectIdentity(1, 'Foo'); $oid = new ObjectIdentity(1, 'Foo');
$acl = $provider->createAcl($oid); $provider->createAcl($oid);
$provider->deleteAcl($oid); $provider->deleteAcl($oid);
$loadedAcls = $this->getField($provider, 'loadedAcls'); $loadedAcls = $this->getField($provider, 'loadedAcls');
$this->assertCount(0, $loadedAcls['Foo']); $this->assertCount(0, $loadedAcls['Foo']);
try { $provider->findAcl($oid);
$provider->findAcl($oid);
$this->fail('ACL has not been properly deleted.');
} catch (AclNotFoundException $e) {
}
} }
/**
* @expectedException \Symfony\Component\Security\Acl\Exception\AclNotFoundException
*/
public function testDeleteAclDeletesChildren() public function testDeleteAclDeletesChildren()
{ {
$provider = $this->getProvider(); $provider = $this->getProvider();
@ -105,11 +105,7 @@ class MutableAclProviderTest extends TestCase
$provider->updateAcl($acl); $provider->updateAcl($acl);
$provider->deleteAcl($parentAcl->getObjectIdentity()); $provider->deleteAcl($parentAcl->getObjectIdentity());
try { $provider->findAcl(new ObjectIdentity(1, 'Foo'));
$provider->findAcl(new ObjectIdentity(1, 'Foo'));
$this->fail('Child-ACLs have not been deleted.');
} catch (AclNotFoundException $e) {
}
} }
public function testFindAclsAddsPropertyListener() public function testFindAclsAddsPropertyListener()
@ -273,6 +269,9 @@ class MutableAclProviderTest extends TestCase
$provider->updateAcl($acl); $provider->updateAcl($acl);
} }
/**
* @expectedException \Symfony\Component\Security\Acl\Exception\ConcurrentModificationException
*/
public function testUpdateAclThrowsExceptionOnConcurrentModificationOfSharedProperties() public function testUpdateAclThrowsExceptionOnConcurrentModificationOfSharedProperties()
{ {
$provider = $this->getProvider(); $provider = $this->getProvider();
@ -291,11 +290,7 @@ class MutableAclProviderTest extends TestCase
$acl1->insertClassAce($sid, 3); $acl1->insertClassAce($sid, 3);
$acl2->insertClassAce($sid, 5); $acl2->insertClassAce($sid, 5);
try { $provider->updateAcl($acl1);
$provider->updateAcl($acl1);
$this->fail('Provider failed to detect a concurrent modification.');
} catch (ConcurrentModificationException $e) {
}
} }
public function testUpdateAcl() public function testUpdateAcl()
@ -366,7 +361,7 @@ class MutableAclProviderTest extends TestCase
$this->assertEquals($newParentParentAcl->getId(), $reloadedAcl->getParentAcl()->getParentAcl()->getId()); $this->assertEquals($newParentParentAcl->getId(), $reloadedAcl->getParentAcl()->getParentAcl()->getId());
} }
public function testUpdateAclInsertingMultipleObjectFieldAcesThrowsDBConstraintViolations() public function testUpdateAclInsertingMultipleObjectFieldAcesDoesNotThrowDBConstraintViolations()
{ {
$provider = $this->getProvider(); $provider = $this->getProvider();
$oid = new ObjectIdentity(1, 'Foo'); $oid = new ObjectIdentity(1, 'Foo');
@ -386,9 +381,11 @@ class MutableAclProviderTest extends TestCase
$acl = $provider->findAcl($oid); $acl = $provider->findAcl($oid);
$acl->insertObjectFieldAce($fieldName, $sid3, 4); $acl->insertObjectFieldAce($fieldName, $sid3, 4);
$provider->updateAcl($acl); $provider->updateAcl($acl);
$this->assertCount(3, $provider->findAcl($oid)->getObjectFieldAces($fieldName));
} }
public function testUpdateAclDeletingObjectFieldAcesThrowsDBConstraintViolations() public function testUpdateAclDeletingObjectFieldAcesDoesNotThrowDBConstraintViolations()
{ {
$provider = $this->getProvider(); $provider = $this->getProvider();
$oid = new ObjectIdentity(1, 'Foo'); $oid = new ObjectIdentity(1, 'Foo');
@ -412,6 +409,8 @@ class MutableAclProviderTest extends TestCase
$acl = $provider->findAcl($oid); $acl = $provider->findAcl($oid);
$acl->insertObjectFieldAce($fieldName, $sid3, 4); $acl->insertObjectFieldAce($fieldName, $sid3, 4);
$provider->updateAcl($acl); $provider->updateAcl($acl);
$this->assertCount(2, $provider->findAcl($oid)->getObjectFieldAces($fieldName));
} }
public function testUpdateUserSecurityIdentity() public function testUpdateUserSecurityIdentity()

View File

@ -17,7 +17,6 @@ use Symfony\Component\Security\Acl\Domain\RoleSecurityIdentity;
use Symfony\Component\Security\Acl\Domain\Acl; use Symfony\Component\Security\Acl\Domain\Acl;
use Symfony\Component\Security\Acl\Domain\UserSecurityIdentity; use Symfony\Component\Security\Acl\Domain\UserSecurityIdentity;
use Symfony\Component\Security\Acl\Domain\PermissionGrantingStrategy; use Symfony\Component\Security\Acl\Domain\PermissionGrantingStrategy;
use Symfony\Component\Security\Acl\Exception\NoAceFoundException;
class PermissionGrantingStrategyTest extends TestCase class PermissionGrantingStrategyTest extends TestCase
{ {
@ -152,11 +151,13 @@ class PermissionGrantingStrategyTest extends TestCase
$acl->insertObjectAce($sid, $aceMask, 0, true, $maskStrategy); $acl->insertObjectAce($sid, $aceMask, 0, true, $maskStrategy);
if (false === $result) { if (false === $result) {
try { if (method_exists($this, 'expectException')) {
$strategy->isGranted($acl, array($requiredMask), array($sid)); $this->expectException('Symfony\Component\Security\Acl\Exception\NoAceFoundException');
$this->fail('The ACE is not supposed to match.'); } else {
} catch (NoAceFoundException $e) { $this->setExpectedException('Symfony\Component\Security\Acl\Exception\NoAceFoundException');
} }
$strategy->isGranted($acl, array($requiredMask), array($sid));
} else { } else {
$this->assertTrue($strategy->isGranted($acl, array($requiredMask), array($sid))); $this->assertTrue($strategy->isGranted($acl, array($requiredMask), array($sid)));
} }

View File

@ -39,11 +39,20 @@ class BCryptPasswordEncoderTest extends TestCase
new BCryptPasswordEncoder(32); new BCryptPasswordEncoder(32);
} }
public function testCostInRange() /**
* @dataProvider validRangeData
*/
public function testCostInRange($cost)
{ {
for ($cost = 4; $cost <= 31; ++$cost) { $this->assertInstanceOf('Symfony\Component\Security\Core\Encoder\BCryptPasswordEncoder', new BCryptPasswordEncoder($cost));
new BCryptPasswordEncoder($cost); }
}
public function validRangeData()
{
$costs = range(4, 31);
array_walk($costs, function (&$cost) { $cost = array($cost); });
return $costs;
} }
public function testResultLength() public function testResultLength()

View File

@ -86,7 +86,8 @@ class LegacySecurityContextTest extends TestCase
{ {
$authenticationManager = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface')->getMock(); $authenticationManager = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface')->getMock();
$accessDecisionManager = $this->getMockBuilder('Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface')->getMock(); $accessDecisionManager = $this->getMockBuilder('Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface')->getMock();
new SecurityContext($authenticationManager, $accessDecisionManager);
$this->assertInstanceOf('Symfony\Component\Security\Core\SecurityContext', new SecurityContext($authenticationManager, $accessDecisionManager));
} }
/** /**

View File

@ -100,6 +100,9 @@ class DigestDataTest extends TestCase
$this->assertEquals('"u\\ser"', $digestAuth->getUsername()); $this->assertEquals('"u\\ser"', $digestAuth->getUsername());
} }
/**
* @group time-sensitive
*/
public function testValidateAndDecode() public function testValidateAndDecode()
{ {
$time = microtime(true); $time = microtime(true);
@ -112,11 +115,11 @@ class DigestDataTest extends TestCase
'response="b52938fc9e6d7c01be7702ece9031b42"' 'response="b52938fc9e6d7c01be7702ece9031b42"'
); );
try { $digestAuth->validateAndDecode($key, 'Welcome, robot!');
$digestAuth->validateAndDecode($key, 'Welcome, robot!');
} catch (\Exception $e) { sleep(1);
$this->fail(sprintf('testValidateAndDecode fail with message: %s', $e->getMessage()));
} $this->assertTrue($digestAuth->isNonceExpired());
} }
public function testCalculateServerDigest() public function testCalculateServerDigest()