Index: chrome/common/extensions/docs/server2/test_file_system.py |
diff --git a/chrome/common/extensions/docs/server2/test_file_system.py b/chrome/common/extensions/docs/server2/test_file_system.py |
index b4165bbd8b8ff59b4712e592e0cc19292ae6ce85..05a8fbf044271fc9165e6da0e2174720d089d66d 100644 |
--- a/chrome/common/extensions/docs/server2/test_file_system.py |
+++ b/chrome/common/extensions/docs/server2/test_file_system.py |
@@ -11,11 +11,38 @@ class TestFileSystem(FileSystem): |
Read('a/') as ['b'], and Stat determined by a value incremented via |
IncrementStat. |
''' |
+ |
+ # TODO(kalman): this method would be unnecessary if we injected paths properly |
+ # in ServerInstance. |
+ @staticmethod |
+ def MoveTo(base, obj): |
+ '''Returns an object as |obj| moved to |prefix|. That is, |
+ MoveTo('foo/bar', {'a': 'b'}) -> {'foo': {'bar': {'a': 'b'}}} |
+ ''' |
+ result = {} |
+ leaf = result |
+ for k in base.split('/'): |
+ leaf[k] = {} |
+ leaf = leaf[k] |
+ leaf.update(obj) |
+ return result |
+ |
def __init__(self, obj): |
self._obj = obj |
- self._stat = 0 |
+ self._global_stat = 0 |
+ self._path_stats = {} |
+ self._read_count = 0 |
+ self._stat_count = 0 |
+ |
+ # |
+ # FileSystem implementation. |
+ # |
def Read(self, paths, binary=False): |
+ self._read_count += 1 |
+ return self._ReadImpl(paths, binary=binary) |
+ |
+ def _ReadImpl(self, paths, binary=False): |
try: |
result = {} |
for path in paths: |
@@ -46,7 +73,7 @@ class TestFileSystem(FileSystem): |
return k |
if isinstance(v, dict): |
return '%s/' % k |
- raise ValueError('Cannot convert type % to path', type(v)) |
+ raise ValueError('Cannot convert type %s to path', type(v)) |
return [ToPath(k, v) for k, v in obj.items()] |
path = path.lstrip('/') |
@@ -72,12 +99,35 @@ class TestFileSystem(FileSystem): |
return GetPaths(dir_contents) |
def Stat(self, path): |
- read_result = self.ReadSingle(path) |
- stat_result = StatInfo(str(self._stat)) |
+ self._stat_count += 1 |
+ return self._StatImpl(path) |
+ |
+ def _StatImpl(self, path): |
+ read_result = self._ReadImpl([path]).Get()[path] |
+ stat_result = StatInfo(self._SinglePathStat(path)) |
if isinstance(read_result, list): |
- stat_result.child_versions = dict((file_result, str(self._stat)) |
- for file_result in read_result) |
+ stat_result.child_versions = dict( |
+ (file_result, self._SinglePathStat('%s%s' % (path, file_result))) |
+ for file_result in read_result) |
return stat_result |
- def IncrementStat(self): |
- self._stat += 1 |
+ def _SinglePathStat(self, path): |
+ return str(self._global_stat + self._path_stats.get(path, 0)) |
+ |
+ # |
+ # Testing methods. |
+ # |
+ |
+ def IncrementStat(self, path=None): |
+ if path is not None: |
+ self._path_stats[path] = self._path_stats.get(path, 0) + 1 |
+ else: |
+ self._global_stat += 1 |
+ |
+ def CheckAndReset(self, stat_count=0, read_count=0): |
+ try: |
+ return (self._read_count == read_count and |
+ self._stat_count == stat_count) |
+ finally: |
+ self._read_count = 0 |
+ self._stat_count = 0 |