13
13
# You should have received a copy of the GNU General Public License
14
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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
17
"""Tests for handling of ignore files"""
19
19
from cStringIO import StringIO
21
21
from bzrlib import config, errors, ignores
22
from bzrlib.tests import TestCase, TestCaseInTempDir, TestCaseWithTransport
22
from bzrlib.tests import TestCase, TestCaseInTempDir
25
25
class TestParseIgnoreFile(TestCase):
103
99
self.assertEqual(patterns, added)
104
100
self.assertEqual(set(patterns), ignores.get_user_ignores())
106
def test_add_directory(self):
107
"""Test that adding a directory will strip any trailing slash"""
108
# Create an empty file
109
ignores._set_user_ignores([])
111
in_patterns = ['foo/', 'bar/', 'baz\\']
112
added = ignores.add_unique_user_ignores(in_patterns)
113
out_patterns = [ x.rstrip('/\\') for x in in_patterns ]
114
self.assertEqual(out_patterns, added)
115
self.assertEqual(set(out_patterns), ignores.get_user_ignores())
117
102
def test_add_unique(self):
118
103
"""Test that adding will not duplicate ignores"""
119
ignores._set_user_ignores(
120
['foo', './bar', u'b\xe5z', 'dir1/', 'dir3\\'])
104
ignores._set_user_ignores(['foo', './bar', u'b\xe5z'])
122
added = ignores.add_unique_user_ignores(
123
['xxx', './bar', 'xxx', 'dir1/', 'dir2/', 'dir3\\'])
124
self.assertEqual(['xxx', 'dir2'], added)
125
self.assertEqual(set(['foo', './bar', u'b\xe5z',
126
'xxx', 'dir1', 'dir2', 'dir3']),
106
added = ignores.add_unique_user_ignores(['xxx', './bar', 'xxx'])
107
self.assertEqual(['xxx'], added)
108
self.assertEqual(set(['foo', './bar', u'b\xe5z', 'xxx']),
127
109
ignores.get_user_ignores())
133
115
TestCase.setUp(self)
117
orig = ignores._runtime_ignores
119
ignores._runtime_ignores = orig
120
self.addCleanup(restore)
135
121
# For the purposes of these tests, we must have no
136
122
# runtime ignores
137
self.overrideAttr(ignores, '_runtime_ignores', set())
123
ignores._runtime_ignores = set()
139
125
def test_add(self):
140
126
"""Test that we can add an entry to the list."""
151
137
ignores.add_runtime_ignores(['bar'])
152
138
self.assertEqual(set(['foo', 'bar']), ignores.get_runtime_ignores())
155
class TestTreeIgnores(TestCaseWithTransport):
157
def test_new_file(self):
158
tree = self.make_branch_and_tree(".")
159
ignores.tree_ignores_add_patterns(tree, ["myentry"])
160
self.assertTrue(tree.has_filename(".bzrignore"))
161
self.assertEquals("myentry\n",
162
open(".bzrignore", 'r').read())
164
def test_add_to_existing(self):
165
tree = self.make_branch_and_tree(".")
166
self.build_tree_contents([('.bzrignore', "myentry1\n")])
167
tree.add([".bzrignore"])
168
ignores.tree_ignores_add_patterns(tree, ["myentry2", "foo"])
169
self.assertEquals("myentry1\nmyentry2\nfoo\n",
170
open(".bzrignore", 'r').read())
172
def test_adds_ending_newline(self):
173
tree = self.make_branch_and_tree(".")
174
self.build_tree_contents([('.bzrignore', "myentry1")])
175
tree.add([".bzrignore"])
176
ignores.tree_ignores_add_patterns(tree, ["myentry2"])
177
self.assertEquals("myentry1\nmyentry2\n",
178
open(".bzrignore", 'r').read())