~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_config.py

  • Committer: Vincent Ladeuil
  • Date: 2013-10-04 09:56:23 UTC
  • mto: (6588.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 6589.
  • Revision ID: v.ladeuil+lp@free.fr-20131004095623-xlan34vg0y51gdb5
Stricter checks on configuration option names

Show diffs side-by-side

added added

removed removed

Lines of Context:
2224
2224
        self.assertSaveHook(remote_bzrdir._get_config())
2225
2225
 
2226
2226
 
 
2227
class TestOptionNames(tests.TestCase):
 
2228
 
 
2229
    def is_valid(self, name):
 
2230
        return config._option_ref_re.match('{%s}' % name) is not None
 
2231
 
 
2232
    def test_valid_names(self):
 
2233
        self.assertTrue(self.is_valid('foo'))
 
2234
        self.assertTrue(self.is_valid('foo.bar'))
 
2235
        self.assertTrue(self.is_valid('f1'))
 
2236
        self.assertTrue(self.is_valid('_'))
 
2237
        self.assertTrue(self.is_valid('__bar__'))
 
2238
        self.assertTrue(self.is_valid('a_'))
 
2239
        self.assertTrue(self.is_valid('a1'))
 
2240
 
 
2241
    def test_invalid_names(self):
 
2242
        self.assertFalse(self.is_valid(' foo'))
 
2243
        self.assertFalse(self.is_valid('foo '))
 
2244
        self.assertFalse(self.is_valid('1'))
 
2245
        self.assertFalse(self.is_valid('1,2'))
 
2246
        self.assertFalse(self.is_valid('foo$'))
 
2247
        self.assertFalse(self.is_valid('!foo'))
 
2248
        self.assertFalse(self.is_valid('foo.'))
 
2249
        self.assertFalse(self.is_valid('foo..bar'))
 
2250
        self.assertFalse(self.is_valid('{}'))
 
2251
        self.assertFalse(self.is_valid('{a}'))
 
2252
        self.assertFalse(self.is_valid('a\n'))
 
2253
 
 
2254
    def assertSingleGroup(self, reference):
 
2255
        # the regexp is used with split and as such should match the reference
 
2256
        # *only*, if more groups needs to be defined, (?:...) should be used.
 
2257
        m = config._option_ref_re.match('{a}')
 
2258
        self.assertLength(1, m.groups())
 
2259
 
 
2260
    def test_valid_references(self):
 
2261
        self.assertSingleGroup('{a}')
 
2262
        self.assertSingleGroup('{{a}}')
 
2263
 
 
2264
 
2227
2265
class TestOption(tests.TestCase):
2228
2266
 
2229
2267
    def test_default_value(self):
2451
2489
        self.registry.register(opt)
2452
2490
        self.assertEquals('A simple option', self.registry.get_help('foo'))
2453
2491
 
 
2492
    def test_dont_register_illegal_name(self):
 
2493
        self.assertRaises(errors.IllegalOptionName,
 
2494
                          self.registry.register, config.Option(' foo'))
 
2495
        self.assertRaises(errors.IllegalOptionName,
 
2496
                          self.registry.register, config.Option('bar,'))
 
2497
 
2454
2498
    lazy_option = config.Option('lazy_foo', help='Lazy help')
2455
2499
 
2456
2500
    def test_register_lazy(self):
2463
2507
                                    'TestOptionRegistry.lazy_option')
2464
2508
        self.assertEquals('Lazy help', self.registry.get_help('lazy_foo'))
2465
2509
 
 
2510
    def test_dont_lazy_register_illegal_name(self):
 
2511
        # This is where the root cause of http://pad.lv/1235099 is better
 
2512
        # understood: 'register_lazy' doc string mentions that key should match
 
2513
        # the option name which indirectly requires that the option name is a
 
2514
        # valid python identifier. We violate that rule here (using a key that
 
2515
        # doesn't match the option name) to test the option name checking.
 
2516
        self.assertRaises(errors.IllegalOptionName,
 
2517
                          self.registry.register_lazy, ' foo', self.__module__,
 
2518
                          'TestOptionRegistry.lazy_option')
 
2519
        self.assertRaises(errors.IllegalOptionName,
 
2520
                          self.registry.register_lazy, '1,2', self.__module__,
 
2521
                          'TestOptionRegistry.lazy_option')
 
2522
 
2466
2523
 
2467
2524
class TestRegisteredOptions(tests.TestCase):
2468
2525
    """All registered options should verify some constraints."""
3924
3981
        self.assertRaises(errors.ExpandingUnknownOption,
3925
3982
                          self.conf.expand_options, '{foo}')
3926
3983
 
 
3984
    def test_illegal_def_is_ignored(self):
 
3985
        self.assertExpansion('{1,2}', '{1,2}')
 
3986
        self.assertExpansion('{ }', '{ }')
 
3987
        self.assertExpansion('${Foo,f}', '${Foo,f}')
 
3988
 
3927
3989
    def test_indirect_ref(self):
3928
3990
        self.conf.store._load_from_string('''
3929
3991
foo=xxx