| Index: recipe_modules/gclient/test_api.py
 | 
| diff --git a/recipe_modules/gclient/test_api.py b/recipe_modules/gclient/test_api.py
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..be9338de86642ef8adae94a477f7d2254f7ed9bf
 | 
| --- /dev/null
 | 
| +++ b/recipe_modules/gclient/test_api.py
 | 
| @@ -0,0 +1,37 @@
 | 
| +# Copyright 2014 The Chromium Authors. All rights reserved.
 | 
| +# Use of this source code is governed by a BSD-style license that can be
 | 
| +# found in the LICENSE file.
 | 
| +
 | 
| +import hashlib
 | 
| +
 | 
| +from recipe_engine import recipe_test_api
 | 
| +
 | 
| +class GclientTestApi(recipe_test_api.RecipeTestApi):
 | 
| +  def output_json(self, projects, git_mode=False):
 | 
| +    """Deterministically synthesize json.output test data for gclient's
 | 
| +    --output-json option.
 | 
| +
 | 
| +    Args:
 | 
| +      projects - a list of project paths (e.g. ['src', 'src/dependency'])
 | 
| +      git_mode - Return git hashes instead of svn revs.
 | 
| +    """
 | 
| +    # TODO(iannucci): Account for parent_got_revision_mapping. Right now the
 | 
| +    # synthesized json output from this method will always use
 | 
| +    # gen_revision(project), but if parent_got_revision and its ilk are
 | 
| +    # specified, we should use those values instead.
 | 
| +    return self.m.json.output({
 | 
| +      'solutions': dict(
 | 
| +        (p+'/', {'revision': self.gen_revision(p, git_mode)})
 | 
| +        for p in projects
 | 
| +      )
 | 
| +    })
 | 
| +
 | 
| +  @staticmethod
 | 
| +  def gen_revision(project, GIT_MODE):
 | 
| +    """Hash project to bogus deterministic revision values."""
 | 
| +    h = hashlib.sha1(project)
 | 
| +    if GIT_MODE:
 | 
| +      return h.hexdigest()
 | 
| +    else:
 | 
| +      import struct
 | 
| +      return struct.unpack('!I', h.digest()[:4])[0] % 300000
 | 
| 
 |