~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_config.py

  • Committer: Vincent Ladeuil
  • Date: 2010-01-25 15:55:48 UTC
  • mto: (4985.1.4 add-attr-cleanup)
  • mto: This revision was merged to the branch mainline in revision 4988.
  • Revision ID: v.ladeuil+lp@free.fr-20100125155548-0l352pujvt5bzl5e
Deploy addAttrCleanup on the whole test suite.

Several use case worth mentioning:

- setting a module or any other object attribute is the majority
by far. In some cases the setting itself is deferred but most of
the time we want to set at the same time we add the cleanup.

- there multiple occurrences of protecting hooks or ui factory
which are now useless (the test framework takes care of that now),

- there was some lambda uses that can now be avoided.

That first cleanup already simplifies things a lot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
320
334
    def setUp(self):
321
335
        super(TestConfigPath, self).setUp()
322
336
        os.environ['HOME'] = '/home/bogus'
 
337
        os.environ['XDG_CACHE_DIR'] = ''
323
338
        if sys.platform == 'win32':
324
339
            os.environ['BZR_HOME'] = \
325
340
                r'C:\Documents and Settings\bogus\Application Data'
347
362
        self.assertEqual(config.authentication_config_filename(),
348
363
                         self.bzr_home + '/authentication.conf')
349
364
 
 
365
    def test_xdg_cache_dir(self):
 
366
        self.assertEqual(config.xdg_cache_dir(),
 
367
            '/home/bogus/.cache')
 
368
 
350
369
 
351
370
class TestIniConfig(tests.TestCase):
352
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
 
353
380
    def test_contructs(self):
354
381
        my_config = config.IniBasedConfig("nothing")
355
382
 
366
393
        parser = my_config._get_parser(file=config_file)
367
394
        self.failUnless(my_config._get_parser() is parser)
368
395
 
 
396
 
 
397
class TestGetUserOptionAs(TestIniConfig):
 
398
 
369
399
    def test_get_user_option_as_bool(self):
370
 
        config_file = StringIO("""
 
400
        conf, parser = self.make_config_parser("""
371
401
a_true_bool = true
372
402
a_false_bool = 0
373
403
an_invalid_bool = maybe
374
 
a_list = hmm, who knows ? # This interpreted as a list !
375
 
""".encode('utf-8'))
376
 
        my_config = config.IniBasedConfig(None)
377
 
        parser = my_config._get_parser(file=config_file)
378
 
        get_option = my_config.get_user_option_as_bool
379
 
        self.assertEqual(True, get_option('a_true_bool'))
380
 
        self.assertEqual(False, get_option('a_false_bool'))
381
 
        self.assertIs(None, get_option('an_invalid_bool'))
382
 
        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
        self.assertIs(None, get_bool('an_invalid_bool'))
 
410
        self.assertIs(None, get_bool('not_defined_in_this_config'))
 
411
 
 
412
 
 
413
    def test_get_user_option_as_list(self):
 
414
        conf, parser = self.make_config_parser("""
 
415
a_list = a,b,c
 
416
length_1 = 1,
 
417
one_item = x
 
418
""")
 
419
        get_list = conf.get_user_option_as_list
 
420
        self.assertEqual(['a', 'b', 'c'], get_list('a_list'))
 
421
        self.assertEqual(['1'], get_list('length_1'))
 
422
        self.assertEqual('x', conf.get_user_option('one_item'))
 
423
        # automatically cast to list
 
424
        self.assertEqual(['x'], get_list('one_item'))
 
425
 
 
426
 
 
427
class TestSupressWarning(TestIniConfig):
 
428
 
 
429
    def make_warnings_config(self, s):
 
430
        conf, parser = self.make_config_parser(s)
 
431
        return conf.suppress_warning
 
432
 
 
433
    def test_suppress_warning_unknown(self):
 
434
        suppress_warning = self.make_warnings_config('')
 
435
        self.assertEqual(False, suppress_warning('unknown_warning'))
 
436
 
 
437
    def test_suppress_warning_known(self):
 
438
        suppress_warning = self.make_warnings_config('suppress_warnings=a,b')
 
439
        self.assertEqual(False, suppress_warning('c'))
 
440
        self.assertEqual(True, suppress_warning('a'))
 
441
        self.assertEqual(True, suppress_warning('b'))
 
442
 
383
443
 
384
444
class TestGetConfig(tests.TestCase):
385
445
 
620
680
        my_config = self._get_sample_config()
621
681
        self.assertEqual(sample_long_alias, my_config.get_alias('ll'))
622
682
 
 
683
    def test_get_change_editor(self):
 
684
        my_config = self._get_sample_config()
 
685
        change_editor = my_config.get_change_editor('old', 'new')
 
686
        self.assertIs(diff.DiffFromTool, change_editor.__class__)
 
687
        self.assertEqual('vimdiff -of @new_path @old_path',
 
688
                         ' '.join(change_editor.command_template))
 
689
 
 
690
    def test_get_no_change_editor(self):
 
691
        my_config = self._get_empty_config()
 
692
        change_editor = my_config.get_change_editor('old', 'new')
 
693
        self.assertIs(None, change_editor)
 
694
 
623
695
 
624
696
class TestGlobalConfigSavingOptions(tests.TestCaseInTempDir):
625
697
 
1569
1641
        self.assertEquals(entered_password,
1570
1642
                          conf.get_password('ssh', 'bar.org', user='jim'))
1571
1643
        self.assertContainsRe(
1572
 
            self._get_log(keep_log_file=True),
 
1644
            self.get_log(),
1573
1645
            'password ignored in section \[ssh with password\]')
1574
1646
 
1575
1647
    def test_ssh_without_password_doesnt_emit_warning(self):
1594
1666
        # No warning shoud be emitted since there is no password. We are only
1595
1667
        # providing "user".
1596
1668
        self.assertNotContainsRe(
1597
 
            self._get_log(keep_log_file=True),
 
1669
            self.get_log(),
1598
1670
            'password ignored in section \[ssh with password\]')
1599
1671
 
1600
1672
    def test_uses_fallback_stores(self):
1601
 
        self._old_cs_registry = config.credential_store_registry
1602
 
        def restore():
1603
 
            config.credential_store_registry = self._old_cs_registry
1604
 
        self.addCleanup(restore)
 
1673
        self.addAttrCleanup(config, 'credential_store_registry')
1605
1674
        config.credential_store_registry = config.CredentialStoreRegistry()
1606
1675
        store = StubCredentialStore()
1607
1676
        store.add_credentials("http", "example.com", "joe", "secret")