~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_config.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-02-10 16:25:28 UTC
  • mfrom: (5020.1.1 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20100210162528-00g29u0ex6vzv914
(gerard) Update performs two merges in a more logical order but stop
        on conflicts

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006, 2008 Canonical Ltd
2
 
#   Authors: Robert Collins <robert.collins@canonical.com>
 
1
# Copyright (C) 2005, 2006, 2008, 2009 Canonical Ltd
3
2
#
4
3
# This program is free software; you can redistribute it and/or modify
5
4
# it under the terms of the GNU General Public License as published by
18
17
"""Tests for finding and reading the bzr config file[s]."""
19
18
# import system imports here
20
19
from cStringIO import StringIO
21
 
import getpass
22
20
import os
23
21
import sys
24
22
 
27
25
    branch,
28
26
    bzrdir,
29
27
    config,
 
28
    diff,
30
29
    errors,
31
30
    osutils,
32
31
    mail_client,
44
43
[DEFAULT]
45
44
email=Erik B\u00e5gfors <erik@bagfors.nu>
46
45
editor=vim
 
46
change_editor=vimdiff -of @new_path @old_path
47
47
gpg_signing_command=gnome-gpg
48
48
log_format=short
49
49
user_global_option=something
210
210
        self._calls.append('_get_signature_checking')
211
211
        return self._signatures
212
212
 
 
213
    def _get_change_editor(self):
 
214
        self._calls.append('_get_change_editor')
 
215
        return 'vimdiff -fo @new_path @old_path'
 
216
 
213
217
 
214
218
bool_config = """[DEFAULT]
215
219
active = true
316
320
        my_config = config.Config()
317
321
        self.assertEqual('long', my_config.log_format())
318
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
 
319
331
 
320
332
class TestConfigPath(tests.TestCase):
321
333
 
322
334
    def setUp(self):
323
335
        super(TestConfigPath, self).setUp()
324
336
        os.environ['HOME'] = '/home/bogus'
 
337
        os.environ['XDG_CACHE_DIR'] = ''
325
338
        if sys.platform == 'win32':
326
339
            os.environ['BZR_HOME'] = \
327
340
                r'C:\Documents and Settings\bogus\Application Data'
349
362
        self.assertEqual(config.authentication_config_filename(),
350
363
                         self.bzr_home + '/authentication.conf')
351
364
 
 
365
    def test_xdg_cache_dir(self):
 
366
        self.assertEqual(config.xdg_cache_dir(),
 
367
            '/home/bogus/.cache')
 
368
 
352
369
 
353
370
class TestIniConfig(tests.TestCase):
354
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
 
355
380
    def test_contructs(self):
356
381
        my_config = config.IniBasedConfig("nothing")
357
382
 
369
394
        self.failUnless(my_config._get_parser() is parser)
370
395
 
371
396
 
 
397
class TestGetUserOptionAs(TestIniConfig):
 
398
 
 
399
    def test_get_user_option_as_bool(self):
 
400
        conf, parser = self.make_config_parser("""
 
401
a_true_bool = true
 
402
a_false_bool = 0
 
403
an_invalid_bool = maybe
 
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
 
 
443
 
372
444
class TestGetConfig(tests.TestCase):
373
445
 
374
446
    def test_constructs(self):
608
680
        my_config = self._get_sample_config()
609
681
        self.assertEqual(sample_long_alias, my_config.get_alias('ll'))
610
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
 
611
695
 
612
696
class TestGlobalConfigSavingOptions(tests.TestCaseInTempDir):
613
697
 
1548
1632
"""))
1549
1633
        entered_password = 'typed-by-hand'
1550
1634
        stdout = tests.StringIOWrapper()
 
1635
        stderr = tests.StringIOWrapper()
1551
1636
        ui.ui_factory = tests.TestUIFactory(stdin=entered_password + '\n',
1552
 
                                            stdout=stdout)
 
1637
                                            stdout=stdout, stderr=stderr)
1553
1638
 
1554
1639
        # Since the password defined in the authentication config is ignored,
1555
1640
        # the user is prompted
1556
1641
        self.assertEquals(entered_password,
1557
1642
                          conf.get_password('ssh', 'bar.org', user='jim'))
1558
1643
        self.assertContainsRe(
1559
 
            self._get_log(keep_log_file=True),
 
1644
            self.get_log(),
1560
1645
            'password ignored in section \[ssh with password\]')
1561
1646
 
1562
1647
    def test_ssh_without_password_doesnt_emit_warning(self):
1569
1654
"""))
1570
1655
        entered_password = 'typed-by-hand'
1571
1656
        stdout = tests.StringIOWrapper()
 
1657
        stderr = tests.StringIOWrapper()
1572
1658
        ui.ui_factory = tests.TestUIFactory(stdin=entered_password + '\n',
1573
 
                                            stdout=stdout)
 
1659
                                            stdout=stdout,
 
1660
                                            stderr=stderr)
1574
1661
 
1575
1662
        # Since the password defined in the authentication config is ignored,
1576
1663
        # the user is prompted
1579
1666
        # No warning shoud be emitted since there is no password. We are only
1580
1667
        # providing "user".
1581
1668
        self.assertNotContainsRe(
1582
 
            self._get_log(keep_log_file=True),
 
1669
            self.get_log(),
1583
1670
            'password ignored in section \[ssh with password\]')
1584
1671
 
1585
1672
    def test_uses_fallback_stores(self):
1586
 
        self._old_cs_registry = config.credential_store_registry
1587
 
        def restore():
1588
 
            config.credential_store_registry = self._old_cs_registry
1589
 
        self.addCleanup(restore)
1590
 
        config.credential_store_registry = config.CredentialStoreRegistry()
 
1673
        self.overrideAttr(config, 'credential_store_registry',
 
1674
                          config.CredentialStoreRegistry())
1591
1675
        store = StubCredentialStore()
1592
1676
        store.add_credentials("http", "example.com", "joe", "secret")
1593
1677
        config.credential_store_registry.register("stub", store, fallback=True)