~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-10-15 10:14:53 UTC
  • mfrom: (5447.4.21 config-modify)
  • Revision ID: pqm@pqm.ubuntu.com-20101015101453-ran88oqq3a5qb7jw
(vila) Add ``bzr config` command. (Vincent Ladeuil)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1471
1471
        self.assertIs(None, bzrdir_config.get_default_stack_on())
1472
1472
 
1473
1473
 
 
1474
def create_configs(test):
 
1475
    """Create configuration files for a given test.
 
1476
 
 
1477
    This requires creating a tree (and populate the ``test.tree`` attribute and
 
1478
    its associated branch and will populate the following attributes:
 
1479
 
 
1480
    - branch_config: A BranchConfig for the associated branch.
 
1481
 
 
1482
    - locations_config : A LocationConfig for the associated branch
 
1483
 
 
1484
    - bazaar_config: A GlobalConfig.
 
1485
 
 
1486
    The tree and branch are created in a 'tree' subdirectory so the tests can
 
1487
    still use the test directory to stay outside of the branch.
 
1488
    """
 
1489
    tree = test.make_branch_and_tree('tree')
 
1490
    test.tree = tree
 
1491
    test.branch_config = config.BranchConfig(tree.branch)
 
1492
    test.locations_config = config.LocationConfig(tree.basedir)
 
1493
    test.bazaar_config = config.GlobalConfig()
 
1494
 
 
1495
 
 
1496
def create_configs_with_file_option(test):
 
1497
    """Create configuration files with a ``file`` option set in each.
 
1498
 
 
1499
    This builds on ``create_configs`` and add one ``file`` option in each
 
1500
    configuration with a value which allows identifying the configuration file.
 
1501
    """
 
1502
    create_configs(test)
 
1503
    test.bazaar_config.set_user_option('file', 'bazaar')
 
1504
    test.locations_config.set_user_option('file', 'locations')
 
1505
    test.branch_config.set_user_option('file', 'branch')
 
1506
 
 
1507
 
 
1508
class TestConfigGetOptions(tests.TestCaseWithTransport):
 
1509
 
 
1510
    def setUp(self):
 
1511
        super(TestConfigGetOptions, self).setUp()
 
1512
        create_configs(self)
 
1513
 
 
1514
    def assertOptions(self, expected, conf):
 
1515
        actual = list(conf._get_options())
 
1516
        self.assertEqual(expected, actual)
 
1517
 
 
1518
    # One variable in none of the above
 
1519
    def test_no_variable(self):
 
1520
        # Using branch should query branch, locations and bazaar
 
1521
        self.assertOptions([], self.branch_config)
 
1522
 
 
1523
    def test_option_in_bazaar(self):
 
1524
        self.bazaar_config.set_user_option('file', 'bazaar')
 
1525
        self.assertOptions([('file', 'bazaar', 'DEFAULT', 'bazaar')],
 
1526
                           self.bazaar_config)
 
1527
 
 
1528
    def test_option_in_locations(self):
 
1529
        self.locations_config.set_user_option('file', 'locations')
 
1530
        self.assertOptions(
 
1531
            [('file', 'locations', self.tree.basedir, 'locations')],
 
1532
            self.locations_config)
 
1533
 
 
1534
    def test_option_in_branch(self):
 
1535
        self.branch_config.set_user_option('file', 'branch')
 
1536
        self.assertOptions([('file', 'branch', 'DEFAULT', 'branch')],
 
1537
                           self.branch_config)
 
1538
 
 
1539
    def test_option_in_bazaar_and_branch(self):
 
1540
        self.bazaar_config.set_user_option('file', 'bazaar')
 
1541
        self.branch_config.set_user_option('file', 'branch')
 
1542
        self.assertOptions([('file', 'branch', 'DEFAULT', 'branch'),
 
1543
                            ('file', 'bazaar', 'DEFAULT', 'bazaar'),],
 
1544
                           self.branch_config)
 
1545
 
 
1546
    def test_option_in_branch_and_locations(self):
 
1547
        # Hmm, locations override branch :-/
 
1548
        self.locations_config.set_user_option('file', 'locations')
 
1549
        self.branch_config.set_user_option('file', 'branch')
 
1550
        self.assertOptions(
 
1551
            [('file', 'locations', self.tree.basedir, 'locations'),
 
1552
             ('file', 'branch', 'DEFAULT', 'branch'),],
 
1553
            self.branch_config)
 
1554
 
 
1555
    def test_option_in_bazaar_locations_and_branch(self):
 
1556
        self.bazaar_config.set_user_option('file', 'bazaar')
 
1557
        self.locations_config.set_user_option('file', 'locations')
 
1558
        self.branch_config.set_user_option('file', 'branch')
 
1559
        self.assertOptions(
 
1560
            [('file', 'locations', self.tree.basedir, 'locations'),
 
1561
             ('file', 'branch', 'DEFAULT', 'branch'),
 
1562
             ('file', 'bazaar', 'DEFAULT', 'bazaar'),],
 
1563
            self.branch_config)
 
1564
 
 
1565
 
 
1566
class TestConfigRemoveOption(tests.TestCaseWithTransport):
 
1567
 
 
1568
    def setUp(self):
 
1569
        super(TestConfigRemoveOption, self).setUp()
 
1570
        create_configs_with_file_option(self)
 
1571
 
 
1572
    def assertOptions(self, expected, conf):
 
1573
        actual = list(conf._get_options())
 
1574
        self.assertEqual(expected, actual)
 
1575
 
 
1576
    def test_remove_in_locations(self):
 
1577
        self.locations_config.remove_user_option('file', self.tree.basedir)
 
1578
        self.assertOptions(
 
1579
            [('file', 'branch', 'DEFAULT', 'branch'),
 
1580
             ('file', 'bazaar', 'DEFAULT', 'bazaar'),],
 
1581
            self.branch_config)
 
1582
 
 
1583
    def test_remove_in_branch(self):
 
1584
        self.branch_config.remove_user_option('file')
 
1585
        self.assertOptions(
 
1586
            [('file', 'locations', self.tree.basedir, 'locations'),
 
1587
             ('file', 'bazaar', 'DEFAULT', 'bazaar'),],
 
1588
            self.branch_config)
 
1589
 
 
1590
    def test_remove_in_bazaar(self):
 
1591
        self.bazaar_config.remove_user_option('file')
 
1592
        self.assertOptions(
 
1593
            [('file', 'locations', self.tree.basedir, 'locations'),
 
1594
             ('file', 'branch', 'DEFAULT', 'branch'),],
 
1595
            self.branch_config)
 
1596
 
 
1597
 
 
1598
class TestConfigGetSections(tests.TestCaseWithTransport):
 
1599
 
 
1600
    def setUp(self):
 
1601
        super(TestConfigGetSections, self).setUp()
 
1602
        create_configs(self)
 
1603
 
 
1604
    def assertSectionNames(self, expected, conf, name=None):
 
1605
        """Check which sections are returned for a given config.
 
1606
 
 
1607
        If fallback configurations exist their sections can be included.
 
1608
 
 
1609
        :param expected: A list of section names.
 
1610
 
 
1611
        :param conf: The configuration that will be queried.
 
1612
 
 
1613
        :param name: An optional section name that will be passed to
 
1614
            get_sections().
 
1615
        """
 
1616
        sections = list(conf._get_sections(name))
 
1617
        self.assertLength(len(expected), sections)
 
1618
        self.assertEqual(expected, [name for name, _, _ in sections])
 
1619
 
 
1620
    def test_bazaar_default_section(self):
 
1621
        self.assertSectionNames(['DEFAULT'], self.bazaar_config)
 
1622
 
 
1623
    def test_locations_default_section(self):
 
1624
        # No sections are defined in an empty file
 
1625
        self.assertSectionNames([], self.locations_config)
 
1626
 
 
1627
    def test_locations_named_section(self):
 
1628
        self.locations_config.set_user_option('file', 'locations')
 
1629
        self.assertSectionNames([self.tree.basedir], self.locations_config)
 
1630
 
 
1631
    def test_locations_matching_sections(self):
 
1632
        loc_config = self.locations_config
 
1633
        loc_config.set_user_option('file', 'locations')
 
1634
        # We need to cheat a bit here to create an option in sections above and
 
1635
        # below the 'location' one.
 
1636
        parser = loc_config._get_parser()
 
1637
        # locations.cong deals with '/' ignoring native os.sep
 
1638
        location_names = self.tree.basedir.split('/')
 
1639
        parent = '/'.join(location_names[:-1])
 
1640
        child = '/'.join(location_names + ['child'])
 
1641
        parser[parent] = {}
 
1642
        parser[parent]['file'] = 'parent'
 
1643
        parser[child] = {}
 
1644
        parser[child]['file'] = 'child'
 
1645
        self.assertSectionNames([self.tree.basedir, parent], loc_config)
 
1646
 
 
1647
    def test_branch_data_default_section(self):
 
1648
        self.assertSectionNames([None],
 
1649
                                self.branch_config._get_branch_data_config())
 
1650
 
 
1651
    def test_branch_default_sections(self):
 
1652
        # No sections are defined in an empty locations file
 
1653
        self.assertSectionNames([None, 'DEFAULT'],
 
1654
                                self.branch_config)
 
1655
        # Unless we define an option
 
1656
        self.branch_config._get_location_config().set_user_option(
 
1657
            'file', 'locations')
 
1658
        self.assertSectionNames([self.tree.basedir, None, 'DEFAULT'],
 
1659
                                self.branch_config)
 
1660
 
 
1661
    def test_bazaar_named_section(self):
 
1662
        # We need to cheat as the API doesn't give direct access to sections
 
1663
        # other than DEFAULT.
 
1664
        self.bazaar_config.set_alias('bazaar', 'bzr')
 
1665
        self.assertSectionNames(['ALIASES'], self.bazaar_config, 'ALIASES')
 
1666
 
 
1667
 
1474
1668
class TestAuthenticationConfigFile(tests.TestCase):
1475
1669
    """Test the authentication.conf file matching"""
1476
1670