Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5375)

Unified Diff: chrome/common/extensions/docs/server2/patched_file_system_test.py

Issue 14125010: Docserver: Add support for viewing docs with a codereview patch applied (Closed) Base URL: https://src.chromium.org/svn/trunk/src/
Patch Set: rebase Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/server2/patched_file_system_test.py
===================================================================
--- chrome/common/extensions/docs/server2/patched_file_system_test.py (revision 0)
+++ chrome/common/extensions/docs/server2/patched_file_system_test.py (revision 0)
@@ -0,0 +1,219 @@
+#!/usr/bin/env python
+# Copyright 2013 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.
+
+from copy import deepcopy
+import unittest
+
+from file_system import FileSystem, FileNotFoundError, StatInfo
+from future import Future
+from patched_file_system import PatchedFileSystem
+from patcher import Patcher
+from test_file_system import TestFileSystem
+import url_constants
+
+_TEST_FS_DATA = {
+ 'dir1': {
+ 'file1.html': 'This is dir1/file1.html',
+ 'unmodified': {
+ '1': '1',
+ '2': '',
+ },
+ },
+ 'dir2': {
+ 'subdir1': {
+ 'sub1.txt': 'in subdir(1)',
+ 'sub2.txt': 'in subdir(2)',
+ 'sub3.txt': 'in subdir(3)',
+ },
+ },
+ 'dir3': {
+ },
+ 'dir4': {
+ 'one.txt': '',
+ },
+ 'dir5': {
+ 'subdir': {
+ '1.txt': '555',
+ },
+ },
+ 'test1.txt': 'test1',
+ 'test2.txt': 'test2',
+}
+
+_TEST_PATCH_VERSION = '1001'
+_TEST_PATCH_FILES = (
+ # Added
+ [
+ 'test3.txt',
+ 'dir1/file2.html',
+ 'dir1/newsubdir/a.js',
+ 'newdir/1.html',
+ ],
+ # Deleted
+ [
+ 'test2.txt',
+ 'dir2/subdir1/sub1.txt',
+ 'dir4/one.txt',
+ 'dir5/subdir/1.txt',
+ ],
+ # Modified
+ [
+ 'dir2/subdir1/sub2.txt',
+ ]
+)
+_TEST_PATCH_DATA = {
+ 'test3.txt': 'test3 is added.',
+ 'dir1/file2.html': 'This is dir1/file2.html',
+ 'dir1/newsubdir/a.js': 'This is a.js',
+ 'newdir/1.html': 'This comes from a new dir.',
+ 'dir2/subdir1/sub2.txt': 'in subdir',
+}
+
+class TestPatcher(Patcher):
+ def __init__(self, version, patched_files, patch_data):
+ self._version = version
+ self._patched_files = patched_files
+ self._patch_data = patch_data
+
+ def GetVersion(self):
+ return self._version
+
+ def GetPatchedFiles(self):
+ return self._patched_files
+
+ def Apply(self, paths, file_system, binary):
+ value = {}
+ for path in paths:
+ if self._patch_data.get(path) is not None:
+ value[path] = self._patch_data[path]
+ else:
+ raise FileNotFoundError('%s is deleted in the patch.' % path)
+ return Future(value=value)
+
+class PatchedFileSystemTest(unittest.TestCase):
+ def setUp(self):
+ self._patcher = TestPatcher(_TEST_PATCH_VERSION,
+ _TEST_PATCH_FILES,
+ _TEST_PATCH_DATA)
+ self._host_file_system = TestFileSystem(_TEST_FS_DATA)
+ self._file_system = PatchedFileSystem(self._host_file_system,
+ self._patcher)
+
+ def testRead(self):
+ expected = deepcopy(_TEST_PATCH_DATA)
+ # Files that are not modified.
+ expected.update({
+ 'dir2/subdir1/sub3.txt': 'in subdir(3)',
+ 'dir1/file1.html': 'This is dir1/file1.html',
+ })
+
+ for key in expected:
+ self.assertEqual(expected[key], self._file_system.ReadSingle(key))
+
+ self.assertEqual(
+ expected,
+ self._file_system.Read(expected.keys()).Get())
+
+ self.assertRaises(FileNotFoundError, self._file_system.ReadSingle,
+ 'test2.txt')
+ self.assertRaises(FileNotFoundError, self._file_system.ReadSingle,
+ 'dir2/subdir1/sub1.txt')
+ self.assertRaises(FileNotFoundError, self._file_system.ReadSingle,
+ 'not_existing')
+ self.assertRaises(FileNotFoundError, self._file_system.ReadSingle,
+ 'dir1/not_existing')
+ self.assertRaises(FileNotFoundError, self._file_system.ReadSingle,
+ 'dir1/newsubdir/not_existing')
+
+ def testReadDir(self):
+ self.assertEqual(sorted(self._file_system.ReadSingle('dir1/')),
+ sorted(set(self._host_file_system.ReadSingle('dir1/')) |
+ {'file2.html', 'newsubdir/'}))
+
+ self.assertEqual(sorted(self._file_system.ReadSingle('dir1/newsubdir/')),
+ sorted(['a.js']))
+
+ self.assertEqual(sorted(self._file_system.ReadSingle('dir2/')),
+ sorted(self._host_file_system.ReadSingle('dir2/')))
+
+ self.assertEqual(sorted(self._file_system.ReadSingle('dir2/subdir1/')),
+ sorted(set(self._host_file_system.ReadSingle('dir2/subdir1/')) -
+ {'sub1.txt'}))
+
+ self.assertEqual(sorted(self._file_system.ReadSingle('newdir/')),
+ sorted(['1.html']))
+
+ self.assertEqual(self._file_system.ReadSingle('dir3/'), [])
+
+ self.assertEqual(self._file_system.ReadSingle('dir4/'), [])
+
+ self.assertRaises(FileNotFoundError, self._file_system.ReadSingle,
+ 'not_existing_dir/')
+
+ def testStat(self):
+ version = 'patched_%s' % self._patcher.GetVersion()
+ old_version = self._host_file_system.Stat('dir1/file1.html').version
+
+ # Stat an unmodified file.
+ self.assertEqual(self._file_system.Stat('dir1/file1.html'),
+ self._host_file_system.Stat('dir1/file1.html'))
+
+ # Stat an unmodified directory.
+ self.assertEqual(self._file_system.Stat('dir1/unmodified/'),
+ self._host_file_system.Stat('dir1/unmodified/'))
+
+ # Stat a modified directory.
+ self.assertEqual(self._file_system.Stat('dir2/'),
+ StatInfo(version, {'subdir1/': version}))
+ self.assertEqual(self._file_system.Stat('dir2/subdir1/'),
+ StatInfo(version, {'sub2.txt': version,
+ 'sub3.txt': old_version}))
+
+ # Stat a modified directory with new files.
+ expected = self._host_file_system.Stat('dir1/')
+ expected.version = version
+ expected.child_versions.update({'file2.html': version,
+ 'newsubdir/': version})
+ self.assertEqual(self._file_system.Stat('dir1/'),
+ expected)
+
+ # Stat an added directory.
+ self.assertEqual(self._file_system.Stat('dir1/newsubdir/'),
+ StatInfo(version, {'a.js': version}))
+ self.assertEqual(self._file_system.Stat('dir1/newsubdir/a.js'),
+ StatInfo(version))
+ self.assertEqual(self._file_system.Stat('newdir/'),
+ StatInfo(version, {'1.html': version}))
+ self.assertEqual(self._file_system.Stat('newdir/1.html'),
+ StatInfo(version))
+
+ # Stat files removed in the patch.
+ self.assertRaises(FileNotFoundError, self._file_system.Stat,
+ 'dir2/subdir1/sub1.txt')
+ self.assertRaises(FileNotFoundError, self._file_system.Stat,
+ 'dir4/one.txt')
+
+ # Stat empty directories.
+ self.assertEqual(self._file_system.Stat('dir3/'),
+ StatInfo(old_version, {}))
+ self.assertEqual(self._file_system.Stat('dir4/'),
+ StatInfo(version, {}))
+ self.assertEqual(self._file_system.Stat('dir5/subdir/'),
+ StatInfo(version, {}))
+
+ # Stat empty (after patch) directory's parent
+ self.assertEqual(self._file_system.Stat('dir5/'),
+ StatInfo(version, {'subdir/': version}))
+
+ # Stat files that don't exist either before or after patching.
+ self.assertRaises(FileNotFoundError, self._file_system.Stat,
+ 'not_existing/')
+ self.assertRaises(FileNotFoundError, self._file_system.Stat,
+ 'dir1/not_existing/')
+ self.assertRaises(FileNotFoundError, self._file_system.Stat,
+ 'dir1/not_existing')
+
+if __name__ == '__main__':
+ unittest.main()
Property changes on: chrome/common/extensions/docs/server2/patched_file_system_test.py
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698