Exemplo n.º 1
0
        def test(expected, test, description):
            bag = ParameterBag({'foo': 'bar'});

            try:
                self.assertEqual(expected, bag.resolveString(test), description);
            except ParameterNotFoundException as e:
                self.fail('{0} - "{1}"'.format(description, expected));
        def test(expected, test, description):
            bag = ParameterBag({'foo': 'bar'})

            try:
                self.assertEqual(expected, bag.resolveString(test),
                                 description)
            except ParameterNotFoundException as e:
                self.fail('{0} - "{1}"'.format(description, expected))
Exemplo n.º 3
0
    def testHas(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.has

        """

        bag = ParameterBag({'foo': 'bar'});
        self.assertTrue(bag.has('foo'), '->has() returns True if a parameter is defined');
        self.assertTrue(bag.has('Foo'), '->has() converts the key to lowercase');
        self.assertFalse(bag.has('bar'), '->has() returns False if a parameter is not defined');
Exemplo n.º 4
0
    def testConstructor(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.__construct

        """

        parameters = {
            'foo': 'foo',
            'bar': 'bar',
        };

        bag = ParameterBag(parameters);
        self.assertEqual(parameters, bag.all(), '__init__() takes an array of parameters as its first argument');
    def testHas(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.has

        """

        bag = ParameterBag({'foo': 'bar'})
        self.assertTrue(bag.has('foo'),
                        '->has() returns True if a parameter is defined')
        self.assertTrue(bag.has('Foo'),
                        '->has() converts the key to lowercase')
        self.assertFalse(
            bag.has('bar'),
            '->has() returns False if a parameter is not defined')
Exemplo n.º 6
0
    def testClear(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.clear

        """

        parameters = {
            'foo': 'foo',
            'bar': 'bar',
        };

        bag = ParameterBag(parameters);
        bag.clear();
        self.assertEqual({}, bag.all(), '->clear() removes all parameters');
    def testClear(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.clear

        """

        parameters = {
            'foo': 'foo',
            'bar': 'bar',
        }

        bag = ParameterBag(parameters)
        bag.clear()
        self.assertEqual({}, bag.all(), '->clear() removes all parameters')
    def testEscapeValue(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.escapeValue

        """

        bag = ParameterBag()

        bag.add({
            'foo':
            bag.escapeValue(
                {'bar': {
                    'ding': 'I\'m a bar %foo %bar',
                    'zero': None
                }}),
            'bar':
            bag.escapeValue('I\'m a %foo%'),
        })

        self.assertEqual('I\'m a %%foo%%', bag.get('bar'),
                         '->escapeValue() escapes % by doubling it')
        self.assertEqual(
            {'bar': {
                'ding': 'I\'m a bar %%foo %%bar',
                'zero': None
            }}, bag.get('foo'), '->escapeValue() escapes % by doubling it')
Exemplo n.º 9
0
    def testResolveUnescapesValue(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.resolve

        """

        bag = ParameterBag({
            'foo': {'bar': {'ding': 'I\'m a bar %%foo %%bar'}},
            'bar': 'I\'m a %%foo%%',
        });

        bag.resolve();

        self.assertEqual('I\'m a %foo%', bag.get('bar'), '->resolveValue() supports % escaping by doubling it');
        self.assertEqual({'bar': {'ding': 'I\'m a bar %foo %bar'}}, bag.get('foo'), '->resolveValue() supports % escaping by doubling it');
Exemplo n.º 10
0
    def testConstructor(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.__construct

        """

        parameters = {
            'foo': 'foo',
            'bar': 'bar',
        }

        bag = ParameterBag(parameters)
        self.assertEqual(
            parameters, bag.all(),
            '__init__() takes an array of parameters as its first argument')
Exemplo n.º 11
0
    def testIsFrozen(self):
        """
        @covers Symfony\Component\DependencyInjection\Container.isFrozen

        """

        sc = Container(ParameterBag({'foo': 'bar'}))
        self.assertFalse(
            sc.isFrozen(),
            '->isFrozen() returns False if the parameters are not frozen')
        sc.compile()
        self.assertTrue(
            sc.isFrozen(),
            '->isFrozen() returns True if the parameters are frozen')
Exemplo n.º 12
0
    def testRemove(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.remove

        """

        bag = ParameterBag({
            'foo': 'foo',
            'bar': 'bar',
        })
        bag.remove('foo')
        self.assertEqual({'bar': 'bar'}, bag.all(),
                         '->remove() removes a parameter')
        bag.remove('BAR')
        self.assertEqual(
            {}, bag.all(),
            '->remove() converts key to lowercase before removing')
Exemplo n.º 13
0
    def testConstructor(self):
        """
        @covers Symfony\Component\DependencyInjection\Container.__construct

        """

        sc = Container()
        self.assertEqual(
            sc, sc.get('service_container'),
            '__init__() automatically registers itself as a service')

        sc = Container(ParameterBag({'foo': 'bar'}))
        self.assertEqual(
            {'foo': 'bar'},
            sc.getParameterBag().all(),
            '__init__() takes an array of parameters as its first argument')
Exemplo n.º 14
0
    def testRemove(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.remove

        """

        bag = ParameterBag({
            'foo': 'foo',
            'bar': 'bar',
        });
        bag.remove('foo');
        self.assertEqual({'bar': 'bar'}, bag.all(), '->remove() removes a parameter');
        bag.remove('BAR');
        self.assertEqual({}, bag.all(), '->remove() converts key to lowercase before removing');
Exemplo n.º 15
0
    def testCompile(self):
        """
        @covers Symfony\Component\DependencyInjection\Container.compile

        """

        sc = Container(ParameterBag({'foo': 'bar'}))
        sc.compile()
        self.assertTrue(
            isinstance(sc.getParameterBag(), FrozenParameterBag),
            '->compile() changes the parameter bag to a FrozenParameterBag instance'
        )
        self.assertEqual(
            {'foo': 'bar'},
            sc.getParameterBag().all(),
            '->compile() copies the current parameters to the new parameter bag'
        )
Exemplo n.º 16
0
    def testEscapeValue(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.escapeValue

        """

        bag = ParameterBag();

        bag.add({
            'foo': bag.escapeValue({'bar': {'ding': 'I\'m a bar %foo %bar', 'zero': None}}),
            'bar': bag.escapeValue('I\'m a %foo%'),
        });

        self.assertEqual('I\'m a %%foo%%', bag.get('bar'), '->escapeValue() escapes % by doubling it');
        self.assertEqual({'bar': {'ding': 'I\'m a bar %%foo %%bar', 'zero': None}}, bag.get('foo'), '->escapeValue() escapes % by doubling it');
Exemplo n.º 17
0
    def testResolveIndicatesWhyAParameterIsNeeded(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.resolve

        """

        bag = ParameterBag({'foo': '%bar%'})

        try:
            bag.resolve()
        except ParameterNotFoundException as e:
            self.assertEqual(
                'The parameter "foo" has a dependency on a non-existent parameter "bar".',
                e.getMessage())

        bag = ParameterBag({'foo': '%bar%'})

        try:
            bag.resolve()
        except ParameterNotFoundException as e:
            self.assertEqual(
                'The parameter "foo" has a dependency on a non-existent parameter "bar".',
                e.getMessage())
Exemplo n.º 18
0
    def testGetSetParameter(self):
        """
        @covers Symfony\Component\DependencyInjection\Container.setParameter
        @covers Symfony\Component\DependencyInjection\Container.getParameter

        """

        sc = Container(ParameterBag({'foo': 'bar'}))
        sc.setParameter('bar', 'foo')
        self.assertEqual('foo', sc.getParameter('bar'),
                         '->setParameter() sets the value of a new parameter')

        sc.setParameter('foo', 'baz')
        self.assertEqual(
            'baz', sc.getParameter('foo'),
            '->setParameter() overrides previously set parameter')

        sc.setParameter('Foo', 'baz1')
        self.assertEqual('baz1', sc.getParameter('foo'),
                         '->setParameter() converts the key to lowercase')
        self.assertEqual('baz1', sc.getParameter('FOO'),
                         '->getParameter() converts the key to lowercase')

        try:
            sc.getParameter('baba')
            self.fail(
                '->getParameter() thrown an InvalidArgumentException if the key does not exist'
            )
        except Exception as e:
            self.assertTrue(
                isinstance(e, InvalidArgumentException),
                '->getParameter() thrown an InvalidArgumentException if the key does not exist'
            )
            self.assertEqual(
                'You have requested a non-existent parameter "baba".',
                e.getMessage(),
                '->getParameter() thrown an InvalidArgumentException if the key does not exist'
            )
Exemplo n.º 19
0
    def __init__(self, parameterBag=None):
        """Constructor.

        @param: ParameterBagInterface parameterBag A ParameterBagInterface instance

        @api

        """
        self._services = dict()
        self._scopes = dict()
        self._scopeChildren = dict()
        self._scopedServices = dict()
        self._scopeStacks = dict()
        self._parameterBag = None
        self._loading = dict()

        if parameterBag is None:
            self._parameterBag = ParameterBag()
        else:
            assert isinstance(parameterBag, ParameterBagInterface)
            self._parameterBag = parameterBag

        self.set('service_container', self)
Exemplo n.º 20
0
    def testResolveIndicatesWhyAParameterIsNeeded(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.resolve

        """

        bag = ParameterBag({'foo': '%bar%'});

        try:
            bag.resolve();
        except ParameterNotFoundException as e:
            self.assertEqual('The parameter "foo" has a dependency on a non-existent parameter "bar".', e.getMessage());


        bag = ParameterBag({'foo': '%bar%'});

        try:
            bag.resolve();
        except ParameterNotFoundException as e:
            self.assertEqual('The parameter "foo" has a dependency on a non-existent parameter "bar".', e.getMessage());
Exemplo n.º 21
0
    def testResolveUnescapesValue(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.resolve

        """

        bag = ParameterBag({
            'foo': {
                'bar': {
                    'ding': 'I\'m a bar %%foo %%bar'
                }
            },
            'bar': 'I\'m a %%foo%%',
        })

        bag.resolve()

        self.assertEqual(
            'I\'m a %foo%', bag.get('bar'),
            '->resolveValue() supports % escaping by doubling it')
        self.assertEqual({'bar': {
            'ding': 'I\'m a bar %foo %bar'
        }}, bag.get('foo'),
                         '->resolveValue() supports % escaping by doubling it')
Exemplo n.º 22
0
    def testGetSet(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.get
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.set

        """

        bag = ParameterBag({'foo': 'bar'});
        bag.set('bar', 'foo');
        self.assertEqual('foo', bag.get('bar'), '->set() sets the value of a new parameter');

        bag.set('foo', 'baz');
        self.assertEqual('baz', bag.get('foo'), '->set() overrides previously set parameter');

        bag.set('Foo', 'baz1');
        self.assertEqual('baz1', bag.get('foo'), '->set() converts the key to lowercase');
        self.assertEqual('baz1', bag.get('FOO'), '->get() converts the key to lowercase');

        try:
            bag.get('baba');
            self.fail('->get() raise an InvalidArgumentException if the key does not exist');
        except Exception as e:
            self.assertTrue(isinstance(e, InvalidArgumentException), '->get() raise an InvalidArgumentException if the key does not exist');
            self.assertEqual('You have requested a non-existent parameter "baba".', e.getMessage(), '->get() raise an InvalidArgumentException if the key does not exist');
Exemplo n.º 23
0
 def _getContainerBuilder(self):
     return ContainerBuilder(ParameterBag(self._getKernelParameters()))
Exemplo n.º 24
0
    def testResolveValue(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.resolveValue

        """

        bag = ParameterBag({});
        self.assertEqual('foo', bag.resolveValue('foo'), '->resolveValue() returns its argument unmodified if no placeholders are found');

        bag = ParameterBag({'foo': 'bar'});
        self.assertEqual('I\'m a bar', bag.resolveValue('I\'m a %foo%'), '->resolveValue() replaces placeholders by their values');
        self.assertEqual({'bar': 'bar'}, bag.resolveValue({'%foo%': '%foo%'}), '->resolveValue() replaces placeholders in keys and values of arrays');
        self.assertEqual({'bar': {'bar': {'bar': 'bar'}}}, bag.resolveValue({'%foo%': {'%foo%': {'%foo%': '%foo%'}}}), '->resolveValue() replaces placeholders in nested arrays');
        self.assertEqual('I\'m a %%foo%%', bag.resolveValue('I\'m a %%foo%%'), '->resolveValue() supports % escaping by doubling it');
        self.assertEqual('I\'m a bar %%foo bar', bag.resolveValue('I\'m a %foo% %%foo %foo%'), '->resolveValue() supports % escaping by doubling it');
        self.assertEqual({'foo': {'bar': {'ding': 'I\'m a bar %%foo %%bar'}}}, bag.resolveValue({'foo': {'bar': {'ding': 'I\'m a bar %%foo %%bar'}}}), '->resolveValue() supports % escaping by doubling it');

        bag = ParameterBag({'foo': True});
        self.assertTrue(bag.resolveValue('%foo%'), '->resolveValue() replaces arguments that are just a placeholder by their value without casting them to strings');
        bag = ParameterBag({'foo': None});
        self.assertTrue(None is bag.resolveValue('%foo%'), '->resolveValue() replaces arguments that are just a placeholder by their value without casting them to strings');

        bag = ParameterBag({'foo': 'bar', 'baz': '%%%foo% %foo%%% %%foo%% %%%foo%%%'});
        self.assertEqual('%%bar bar%% %%foo%% %%bar%%', bag.resolveValue('%baz%'), '->resolveValue() replaces params placed besides escaped %');

        bag = ParameterBag({'baz': '%%s?%%s'});
        self.assertEqual('%%s?%%s', bag.resolveValue('%baz%'), '->resolveValue() is not replacing greedily');

        bag = ParameterBag({});
        try:
            bag.resolveValue('%foobar%');
            self.fail('->resolveValue() raise an InvalidArgumentException if a placeholder references a non-existent parameter');
        except ParameterNotFoundException as e:
            self.assertEqual('You have requested a non-existent parameter "foobar".', e.getMessage(), '->resolveValue() raise a ParameterNotFoundException if a placeholder references a non-existent parameter');


        try:
            bag.resolveValue('foo %foobar% bar');
            self.fail('->resolveValue() raise a ParameterNotFoundException if a placeholder references a non-existent parameter');
        except ParameterNotFoundException as e:
            self.assertEqual('You have requested a non-existent parameter "foobar".', e.getMessage(), '->resolveValue() raise a ParameterNotFoundException if a placeholder references a non-existent parameter');


        bag = ParameterBag({'foo': 'a %bar%', 'bar': {}});
        try:
            bag.resolveValue('%foo%');
            self.fail('->resolveValue() raise a RuntimeException when a parameter embeds another non-string parameter');
        except RuntimeException as e:
            self.assertEqual('A string value must be composed of strings and/or numbers, but found parameter "bar" of type dict inside string value "a %bar%".', e.getMessage(), '->resolveValue() raise a RuntimeException when a parameter embeds another non-string parameter');


        bag = ParameterBag({'foo': '%bar%', 'bar': '%foobar%', 'foobar': '%foo%'});
        try:
            bag.resolveValue('%foo%');
            self.fail('->resolveValue() raise a ParameterCircularReferenceException when a parameter has a circular reference');
        except ParameterCircularReferenceException as e:
            self.assertEqual('Circular reference detected for parameter "foo" ("foo" > "bar" > "foobar" > "foo").', e.getMessage(), '->resolveValue() raise a ParameterCircularReferenceException when a parameter has a circular reference');


        bag = ParameterBag({'foo': 'a %bar%', 'bar': 'a %foobar%', 'foobar': 'a %foo%'});
        try:
            bag.resolveValue('%foo%');
            self.fail('->resolveValue() raise a ParameterCircularReferenceException when a parameter has a circular reference');
        except ParameterCircularReferenceException as e:
            self.assertEqual('Circular reference detected for parameter "foo" ("foo" > "bar" > "foobar" > "foo").', e.getMessage(), '->resolveValue() raise a ParameterCircularReferenceException when a parameter has a circular reference');


        bag = ParameterBag({'host': 'foo.bar', 'port': 1337});
        self.assertEqual('foo.bar:1337', bag.resolveValue('%host%:%port%'));
Exemplo n.º 25
0
    def testResolveValue(self):
        """
        @covers Symfony\Component\DependencyInjection\ParameterBag\ParameterBag.resolveValue

        """

        bag = ParameterBag({})
        self.assertEqual(
            'foo', bag.resolveValue('foo'),
            '->resolveValue() returns its argument unmodified if no placeholders are found'
        )

        bag = ParameterBag({'foo': 'bar'})
        self.assertEqual(
            'I\'m a bar', bag.resolveValue('I\'m a %foo%'),
            '->resolveValue() replaces placeholders by their values')
        self.assertEqual({'bar': 'bar'}, bag.resolveValue(
            {'%foo%': '%foo%'}
        ), '->resolveValue() replaces placeholders in keys and values of arrays'
                         )
        self.assertEqual({'bar': {
            'bar': {
                'bar': 'bar'
            }
        }}, bag.resolveValue({'%foo%': {
            '%foo%': {
                '%foo%': '%foo%'
            }
        }}), '->resolveValue() replaces placeholders in nested arrays')
        self.assertEqual(
            'I\'m a %%foo%%', bag.resolveValue('I\'m a %%foo%%'),
            '->resolveValue() supports % escaping by doubling it')
        self.assertEqual(
            'I\'m a bar %%foo bar',
            bag.resolveValue('I\'m a %foo% %%foo %foo%'),
            '->resolveValue() supports % escaping by doubling it')
        self.assertEqual({'foo': {
            'bar': {
                'ding': 'I\'m a bar %%foo %%bar'
            }
        }},
                         bag.resolveValue({
                             'foo': {
                                 'bar': {
                                     'ding': 'I\'m a bar %%foo %%bar'
                                 }
                             }
                         }),
                         '->resolveValue() supports % escaping by doubling it')

        bag = ParameterBag({'foo': True})
        self.assertTrue(
            bag.resolveValue('%foo%'),
            '->resolveValue() replaces arguments that are just a placeholder by their value without casting them to strings'
        )
        bag = ParameterBag({'foo': None})
        self.assertTrue(
            None is bag.resolveValue('%foo%'),
            '->resolveValue() replaces arguments that are just a placeholder by their value without casting them to strings'
        )

        bag = ParameterBag({
            'foo': 'bar',
            'baz': '%%%foo% %foo%%% %%foo%% %%%foo%%%'
        })
        self.assertEqual(
            '%%bar bar%% %%foo%% %%bar%%', bag.resolveValue('%baz%'),
            '->resolveValue() replaces params placed besides escaped %')

        bag = ParameterBag({'baz': '%%s?%%s'})
        self.assertEqual('%%s?%%s', bag.resolveValue('%baz%'),
                         '->resolveValue() is not replacing greedily')

        bag = ParameterBag({})
        try:
            bag.resolveValue('%foobar%')
            self.fail(
                '->resolveValue() raise an InvalidArgumentException if a placeholder references a non-existent parameter'
            )
        except ParameterNotFoundException as e:
            self.assertEqual(
                'You have requested a non-existent parameter "foobar".',
                e.getMessage(),
                '->resolveValue() raise a ParameterNotFoundException if a placeholder references a non-existent parameter'
            )

        try:
            bag.resolveValue('foo %foobar% bar')
            self.fail(
                '->resolveValue() raise a ParameterNotFoundException if a placeholder references a non-existent parameter'
            )
        except ParameterNotFoundException as e:
            self.assertEqual(
                'You have requested a non-existent parameter "foobar".',
                e.getMessage(),
                '->resolveValue() raise a ParameterNotFoundException if a placeholder references a non-existent parameter'
            )

        bag = ParameterBag({
            'foo': 'a %bar%',
            'bar': {}
        })
        try:
            bag.resolveValue('%foo%')
            self.fail(
                '->resolveValue() raise a RuntimeException when a parameter embeds another non-string parameter'
            )
        except RuntimeException as e:
            self.assertEqual(
                'A string value must be composed of strings and/or numbers, but found parameter "bar" of type dict inside string value "a %bar%".',
                e.getMessage(),
                '->resolveValue() raise a RuntimeException when a parameter embeds another non-string parameter'
            )

        bag = ParameterBag({
            'foo': '%bar%',
            'bar': '%foobar%',
            'foobar': '%foo%'
        })
        try:
            bag.resolveValue('%foo%')
            self.fail(
                '->resolveValue() raise a ParameterCircularReferenceException when a parameter has a circular reference'
            )
        except ParameterCircularReferenceException as e:
            self.assertEqual(
                'Circular reference detected for parameter "foo" ("foo" > "bar" > "foobar" > "foo").',
                e.getMessage(),
                '->resolveValue() raise a ParameterCircularReferenceException when a parameter has a circular reference'
            )

        bag = ParameterBag({
            'foo': 'a %bar%',
            'bar': 'a %foobar%',
            'foobar': 'a %foo%'
        })
        try:
            bag.resolveValue('%foo%')
            self.fail(
                '->resolveValue() raise a ParameterCircularReferenceException when a parameter has a circular reference'
            )
        except ParameterCircularReferenceException as e:
            self.assertEqual(
                'Circular reference detected for parameter "foo" ("foo" > "bar" > "foobar" > "foo").',
                e.getMessage(),
                '->resolveValue() raise a ParameterCircularReferenceException when a parameter has a circular reference'
            )

        bag = ParameterBag({
            'host': 'foo.bar',
            'port': 1337
        })
        self.assertEqual('foo.bar:1337', bag.resolveValue('%host%:%port%'))