Index: tests/gclient_scm_test.py |
diff --git a/tests/gclient_scm_test.py b/tests/gclient_scm_test.py |
index 5607f85dda123b20633d3daaf9003d91e43fda66..741727e34f69c58b42145616866fff6377fae95c 100755 |
--- a/tests/gclient_scm_test.py |
+++ b/tests/gclient_scm_test.py |
@@ -16,7 +16,6 @@ import os |
import sys |
import tempfile |
import unittest |
-import __builtin__ |
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
@@ -752,6 +751,20 @@ from :3 |
M 100644 :4 a |
M 100644 :5 b |
+blob |
+mark :7 |
+data 5 |
+Mooh |
+ |
+commit refs/heads/feature |
+mark :8 |
+author Bob <bob@example.com> 1390311986 -0000 |
+committer Bob <bob@example.com> 1390311986 -0000 |
+data 6 |
+Add C |
+from :3 |
+M 100644 :7 c |
+ |
reset refs/heads/master |
from :3 |
""" |
@@ -785,6 +798,12 @@ from :3 |
stderr=STDOUT, cwd=path).communicate() |
return True |
+ def _GetAskForDataCallback(self, expected_prompt, return_value): |
+ def AskForData(prompt, options): |
+ self.assertEquals(prompt, expected_prompt) |
+ return return_value |
+ return AskForData |
+ |
def setUp(self): |
TestCaseUtils.setUp(self) |
unittest.TestCase.setUp(self) |
@@ -967,6 +986,51 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase): |
'a7142dc9f0009350b96a11f372b6ea658592aa95') |
sys.stdout.close() |
+ def testUpdateMerge(self): |
+ if not self.enabled: |
+ return |
+ options = self.Options() |
+ options.merge = True |
+ scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir, |
+ relpath=self.relpath) |
+ scm._Run(['checkout', '-q', 'feature'], options) |
+ rev = scm.revinfo(options, (), None) |
+ file_list = [] |
+ scm.update(options, (), file_list) |
+ self.assertEquals(file_list, [join(self.base_path, x) |
+ for x in ['a', 'b', 'c']]) |
+ # The actual commit that is created is unstable, so we verify its tree and |
+ # parents instead. |
+ self.assertEquals(scm._Capture(['rev-parse', 'HEAD:']), |
+ 'd2e35c10ac24d6c621e14a1fcadceb533155627d') |
+ self.assertEquals(scm._Capture(['rev-parse', 'HEAD^1']), rev) |
+ self.assertEquals(scm._Capture(['rev-parse', 'HEAD^2']), |
+ scm._Capture(['rev-parse', 'origin/master'])) |
+ sys.stdout.close() |
+ |
+ def testUpdateRebase(self): |
+ if not self.enabled: |
+ return |
+ options = self.Options() |
+ scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir, |
+ relpath=self.relpath) |
+ scm._Run(['checkout', '-q', 'feature'], options) |
+ file_list = [] |
+ # Fake a 'y' key press. |
+ scm._AskForData = self._GetAskForDataCallback( |
+ 'Cannot fast-forward merge, attempt to rebase? ' |
+ '(y)es / (q)uit / (s)kip : ', 'y') |
+ scm.update(options, (), file_list) |
+ self.assertEquals(file_list, [join(self.base_path, x) |
+ for x in ['a', 'b', 'c']]) |
+ # The actual commit that is created is unstable, so we verify its tree and |
+ # parent instead. |
+ self.assertEquals(scm._Capture(['rev-parse', 'HEAD:']), |
+ 'd2e35c10ac24d6c621e14a1fcadceb533155627d') |
+ self.assertEquals(scm._Capture(['rev-parse', 'HEAD^']), |
+ scm._Capture(['rev-parse', 'origin/master'])) |
+ sys.stdout.close() |
+ |
def testUpdateReset(self): |
if not self.enabled: |
return |
@@ -1039,7 +1103,9 @@ class ManagedGitWrapperTestCase(BaseGitWrapperTestCase): |
file_path = join(self.base_path, 'b') |
open(file_path, 'w').writelines('conflict\n') |
scm._Run(['commit', '-am', 'test'], options) |
- __builtin__.raw_input = lambda x: 'y' |
+ scm._AskForData = self._GetAskForDataCallback( |
+ 'Cannot fast-forward merge, attempt to rebase? ' |
+ '(y)es / (q)uit / (s)kip : ', 'y') |
exception = ('Conflict while rebasing this branch.\n' |
'Fix the conflict and run gclient again.\n' |
'See \'man git-rebase\' for details.\n') |