Index: tests/gclient_test.py |
diff --git a/tests/gclient_test.py b/tests/gclient_test.py |
index 764970a4ad8312d462b2694d51097fd2ffd02edb..e547c8a6eb1f9bf0bb104614d5620e538fb5a591 100755 |
--- a/tests/gclient_test.py |
+++ b/tests/gclient_test.py |
@@ -72,29 +72,22 @@ class GclientTest(trial_dir.TestCase): |
return SCMMock(self, parsed_url) |
def testDependencies(self): |
- self._dependencies('1', False) |
- |
- def testDependenciesReverse(self): |
- self._dependencies('1', True) |
+ self._dependencies('1') |
def testDependenciesJobs(self): |
- # TODO(maruel): Reenable once parallel processing works. |
- #self._dependencies('1000', False) |
- pass |
+ self._dependencies('1000') |
+ |
+ def _dependencies(self, jobs): |
+ """Verifies that dependencies are processed in the right order. |
- def testDependenciesJobsReverse(self): |
- # TODO(maruel): Reenable once parallel processing works. |
- #self._dependencies('1000', True) |
- pass |
+ e.g. if there is a dependency 'src' and another 'src/third_party/bar', that |
+ bar isn't fetched until 'src' is done. |
+ Also test that a From() dependency should not be processed when it is listed |
+ as a requirement. |
- def _dependencies(self, jobs, reverse): |
- # Verify that dependencies are processed in the right order, e.g. if there |
- # is a dependency 'src' and another 'src/third_party/bar', that bar isn't |
- # fetched until 'src' is done. |
- # jobs is the number of parallel jobs simulated. reverse is to reshuffle the |
- # list to see if it is still processed in order correctly. |
- # Also test that a From() dependency that should not be processed is listed |
- # as a requirement. |
+ Args: |
+ |jobs| is the number of parallel jobs simulated. |
+ """ |
parser = gclient.Parser() |
options, args = parser.parse_args(['--jobs', jobs]) |
write( |
@@ -117,6 +110,7 @@ class GclientTest(trial_dir.TestCase): |
write( |
os.path.join('bar', 'DEPS'), |
'deps = {\n' |
+ # There is two foo/dir1/dir2. This one is fetched as bar/dir1/dir2. |
' "foo/dir1/dir2": "/dir1/dir2",\n' |
'}') |
write( |
@@ -129,6 +123,7 @@ class GclientTest(trial_dir.TestCase): |
'deps = {\n' |
# This one should not be fetched or set as a requirement. |
' "foo/dir1/dir2/dir5": "svn://example.com/x",\n' |
+ # This foo/dir1/dir2 points to a different url than the one in bar. |
' "foo/dir1/dir2": "/dir1/another",\n' |
'}') |
@@ -136,48 +131,55 @@ class GclientTest(trial_dir.TestCase): |
self._check_requirements(obj.dependencies[0], {}) |
self._check_requirements(obj.dependencies[1], {}) |
obj.RunOnDeps('None', args) |
- # The trick here is to manually process the list to make sure it's out of |
- # order. |
- for i in obj.dependencies: |
- # pylint: disable=W0212 |
- i._dependencies.sort(key=lambda x: x.name, reverse=reverse) |
actual = self._get_processed() |
- # We don't care of the ordering of these items: |
- self.assertEquals( |
- ['svn://example.com/bar', 'svn://example.com/foo'], sorted(actual[0:2])) |
- actual = actual[2:] |
- # Ordering may not be exact in case of parallel jobs. |
- self.assertTrue( |
- actual.index('svn://example.com/bar/dir1/dir2') > |
- actual.index('svn://example.com/foo/dir1')) |
- actual.remove('svn://example.com/bar/dir1/dir2') |
- |
- # Ordering may not be exact in case of parallel jobs. |
- actual.remove('svn://example.com/bar_empty') |
+ first_3 = [ |
+ 'svn://example.com/bar', |
+ 'svn://example.com/bar_empty', |
+ 'svn://example.com/foo', |
+ ] |
+ if jobs != 1: |
+ # We don't care of the ordering of these items except that bar must be |
+ # before bar/empty. |
+ self.assertTrue( |
+ actual.index('svn://example.com/bar') < |
+ actual.index('svn://example.com/bar_empty')) |
+ self.assertEquals(first_3, sorted(actual[0:3])) |
+ else: |
+ self.assertEquals(first_3, actual[0:3]) |
self.assertEquals( |
[ |
'svn://example.com/foo/dir1', |
+ 'svn://example.com/bar/dir1/dir2', |
'svn://example.com/foo/dir1/dir2/dir3', |
'svn://example.com/foo/dir1/dir2/dir3/dir4', |
- # TODO(maruel): This is probably wrong. |
'svn://example.com/foo/dir1/dir2/dir3/dir4/dir1/another', |
], |
- actual) |
+ actual[3:]) |
+ self.assertEquals(3, len(obj.dependencies)) |
+ self.assertEquals('bar', obj.dependencies[0].name) |
+ self.assertEquals('bar/empty', obj.dependencies[1].name) |
+ self.assertEquals('foo', obj.dependencies[2].name) |
self._check_requirements( |
obj.dependencies[0], |
{ |
- 'foo/dir1': ['foo'], |
- 'foo/dir1/dir2/dir3': ['foo', 'foo/dir1', 'foo/dir1/dir2'], |
- 'foo/dir1/dir2/dir3/dir4': |
- ['foo', 'foo/dir1', 'foo/dir1/dir2', 'foo/dir1/dir2/dir3'], |
- 'foo/dir1/dir2/dir5/dir6': |
- ['foo', 'foo/dir1', 'foo/dir1/dir2', 'foo/dir1/dir2/dir3/dir4'], |
+ 'foo/dir1/dir2': ['bar', 'bar/empty', 'foo', 'foo/dir1'], |
}) |
self._check_requirements( |
obj.dependencies[1], |
+ {}) |
+ self._check_requirements( |
+ obj.dependencies[2], |
{ |
- 'foo/dir1/dir2': ['bar', 'foo', 'foo/dir1'], |
+ 'foo/dir1': ['bar', 'bar/empty', 'foo'], |
+ 'foo/dir1/dir2/dir3': |
+ ['bar', 'bar/empty', 'foo', 'foo/dir1', 'foo/dir1/dir2'], |
+ 'foo/dir1/dir2/dir3/dir4': |
+ [ 'bar', 'bar/empty', 'foo', 'foo/dir1', 'foo/dir1/dir2', |
+ 'foo/dir1/dir2/dir3'], |
+ 'foo/dir1/dir2/dir5/dir6': |
+ [ 'bar', 'bar/empty', 'foo', 'foo/dir1', 'foo/dir1/dir2', |
+ 'foo/dir1/dir2/dir3/dir4'], |
}) |
self._check_requirements( |
obj, |
@@ -243,7 +245,7 @@ class GclientTest(trial_dir.TestCase): |
# pylint: disable=W0212 |
obj.dependencies[0]._file_list.append('foo') |
str_obj = str(obj) |
- self.assertEquals(472, len(str_obj), '%d\n%s' % (len(str_obj), str_obj)) |
+ self.assertEquals(471, len(str_obj), '%d\n%s' % (len(str_obj), str_obj)) |
if __name__ == '__main__': |