/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_rules.py

  • Committer: John Arbash Meinel
  • Date: 2009-06-18 18:18:36 UTC
  • mto: This revision was merged to the branch mainline in revision 4461.
  • Revision ID: john@arbash-meinel.com-20090618181836-biodfkat9a8eyzjz
The new add_inventory_by_delta is returning a CHKInventory when mapping from NULL
Which is completely valid, but 'broke' one of the tests.
So to fix it, changed the test to use CHKInventories on both sides, and add an __eq__
member. The nice thing is that CHKInventory.__eq__ is fairly cheap, since it only
has to check the root keys.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2008 Canonical Ltd
 
2
#
 
3
# This program is free software; you can redistribute it and/or modify
 
4
# it under the terms of the GNU General Public License as published by
 
5
# the Free Software Foundation; either version 2 of the License, or
 
6
# (at your option) any later version.
 
7
#
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
#
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program; if not, write to the Free Software
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
16
 
 
17
"""Tests for finding, parsing and searching rule-based preferences."""
 
18
 
 
19
import os
 
20
import sys
 
21
 
 
22
from bzrlib import (
 
23
    config,
 
24
    errors,
 
25
    rules,
 
26
    tests,
 
27
    )
 
28
from bzrlib.util.configobj import configobj
 
29
 
 
30
 
 
31
class TestIniBasedRulesSearcher(tests.TestCase):
 
32
 
 
33
    def make_searcher(self, text):
 
34
        """Make a _RulesSearcher from a string"""
 
35
        if text is None:
 
36
            lines = None
 
37
        else:
 
38
            lines = text.splitlines()
 
39
        return rules._IniBasedRulesSearcher(lines)
 
40
 
 
41
    def test_unknown_namespace(self):
 
42
        self.assertRaises(errors.UnknownRules, rules._IniBasedRulesSearcher,
 
43
            ["[junk]", "foo=bar"])
 
44
 
 
45
    def test_get_items_file_missing(self):
 
46
        rs = self.make_searcher(None)
 
47
        self.assertEquals((), rs.get_items('a.txt'))
 
48
        self.assertEquals((), rs.get_selected_items('a.txt', ['foo']))
 
49
 
 
50
    def test_get_items_file_empty(self):
 
51
        rs = self.make_searcher("")
 
52
        self.assertEquals((), rs.get_items('a.txt'))
 
53
        self.assertEquals((), rs.get_selected_items('a.txt', ['foo']))
 
54
 
 
55
    def test_get_items_from_extension_match(self):
 
56
        rs = self.make_searcher("[name *.txt]\nfoo=bar\na=True\n")
 
57
        self.assertEquals((), rs.get_items('a.py'))
 
58
        self.assertEquals((('foo', 'bar'), ('a', 'True')),
 
59
            rs.get_items('a.txt'))
 
60
        self.assertEquals((('foo', 'bar'), ('a', 'True')),
 
61
            rs.get_items('dir/a.txt'))
 
62
        self.assertEquals((('foo', 'bar'),),
 
63
            rs.get_selected_items('a.txt', ['foo']))
 
64
 
 
65
    def test_get_items_from_multiple_glob_match(self):
 
66
        rs = self.make_searcher(
 
67
            "[name *.txt *.py 'x x' \"y y\"]\nfoo=bar\na=True\n")
 
68
        self.assertEquals((), rs.get_items('NEWS'))
 
69
        self.assertEquals((('foo', 'bar'), ('a', 'True')),
 
70
            rs.get_items('a.py'))
 
71
        self.assertEquals((('foo', 'bar'), ('a', 'True')),
 
72
            rs.get_items('a.txt'))
 
73
        self.assertEquals((('foo', 'bar'), ('a', 'True')),
 
74
            rs.get_items('x x'))
 
75
        self.assertEquals((('foo', 'bar'), ('a', 'True')),
 
76
            rs.get_items('y y'))
 
77
 
 
78
    def test_get_items_pathname_match(self):
 
79
        rs = self.make_searcher("[name ./a.txt]\nfoo=baz\n")
 
80
        self.assertEquals((('foo', 'baz'),),
 
81
            rs.get_items('a.txt'))
 
82
        self.assertEquals((), rs.get_items('dir/a.txt'))
 
83
 
 
84
    def test_get_items_match_first(self):
 
85
        rs = self.make_searcher(
 
86
            "[name ./a.txt]\nfoo=baz\n"
 
87
            "[name *.txt]\nfoo=bar\na=True\n")
 
88
        self.assertEquals((('foo', 'baz'),),
 
89
            rs.get_items('a.txt'))
 
90
        self.assertEquals((('foo', 'bar'), ('a', 'True')),
 
91
            rs.get_items('dir/a.txt'))
 
92
 
 
93
 
 
94
class TestStackedRulesSearcher(tests.TestCase):
 
95
 
 
96
    def make_searcher(self, text1=None, text2=None):
 
97
        """Make a _StackedRulesSearcher with 0, 1 or 2 items"""
 
98
        searchers = []
 
99
        if text1 is not None:
 
100
            searchers.append(rules._IniBasedRulesSearcher(
 
101
                text1.splitlines()))
 
102
        if text2 is not None:
 
103
            searchers.append(rules._IniBasedRulesSearcher(
 
104
                text2.splitlines()))
 
105
        return rules._StackedRulesSearcher(searchers)
 
106
 
 
107
    def test_stack_searching(self):
 
108
        rs = self.make_searcher(
 
109
            "[name ./a.txt]\nfoo=baz\n",
 
110
            "[name *.txt]\nfoo=bar\na=True\n")
 
111
        self.assertEquals((('foo', 'baz'),),
 
112
            rs.get_items('a.txt'))
 
113
        self.assertEquals((('foo', 'bar'), ('a', 'True')),
 
114
            rs.get_items('dir/a.txt'))
 
115
 
 
116
 
 
117
class TestRulesPath(tests.TestCase):
 
118
 
 
119
    def setUp(self):
 
120
        super(TestRulesPath, self).setUp()
 
121
        os.environ['HOME'] = '/home/bogus'
 
122
        if sys.platform == 'win32':
 
123
            os.environ['BZR_HOME'] = \
 
124
                r'C:\Documents and Settings\bogus\Application Data'
 
125
            self.bzr_home = \
 
126
                'C:/Documents and Settings/bogus/Application Data/bazaar/2.0'
 
127
        else:
 
128
            self.bzr_home = '/home/bogus/.bazaar'
 
129
 
 
130
    def test_rules_filename(self):
 
131
        self.assertEqual(rules.rules_filename(),
 
132
                         self.bzr_home + '/rules')