~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_config.py

  • Committer: Patch Queue Manager
  • Date: 2011-09-08 11:01:15 UTC
  • mfrom: (6123.1.16 gpg-typo)
  • Revision ID: pqm@cupuasso-20110908110115-gbb9benwkdksvzk5
(jelmer) Fix a typo (invalid format identifier) in an error message in
 bzrlib.gpg. (Jelmer Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
2462
2462
                             from_unicode=config.list_from_store)
2463
2463
 
2464
2464
    def test_convert_invalid(self):
 
2465
        opt = self.get_option()
 
2466
        # We don't even try to convert a list into a list, we only expect
 
2467
        # strings
 
2468
        self.assertConvertInvalid(opt, [1])
2465
2469
        # No string is invalid as all forms can be converted to a list
2466
 
        pass
2467
2470
 
2468
2471
    def test_convert_valid(self):
2469
2472
        opt = self.get_option()
2476
2479
        self.assertConverted([u'42'], opt, u'42')
2477
2480
        # A single string
2478
2481
        self.assertConverted([u'bar'], opt, u'bar')
2479
 
        # A list remains a list (configObj will turn a string containing commas
2480
 
        # into a list, but that's not what we're testing here)
2481
 
        self.assertConverted([u'foo', u'1', u'True'],
2482
 
                             opt, [u'foo', u'1', u'True'])
2483
2482
 
2484
2483
 
2485
2484
class TestOptionRegistry(tests.TestCase):
2625
2624
    scenarios = [(key, {'get_store': builder}) for key, builder
2626
2625
                 in config.test_store_builder_registry.iteritems()]
2627
2626
 
2628
 
    def setUp(self):
2629
 
        super(TestReadonlyStore, self).setUp()
2630
 
 
2631
2627
    def test_building_delays_load(self):
2632
2628
        store = self.get_store(self)
2633
2629
        self.assertEquals(False, store.is_loaded())
2660
2656
 
2661
2657
 
2662
2658
class TestIniFileStoreContent(tests.TestCaseWithTransport):
2663
 
    """Simulate loading a config store without content of various encodings.
 
2659
    """Simulate loading a config store with content of various encodings.
2664
2660
 
2665
2661
    All files produced by bzr are in utf8 content.
2666
2662
 
2719
2715
 
2720
2716
 
2721
2717
class TestIniConfigContent(tests.TestCaseWithTransport):
2722
 
    """Simulate loading a IniBasedConfig without content of various encodings.
 
2718
    """Simulate loading a IniBasedConfig with content of various encodings.
2723
2719
 
2724
2720
    All files produced by bzr are in utf8 content.
2725
2721
 
2907
2903
        sections = list(store.get_sections())
2908
2904
        self.assertLength(4, sections)
2909
2905
        # The default section has no name.
2910
 
        # List values are provided as lists
2911
 
        self.assertSectionContent((None, {'foo': 'bar', 'l': ['1', '2']}),
 
2906
        # List values are provided as strings and need to be explicitly
 
2907
        # converted by specifying from_unicode=list_from_store at option
 
2908
        # registration
 
2909
        self.assertSectionContent((None, {'foo': 'bar', 'l': u'1,2'}),
2912
2910
                                  sections[0])
2913
2911
        self.assertSectionContent(
2914
2912
            ('DEFAULT', {'foo_in_DEFAULT': 'foo_DEFAULT'}), sections[1])
3060
3058
    # FIXME: It may be worth looking into removing the lock dir when it's not
3061
3059
    # needed anymore and look at possible fallouts for concurrent lockers. This
3062
3060
    # will matter if/when we use config files outside of bazaar directories
3063
 
    # (.bazaar or .bzr) -- vila 20110-04-11
 
3061
    # (.bazaar or .bzr) -- vila 20110-04-111
3064
3062
 
3065
3063
 
3066
3064
class TestSectionMatcher(TestStore):
3067
3065
 
3068
 
    scenarios = [('location', {'matcher': config.LocationMatcher})]
 
3066
    scenarios = [('location', {'matcher': config.LocationMatcher}),
 
3067
                 ('id', {'matcher': config.NameMatcher}),]
3069
3068
 
3070
3069
    def get_store(self, file_name):
3071
3070
        return config.IniFileStore(self.get_readonly_transport(), file_name)
3180
3179
        self.assertEquals(expected_location, matcher.location)
3181
3180
 
3182
3181
 
 
3182
class TestNameMatcher(TestStore):
 
3183
 
 
3184
    def setUp(self):
 
3185
        super(TestNameMatcher, self).setUp()
 
3186
        self.store = config.IniFileStore(self.get_readonly_transport(),
 
3187
                                         'foo.conf')
 
3188
        self.store._load_from_string('''
 
3189
[foo]
 
3190
option=foo
 
3191
[foo/baz]
 
3192
option=foo/baz
 
3193
[bar]
 
3194
option=bar
 
3195
''')
 
3196
 
 
3197
    def get_matching_sections(self, name):
 
3198
        matcher = config.NameMatcher(self.store, name)
 
3199
        return list(matcher.get_sections())
 
3200
 
 
3201
    def test_matching(self):
 
3202
        sections = self.get_matching_sections('foo')
 
3203
        self.assertLength(1, sections)
 
3204
        self.assertSectionContent(('foo', {'option': 'foo'}), sections[0])
 
3205
 
 
3206
    def test_not_matching(self):
 
3207
        sections = self.get_matching_sections('baz')
 
3208
        self.assertLength(0, sections)
 
3209
 
 
3210
 
3183
3211
class TestStackGet(tests.TestCase):
3184
3212
 
3185
3213
    # FIXME: This should be parametrized for all known Stack or dedicated
3367
3395
        self.conf.store._load_from_string('foo=m,o,r,e')
3368
3396
        self.assertEquals(['m', 'o', 'r', 'e'], self.conf.get('foo'))
3369
3397
 
 
3398
    def test_get_with_list_converter_embedded_spaces_many_items(self):
 
3399
        self.register_list_option('foo', None)
 
3400
        self.conf.store._load_from_string('foo=" bar", "baz "')
 
3401
        self.assertEquals([' bar', 'baz '], self.conf.get('foo'))
 
3402
 
 
3403
    def test_get_with_list_converter_stripped_spaces_many_items(self):
 
3404
        self.register_list_option('foo', None)
 
3405
        self.conf.store._load_from_string('foo= bar ,  baz ')
 
3406
        self.assertEquals(['bar', 'baz'], self.conf.get('foo'))
 
3407
 
3370
3408
 
3371
3409
class TestStackExpandOptions(tests.TestCaseWithTransport):
3372
3410
 
3451
3489
baz=end
3452
3490
list={foo},{bar},{baz}
3453
3491
''')
 
3492
        self.registry.register(
 
3493
            config.Option('list', from_unicode=config.list_from_store))
3454
3494
        self.assertEquals(['start', 'middle', 'end'],
3455
3495
                           self.conf.get('list', expand=True))
3456
3496
 
3461
3501
baz=end
3462
3502
list={foo}
3463
3503
''')
 
3504
        self.registry.register(
 
3505
            config.Option('list', from_unicode=config.list_from_store))
3464
3506
        self.assertEquals(['start', 'middle', 'end'],
3465
3507
                           self.conf.get('list', expand=True))
3466
3508
 
3473
3515
end=bar}
3474
3516
hidden={start}{middle}{end}
3475
3517
''')
3476
 
        # Nope, it's either a string or a list, and the list wins as soon as a
3477
 
        # ',' appears, so the string concatenation never occur.
3478
 
        self.assertEquals(['{foo', '}', '{', 'bar}'],
 
3518
        # What matters is what the registration says, the conversion happens
 
3519
        # only after all expansions have been performed
 
3520
        self.registry.register(
 
3521
            config.Option('hidden', from_unicode=config.list_from_store))
 
3522
        self.assertEquals(['bin', 'go'],
3479
3523
                          self.conf.get('hidden', expand=True))
3480
3524
 
3481
3525