Chromium Code Reviews| Index: tools/release/test_search_related_commits.py |
| diff --git a/tools/release/test_search_related_commits.py b/tools/release/test_search_related_commits.py |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..144790524ec58ca88683480e1ec6f93d63c515ee |
| --- /dev/null |
| +++ b/tools/release/test_search_related_commits.py |
| @@ -0,0 +1,187 @@ |
| +#!/usr/bin/env python |
| +# Copyright 2015 the V8 project authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| + |
| +from collections import namedtuple |
| +from os import path |
| +import search_related_commits |
| +import shutil |
| +from subprocess import Popen, PIPE, check_call |
| +import unittest |
| + |
| + |
| +TEST_CONFIG = { |
| + "GIT_REPO": "/tmp/test-v8-search-related-commits", |
| +} |
| + |
| +class TestSearchRelatedCommits(unittest.TestCase): |
| + |
| + base_dir = TEST_CONFIG["GIT_REPO"] |
| + |
| + def _execute_git(self, git_args): |
| + |
| + fullCommand = ["git", "-C", self.base_dir] + git_args |
| + p = Popen(args=fullCommand, stdin=PIPE, |
| + stdout=PIPE, stderr=PIPE) |
| + output, err = p.communicate() |
| + rc = p.returncode |
| + if rc != 0: |
| + raise Exception(err) |
| + return output |
| + |
| + def setUp(self): |
| + if path.exists(self.base_dir): |
| + shutil.rmtree(self.base_dir) |
| + |
| + check_call(["git", "init", self.base_dir]) |
| + |
| + # Initial commit |
| + message = """[turbofan] Sanitize language mode for javascript operators. |
| + |
| + R=mstarzinger@chromium.org |
| + |
| + Review URL: https://codereview.chromium.org/1084243005 |
| + |
| + Cr-Commit-Position: refs/heads/master@{#28059}""" |
| + #self._add_commit_new_file("first", message, "Content") |
|
Michael Achenbach
2015/05/04 08:57:53
nit: remove?
Michael Hablich
2015/05/04 12:17:32
Acknowledged.
|
| + self._execute_git(["commit", "--allow-empty", "-m", message]) |
| + |
| + message = """[crankshaft] Do some stuff |
| + |
| + R=hablich@chromium.org |
| + |
| + Review URL: https://codereview.chromium.org/1084243007 |
| + |
| + Cr-Commit-Position: refs/heads/master@{#28030}""" |
| + |
| + self._execute_git(["commit", "--allow-empty", "-m", message]) |
| + |
| + def tearDown(self): |
| + if path.exists(self.base_dir): |
| + shutil.rmtree(self.base_dir) |
| + |
| + def _assert_correct_standard_result( |
| + self, result, all_commits, hash_of_first_commit): |
| + self.assertEqual(len(result), 1, "Master commit not found") |
| + self.assertEqual( |
| + result.keys()[0], |
|
Michael Achenbach
2015/05/04 08:57:53
Maybe better assertTrue(result.get(hash_of_first_c
Michael Hablich
2015/05/04 12:17:32
Good point. The dict is (and should be) order-agno
|
| + hash_of_first_commit, |
| + "Master commit is wrong") |
| + |
| + self.assertEqual( |
| + len(result[hash_of_first_commit]), |
| + 1, |
| + "Child commit not found") |
| + self.assertEqual( |
| + all_commits[2], |
| + result[hash_of_first_commit][0], |
| + "Child commit wrong") |
| + |
| + def _get_commits(self): |
| + commits = self._execute_git( |
| + ["log", "--format=%H", "--reverse"]).splitlines() |
| + return commits |
| + |
| + def testSearchByCommitPosition(self): |
|
Michael Achenbach
2015/05/04 08:57:53
How about one negative example where nothing is fo
Michael Hablich
2015/05/04 12:17:32
Done.
|
| + message = """Revert of some stuff. |
| + > Cr-Commit-Position: refs/heads/master@{#28059} |
| + R=mstarzinger@chromium.org |
| + |
| + Review URL: https://codereview.chromium.org/1084243005 |
| + |
| + Cr-Commit-Position: refs/heads/master@{#28088}""" |
| + |
| + self._execute_git(["commit", "--allow-empty", "-m", message]) |
| + |
| + commits = self._get_commits() |
| + hash_of_first_commit = commits[0] |
| + |
| + result = search_related_commits.search_all_related_commits( |
|
Michael Achenbach
2015/05/04 08:57:53
Looks like the deadline=something case is not cove
Michael Hablich
2015/05/04 12:17:32
Done.
|
| + self.base_dir, hash_of_first_commit, "HEAD",None) |
| + |
| + self._assert_correct_standard_result(result, commits, hash_of_first_commit) |
| + |
| + def testSearchByTitle(self): |
| + message = """Revert of some stuff. |
| + > [turbofan] Sanitize language mode for javascript operators. |
| + > Cr-Commit-Position: refs/heads/master@{#289} |
| + R=mstarzinger@chromium.org |
| + |
| + Review URL: https://codereview.chromium.org/1084243005 |
| + |
| + Cr-Commit-Position: refs/heads/master@{#28088}""" |
| + |
| + self._execute_git(["commit", "--allow-empty", "-m", message]) |
| + |
| + commits = self._get_commits() |
| + hash_of_first_commit = commits[0] |
| + |
| + result = search_related_commits.search_all_related_commits( |
| + self.base_dir, hash_of_first_commit, "HEAD",None) |
|
Michael Achenbach
2015/05/04 08:57:53
nit: space after , - also rest of this file
Michael Hablich
2015/05/04 12:17:32
Done.
|
| + |
| + self._assert_correct_standard_result(result, commits, hash_of_first_commit) |
| + |
| + def testSearchByHash(self): |
| + commits = self._get_commits() |
| + hash_of_first_commit = commits[0] |
| + |
| + message = """Revert of some stuff. |
| + > [turbofan] Sanitize language mode for javascript operators. |
| + > Reverting """ + hash_of_first_commit + """ |
| + > R=mstarzinger@chromium.org |
| + |
| + Review URL: https://codereview.chromium.org/1084243005 |
| + |
| + Cr-Commit-Position: refs/heads/master@{#28088}""" |
| + |
| + self._execute_git(["commit", "--allow-empty", "-m", message]) |
| + |
| + #Fetch again for an update |
| + commits = self._get_commits() |
| + hash_of_first_commit = commits[0] |
| + |
| + result = search_related_commits.search_all_related_commits( |
| + self.base_dir, |
| + hash_of_first_commit, |
| + "HEAD", |
| + None) |
| + |
| + self._assert_correct_standard_result(result, commits, hash_of_first_commit) |
| + |
| + def testPrettyPrint(self): |
| + message = """Revert of some stuff. |
| + > [turbofan] Sanitize language mode for javascript operators. |
| + > Cr-Commit-Position: refs/heads/master@{#289} |
| + R=mstarzinger@chromium.org |
| + |
| + Review URL: https://codereview.chromium.org/1084243005 |
| + |
| + Cr-Commit-Position: refs/heads/master@{#28088}""" |
| + |
| + self._execute_git(["commit", "--allow-empty", "-m", message]) |
| + |
| + commits = self._get_commits() |
| + hash_of_first_commit = commits[0] |
| + OptionsStruct = namedtuple( |
| + "OptionsStruct", |
| + "git_dir of until all prettyprint deadline verbose") |
| + options = OptionsStruct( |
| + git_dir= self.base_dir, |
| + of= [hash_of_first_commit], |
| + until= [commits[2]], |
| + all= True, |
| + prettyprint= True, |
| + deadline = None, |
| + verbose=False) |
| + output = [] |
| + for current_line in search_related_commits.main(options): |
| + output.append(current_line) |
| + |
| + self.assertIs(len(output), 2, "Not exactly two entries written") |
| + self.assertTrue(output[0].startswith("+"), "Master entry not marked with +") |
| + self.assertTrue(output[1].startswith("| "), "Child entry not marked with |") |
| + |
| +if __name__ == "__main__": |
| + #import sys;sys.argv = ['', 'Test.testName'] |
| + unittest.main() |