Index: tests/git_hyper_blame_test.py |
diff --git a/tests/git_hyper_blame_test.py b/tests/git_hyper_blame_test.py |
index 692287d1b605723c5cdd50c215bd7d652d432f0c..1ac396edbdfc91c1df30f0199b21154170bf25bb 100755 |
--- a/tests/git_hyper_blame_test.py |
+++ b/tests/git_hyper_blame_test.py |
@@ -50,7 +50,7 @@ class GitHyperBlameTestBase(git_test_utils.GitRepoReadOnlyTestBase): |
class GitHyperBlameMainTest(GitHyperBlameTestBase): |
"""End-to-end tests on a very simple repo.""" |
- REPO_SCHEMA = "A B C" |
+ REPO_SCHEMA = "A B C D" |
COMMIT_A = { |
'some/files/file': {'data': 'line 1\nline 2\n'}, |
@@ -64,6 +64,19 @@ class GitHyperBlameMainTest(GitHyperBlameTestBase): |
'some/files/file': {'data': 'line 1.1\nline 2.1\n'}, |
} |
+ COMMIT_D = { |
+ # This file should be automatically considered for ignore. |
+ '.git-blame-ignore-revs': {'data': 'tag_C'}, |
+ # This file should not be considered. |
+ 'some/files/.git-blame-ignore-revs': {'data': 'tag_B'}, |
+ } |
+ |
+ def setUp(self): |
+ super(GitHyperBlameMainTest, self).setUp() |
+ # Most tests want to check out C (so the .git-blame-ignore-revs is not |
+ # used). |
+ self.repo.git('checkout', '-f', 'tag_C') |
+ |
def testBasicBlame(self): |
"""Tests the main function (simple end-to-end test with no ignores).""" |
expected_output = [self.blame_line('C', '1) line 1.1'), |
@@ -137,14 +150,72 @@ class GitHyperBlameMainTest(GitHyperBlameTestBase): |
def testBadIgnore(self): |
"""Tests the main function (bad revision passed to -i).""" |
+ expected_output = [self.blame_line('C', '1) line 1.1'), |
+ self.blame_line('B', '2) line 2.1')] |
stdout = StringIO.StringIO() |
stderr = StringIO.StringIO() |
retval = self.repo.run(self.git_hyper_blame.main, |
args=['-i', 'xxxx', 'tag_C', 'some/files/file'], |
stdout=stdout, stderr=stderr) |
- self.assertNotEqual(0, retval) |
- self.assertEqual('', stdout.getvalue()) |
- self.assertEqual('fatal: unknown revision \'xxxx\'.\n', stderr.getvalue()) |
+ self.assertEqual(0, retval) |
+ self.assertEqual(expected_output, stdout.getvalue().rstrip().split('\n')) |
+ self.assertEqual('warning: unknown revision \'xxxx\'.\n', stderr.getvalue()) |
+ |
+ def testIgnoreFile(self): |
+ """Tests passing the ignore list in a file.""" |
+ expected_output = [self.blame_line('C', ' 1) line 1.1'), |
+ self.blame_line('A', '2*) line 2.1')] |
+ stdout = StringIO.StringIO() |
+ stderr = StringIO.StringIO() |
+ |
+ with tempfile.NamedTemporaryFile(mode='w+', prefix='ignore') as ignore_file: |
+ ignore_file.write('# Line comments are allowed.\n'.format(self.repo['B'])) |
+ ignore_file.write('\n') |
+ ignore_file.write('{}\n'.format(self.repo['B'])) |
+ # A revision that is not in the repo (should be ignored). |
+ ignore_file.write('xxxx\n') |
+ ignore_file.flush() |
+ retval = self.repo.run(self.git_hyper_blame.main, |
+ args=['--ignore-file', ignore_file.name, 'tag_C', |
+ 'some/files/file'], |
+ stdout=stdout, stderr=stderr) |
+ |
+ self.assertEqual(0, retval) |
+ self.assertEqual(expected_output, stdout.getvalue().rstrip().split('\n')) |
+ self.assertEqual('warning: unknown revision \'xxxx\'.\n', stderr.getvalue()) |
+ |
+ def testDefaultIgnoreFile(self): |
+ """Tests automatically using a default ignore list.""" |
+ # Check out revision D. We expect the script to use the default ignore list |
+ # that is checked out, *not* the one committed at the given revision. |
+ self.repo.git('checkout', '-f', 'tag_D') |
+ |
+ expected_output = [self.blame_line('A', '1*) line 1.1'), |
+ self.blame_line('B', ' 2) line 2.1')] |
+ stdout = StringIO.StringIO() |
+ stderr = StringIO.StringIO() |
+ |
+ retval = self.repo.run(self.git_hyper_blame.main, |
+ args=['tag_D', 'some/files/file'], |
+ stdout=stdout, stderr=stderr) |
+ |
+ self.assertEqual(0, retval) |
+ self.assertEqual(expected_output, stdout.getvalue().rstrip().split('\n')) |
+ self.assertEqual('', stderr.getvalue()) |
+ |
+ # Test blame from a different revision. Despite the default ignore file |
+ # *not* being committed at that revision, it should still be picked up |
+ # because D is currently checked out. |
+ stdout = StringIO.StringIO() |
+ stderr = StringIO.StringIO() |
+ |
+ retval = self.repo.run(self.git_hyper_blame.main, |
+ args=['tag_C', 'some/files/file'], |
+ stdout=stdout, stderr=stderr) |
+ |
+ self.assertEqual(0, retval) |
+ self.assertEqual(expected_output, stdout.getvalue().rstrip().split('\n')) |
+ self.assertEqual('', stderr.getvalue()) |
class GitHyperBlameSimpleTest(GitHyperBlameTestBase): |
REPO_SCHEMA = """ |