/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_config.py

  • Committer: Martin
  • Date: 2010-05-25 17:27:52 UTC
  • mfrom: (5254 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5257.
  • Revision ID: gzlist@googlemail.com-20100525172752-amm089xcikv968sw
Merge bzr.dev to unite with similar changes already made

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006, 2008, 2009 Canonical Ltd
 
1
# Copyright (C) 2005-2010 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
25
25
    branch,
26
26
    bzrdir,
27
27
    config,
 
28
    diff,
28
29
    errors,
29
30
    osutils,
30
31
    mail_client,
42
43
[DEFAULT]
43
44
email=Erik B\u00e5gfors <erik@bagfors.nu>
44
45
editor=vim
 
46
change_editor=vimdiff -of @new_path @old_path
45
47
gpg_signing_command=gnome-gpg
46
48
log_format=short
47
49
user_global_option=something
208
210
        self._calls.append('_get_signature_checking')
209
211
        return self._signatures
210
212
 
 
213
    def _get_change_editor(self):
 
214
        self._calls.append('_get_change_editor')
 
215
        return 'vimdiff -fo @new_path @old_path'
 
216
 
211
217
 
212
218
bool_config = """[DEFAULT]
213
219
active = true
314
320
        my_config = config.Config()
315
321
        self.assertEqual('long', my_config.log_format())
316
322
 
 
323
    def test_get_change_editor(self):
 
324
        my_config = InstrumentedConfig()
 
325
        change_editor = my_config.get_change_editor('old_tree', 'new_tree')
 
326
        self.assertEqual(['_get_change_editor'], my_config._calls)
 
327
        self.assertIs(diff.DiffFromTool, change_editor.__class__)
 
328
        self.assertEqual(['vimdiff', '-fo', '@new_path', '@old_path'],
 
329
                         change_editor.command_template)
 
330
 
317
331
 
318
332
class TestConfigPath(tests.TestCase):
319
333
 
355
369
 
356
370
class TestIniConfig(tests.TestCase):
357
371
 
 
372
    def make_config_parser(self, s):
 
373
        conf = config.IniBasedConfig(None)
 
374
        parser = conf._get_parser(file=StringIO(s.encode('utf-8')))
 
375
        return conf, parser
 
376
 
 
377
 
 
378
class TestIniConfigBuilding(TestIniConfig):
 
379
 
358
380
    def test_contructs(self):
359
381
        my_config = config.IniBasedConfig("nothing")
360
382
 
371
393
        parser = my_config._get_parser(file=config_file)
372
394
        self.failUnless(my_config._get_parser() is parser)
373
395
 
 
396
 
 
397
class TestGetUserOptionAs(TestIniConfig):
 
398
 
374
399
    def test_get_user_option_as_bool(self):
375
 
        config_file = StringIO("""
 
400
        conf, parser = self.make_config_parser("""
376
401
a_true_bool = true
377
402
a_false_bool = 0
378
403
an_invalid_bool = maybe
379
 
a_list = hmm, who knows ? # This interpreted as a list !
380
 
""".encode('utf-8'))
381
 
        my_config = config.IniBasedConfig(None)
382
 
        parser = my_config._get_parser(file=config_file)
383
 
        get_option = my_config.get_user_option_as_bool
384
 
        self.assertEqual(True, get_option('a_true_bool'))
385
 
        self.assertEqual(False, get_option('a_false_bool'))
386
 
        self.assertIs(None, get_option('an_invalid_bool'))
387
 
        self.assertIs(None, get_option('not_defined_in_this_config'))
 
404
a_list = hmm, who knows ? # This is interpreted as a list !
 
405
""")
 
406
        get_bool = conf.get_user_option_as_bool
 
407
        self.assertEqual(True, get_bool('a_true_bool'))
 
408
        self.assertEqual(False, get_bool('a_false_bool'))
 
409
        warnings = []
 
410
        def warning(*args):
 
411
            warnings.append(args[0] % args[1:])
 
412
        self.overrideAttr(trace, 'warning', warning)
 
413
        msg = 'Value "%s" is not a boolean for "%s"'
 
414
        self.assertIs(None, get_bool('an_invalid_bool'))
 
415
        self.assertEquals(msg % ('maybe', 'an_invalid_bool'), warnings[0])
 
416
        warnings = []
 
417
        self.assertIs(None, get_bool('not_defined_in_this_config'))
 
418
        self.assertEquals([], warnings)
 
419
 
 
420
    def test_get_user_option_as_list(self):
 
421
        conf, parser = self.make_config_parser("""
 
422
a_list = a,b,c
 
423
length_1 = 1,
 
424
one_item = x
 
425
""")
 
426
        get_list = conf.get_user_option_as_list
 
427
        self.assertEqual(['a', 'b', 'c'], get_list('a_list'))
 
428
        self.assertEqual(['1'], get_list('length_1'))
 
429
        self.assertEqual('x', conf.get_user_option('one_item'))
 
430
        # automatically cast to list
 
431
        self.assertEqual(['x'], get_list('one_item'))
 
432
 
 
433
 
 
434
class TestSupressWarning(TestIniConfig):
 
435
 
 
436
    def make_warnings_config(self, s):
 
437
        conf, parser = self.make_config_parser(s)
 
438
        return conf.suppress_warning
 
439
 
 
440
    def test_suppress_warning_unknown(self):
 
441
        suppress_warning = self.make_warnings_config('')
 
442
        self.assertEqual(False, suppress_warning('unknown_warning'))
 
443
 
 
444
    def test_suppress_warning_known(self):
 
445
        suppress_warning = self.make_warnings_config('suppress_warnings=a,b')
 
446
        self.assertEqual(False, suppress_warning('c'))
 
447
        self.assertEqual(True, suppress_warning('a'))
 
448
        self.assertEqual(True, suppress_warning('b'))
 
449
 
388
450
 
389
451
class TestGetConfig(tests.TestCase):
390
452
 
625
687
        my_config = self._get_sample_config()
626
688
        self.assertEqual(sample_long_alias, my_config.get_alias('ll'))
627
689
 
 
690
    def test_get_change_editor(self):
 
691
        my_config = self._get_sample_config()
 
692
        change_editor = my_config.get_change_editor('old', 'new')
 
693
        self.assertIs(diff.DiffFromTool, change_editor.__class__)
 
694
        self.assertEqual('vimdiff -of @new_path @old_path',
 
695
                         ' '.join(change_editor.command_template))
 
696
 
 
697
    def test_get_no_change_editor(self):
 
698
        my_config = self._get_empty_config()
 
699
        change_editor = my_config.get_change_editor('old', 'new')
 
700
        self.assertIs(None, change_editor)
 
701
 
628
702
 
629
703
class TestGlobalConfigSavingOptions(tests.TestCaseInTempDir):
630
704
 
1574
1648
        self.assertEquals(entered_password,
1575
1649
                          conf.get_password('ssh', 'bar.org', user='jim'))
1576
1650
        self.assertContainsRe(
1577
 
            self._get_log(keep_log_file=True),
 
1651
            self.get_log(),
1578
1652
            'password ignored in section \[ssh with password\]')
1579
1653
 
1580
1654
    def test_ssh_without_password_doesnt_emit_warning(self):
1599
1673
        # No warning shoud be emitted since there is no password. We are only
1600
1674
        # providing "user".
1601
1675
        self.assertNotContainsRe(
1602
 
            self._get_log(keep_log_file=True),
 
1676
            self.get_log(),
1603
1677
            'password ignored in section \[ssh with password\]')
1604
1678
 
1605
1679
    def test_uses_fallback_stores(self):
1606
 
        self._old_cs_registry = config.credential_store_registry
1607
 
        def restore():
1608
 
            config.credential_store_registry = self._old_cs_registry
1609
 
        self.addCleanup(restore)
1610
 
        config.credential_store_registry = config.CredentialStoreRegistry()
 
1680
        self.overrideAttr(config, 'credential_store_registry',
 
1681
                          config.CredentialStoreRegistry())
1611
1682
        store = StubCredentialStore()
1612
1683
        store.add_credentials("http", "example.com", "joe", "secret")
1613
1684
        config.credential_store_registry.register("stub", store, fallback=True)