hi,<br><br><div><span class="gmail_quote">On 6/25/07, <b class="gmail_sendername">Robert Collins</b> <<a href="mailto:robertc@robertcollins.net">robertc@robertcollins.net</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On Mon, 2007-06-25 at 19:40 +0200, Marius Kruger wrote:<br>> hopefully this bundle address all the comments on the list.<br>> The changes I made since the last patch are:<br><br>+1 Conditional on one further change:
</blockquote><div>... <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">assertRemoveErrorContainsRe can now away completely I think. I propose
<br>the following -<br>delete the asertRemoveErrorContainsRe method<br>change<br>+ e = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,<br>+ TestRemove.files, keep_files=False)<br>+ self._assertRemoveErrorContainsRe(e, 'unknown:.*b/c.*b.*a.*d')
<br><br>into<br><br>+ err = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,<br>+ TestRemove.files, keep_files=False)<br>+ self._assertContainsRe(err.changes_as_text, 'unknown:.*b/c.*b.*a.*d')
</blockquote><div><br>done <br>(never mind my previous e-mail, <br>the pattern was a little wrong: the 'd' should have been sorted to the front, <br>but because the was a 'd' in the rest of the error message, this test used to pass.
<br>It seems its a good thing to make this change away from str(err), <br>and it seems a, b, c, d are not such a good choice for file names if the testing<br>is done by simple regexes... but hopefully there are not other such nasty surprises.)
<br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">The reason for this is:<br>The exception *formatting* should be tested in bzrlib/tests/test_errors.py
<br>The exception *throwing* should be testing what is supplied to the<br>BzrRemoveChangedFilesError constructor, not the current formatting which<br>could change, get internationalised etc.<br><br>This reduces the number of layers involved in your tests, and thus the
<br>number of noise changes you may encounter.</blockquote><div>This little piece of wisdom should probably go into the HACKING doc if it isn't there<br>already (I must admit, I haven't read it in a while)<br> <br>
<br></div></div>BTW if I run all the tests (on bzr.dev and my branch), this test fails:<br><blockquote>[1292/6951 in 80s, 43 skipped] test_permissions.TestSftpPermissions.test_new_files /var/lib/python-support/python2.5/paramiko/message.py:226: DeprecationWarning: integer argument expected, got float
<br> self.packet.write(struct.pack('>I', n))<br>FAIL: blackbox.test_status.TestStatus.test_status_versioned<br> Unexpected return code<br>not equal:<br>a = 0<br>b = 3<br></blockquote><br>Anyways, here are the changes since the previous patch
<br><br>=== modified file 'bzrlib/tests/workingtree_implementations/test_remove.py'<br>--- bzrlib/tests/workingtree_implementations/test_remove.py 2007-06-23 19:45:17 +0000<br>+++ bzrlib/tests/workingtree_implementations/test_remove.py 2007-06-28 05:42:19 +0000
<br>@@ -16,7 +16,6 @@<br><br> """Tests for interface conformance of 'WorkingTree.remove'"""<br><br>-import re<br> from bzrlib.tests.workingtree_implementations import TestCaseWithWorkingTree
<br> from bzrlib import errors, osutils<br><br>@@ -34,11 +33,6 @@<br> self.build_tree(TestRemove.files)<br> return tree<br><br>- def _assertRemoveErrorContainsRe(self, exception, file_detail_re):<br>-
self.assertContainsRe(str(exception),<br>- '(?s)Can\'t remove changed or unknown'<br>- ' files:.*' + file_detail_re)<br>-<br> def test_remove_keep(self):<br> """Check that files are unversioned but not deleted."""
<br> tree = self.getTree()<br>@@ -66,9 +60,10 @@<br> tree = self.getTree()<br> tree.add(TestRemove.files)<br> self.assertInWorkingTree(TestRemove.files)<br>- e = self.assertRaises(errors.BzrRemoveChangedFilesError
, tree.remove,<br>+ err = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,<br> TestRemove.files, keep_files=False)<br>- self._assertRemoveErrorContainsRe(e, 'added:.*a.*b.*b/c.*d')
<br>+ self.assertContainsRe(err.changes_as_text,<br>+ '(?s)added:.*a.*b/.*b/c.*d/')<br> self.assertInWorkingTree(TestRemove.files)<br> self.failUnlessExists(TestRemove.files)<br><br>
@@ -79,9 +74,9 @@<br> tree.commit("make sure a is versioned")<br> self.build_tree_contents([('a', "some other new content!")])<br> self.assertInWorkingTree(TestRemove.a)
<br>- e = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,<br>+ err = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,<br> TestRemove.a, keep_files=False)<br>- self._assertRemoveErrorContainsRe(e, 'modified:.*a')
<br>+ self.assertContainsRe(err.changes_as_text, '(?s)modified:.*a')<br> self.assertInWorkingTree(TestRemove.a)<br> self.failUnlessExists(TestRemove.a)<br><br>@@ -131,9 +126,10 @@<br>
self.assertInWorkingTree(rfilesx)<br> self.failUnlessExists(rfilesx)<br><br>- e = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,<br>+ err = self.assertRaises(errors.BzrRemoveChangedFilesError
, tree.remove,<br> rfilesx, keep_files=False)<br>- self._assertRemoveErrorContainsRe(e, 'modified:.*ax.*bx/cx')<br>+ self.assertContainsRe(err.changes_as_text,<br>+ '(?s)modified:.*ax.*bx/cx')
<br> self.assertInWorkingTree(rfilesx)<br> self.failUnlessExists(rfilesx)<br><br>@@ -151,9 +147,10 @@<br> def test_remove_unknown_files(self):<br> """Try to delete unknown files."""
<br> tree = self.getTree()<br>- e = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,<br>+ err = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,<br> TestRemove.files
, keep_files=False)<br>- self._assertRemoveErrorContainsRe(e, 'unknown:.*b/c.*b.*a.*d')<br>+ self.assertContainsRe(err.changes_as_text,<br>+ '(?s)unknown:.*d/.*b/c.*b/.*a.*')<br><br>
def test_remove_nonexisting_files(self):<br> """Try to delete non-existing files."""<br>@@ -180,9 +177,10 @@<br> self.assertInWorkingTree(TestRemove.files)<br> self.failUnlessExists
(TestRemove.files)<br> self.build_tree(['b/my_unknown_file'])<br>- e = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,<br>+ err = self.assertRaises(errors.BzrRemoveChangedFilesError
, tree.remove,<br> TestRemove.b, keep_files=False)<br>- self._assertRemoveErrorContainsRe(e, 'unknown:.*b/my_unknown_file')<br>+ self.assertContainsRe(err.changes_as_text,<br>+ '(?s)unknown:.*b/my_unknown_file')
<br> self.assertInWorkingTree(TestRemove.b)<br> self.failUnlessExists(TestRemove.b)<br><br>@@ -203,9 +201,9 @@<br> tree.commit("make sure b and c are versioned")<br> self.build_tree_contents
([('b/c', "some other new content!")])<br> self.assertInWorkingTree(TestRemove.b_c)<br>- e = self.assertRaises(errors.BzrRemoveChangedFilesError, tree.remove,<br>+ err = self.assertRaises
(errors.BzrRemoveChangedFilesError, tree.remove,<br> TestRemove.b, keep_files=False)<br>- self._assertRemoveErrorContainsRe(e, 'modified:.*b/c')<br>+ self.assertContainsRe(err.changes_as_text
, '(?s)modified:.*b/c')<br> self.assertInWorkingTree(TestRemove.b_c)<br> self.failUnlessExists(TestRemove.b_c)<br><br><br><br><br>regards<br>marius<br><br>-- <br><a href="http://bazaar-vcs.org">bazaar-vcs.org
</a><br>Because I don't trust Version Control Systems with less than 6350 unit tests.