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

Side by Side 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: 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 unified diff | Download patch
Property Changes:
Added: svn:eol-style
+ LF
Added: svn:executable
+ *
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 from copy import deepcopy
7 import unittest
8
9 from file_system import FileSystem, FileNotFoundError, StatInfo
10 from future import Future
11 from patched_file_system import PatchedFileSystem
12 from patcher import Patcher
13 from test_file_system import TestFileSystem
14 import url_constants
15
16 _TEST_FS_DATA = {
17 'dir1': {
18 'file1.html': 'This is dir1/file1.html',
19 'unmodified': {
20 '1': '1',
21 '2': '',
22 },
23 },
24 'dir2': {
25 'subdir1': {
26 'sub1.txt': 'in subdir(1)',
27 'sub2.txt': 'in subdir(2)',
28 'sub3.txt': 'in subdir(3)',
29 },
30 },
31 'dir3': {
32 },
33 'dir4': {
34 'one.txt': '',
35 },
36 'dir5': {
37 'subdir': {
38 '1.txt': '555',
39 },
40 },
41 'test1.txt': 'test1',
42 'test2.txt': 'test2',
43 }
44
45 _TEST_PATCH_VERSION = '1001'
46 _TEST_PATCH_FILES = (
47 # Added
48 [
49 'test3.txt',
50 'dir1/file2.html',
51 'dir1/newsubdir/a.js',
52 'newdir/1.html',
53 ],
54 # Deleted
55 [
56 'test2.txt',
57 'dir2/subdir1/sub1.txt',
58 'dir4/one.txt',
59 'dir5/subdir/1.txt',
60 ],
61 # Modified
62 [
63 'dir2/subdir1/sub2.txt',
64 ]
65 )
66 _TEST_PATCH_DATA = {
67 'test3.txt': 'test3 is added.',
68 'dir1/file2.html': 'This is dir1/file2.html',
69 'dir1/newsubdir/a.js': 'This is a.js',
70 'newdir/1.html': 'This comes from a new dir.',
71 'dir2/subdir1/sub2.txt': 'in subdir',
72 }
73
74 class TestPatcher(Patcher):
75 def __init__(self, version, patched_files, patch_data):
76 self._version = version
77 self._patched_files = patched_files
78 self._patch_data = patch_data
79
80 def GetVersion(self):
81 return self._version
82
83 def GetPatchedFiles(self):
84 return self._patched_files
85
86 def Apply(self, paths, file_system, binary):
87 value = {}
88 for path in paths:
89 if self._patch_data.get(path) is not None:
90 value[path] = self._patch_data[path]
91 else:
92 raise FileNotFoundError('%s is deleted in the patch.' % path)
93 return Future(value=value)
94
95 class PatchedFileSystemTest(unittest.TestCase):
96 def setUp(self):
97 self._patcher = TestPatcher(_TEST_PATCH_VERSION,
98 _TEST_PATCH_FILES,
99 _TEST_PATCH_DATA)
100 self._host_file_system = TestFileSystem(_TEST_FS_DATA)
101 self._file_system = PatchedFileSystem(self._host_file_system,
102 self._patcher)
103
104 def testRead(self):
105 expected = deepcopy(_TEST_PATCH_DATA)
106 # Files that are not modified.
107 expected.update({
108 'dir2/subdir1/sub3.txt': 'in subdir(3)',
109 'dir1/file1.html': 'This is dir1/file1.html',
110 })
111
112 for key in expected:
113 self.assertEqual(expected[key], self._file_system.ReadSingle(key))
114
115 self.assertEqual(
116 expected,
117 self._file_system.Read(expected.keys()).Get())
118
119 self.assertRaises(FileNotFoundError, self._file_system.ReadSingle,
120 'test2.txt')
121 self.assertRaises(FileNotFoundError, self._file_system.ReadSingle,
122 'dir2/subdir1/sub1.txt')
123 self.assertRaises(FileNotFoundError, self._file_system.ReadSingle,
124 'not_existing')
125 self.assertRaises(FileNotFoundError, self._file_system.ReadSingle,
126 'dir1/not_existing')
127 self.assertRaises(FileNotFoundError, self._file_system.ReadSingle,
128 'dir1/newsubdir/not_existing')
129
130 def testReadDir(self):
131 self.assertEqual(sorted(self._file_system.ReadSingle('dir1/')),
132 sorted(set(self._host_file_system.ReadSingle('dir1/')) |
133 {'file2.html', 'newsubdir/'}))
134
135 self.assertEqual(sorted(self._file_system.ReadSingle('dir1/newsubdir/')),
136 sorted(['a.js']))
137
138 self.assertEqual(sorted(self._file_system.ReadSingle('dir2/')),
139 sorted(self._host_file_system.ReadSingle('dir2/')))
140
141 self.assertEqual(sorted(self._file_system.ReadSingle('dir2/subdir1/')),
142 sorted(set(self._host_file_system.ReadSingle('dir2/subdir1/')) -
143 {'sub1.txt'}))
144
145 self.assertEqual(sorted(self._file_system.ReadSingle('newdir/')),
146 sorted(['1.html']))
147
148 self.assertEqual(self._file_system.ReadSingle('dir3/'), [])
149
150 self.assertEqual(self._file_system.ReadSingle('dir4/'), [])
151
152 self.assertRaises(FileNotFoundError, self._file_system.ReadSingle,
153 'not_existing_dir/')
154
155 def testStat(self):
156 version = 'patched_%s' % self._patcher.GetVersion()
157 old_version = self._host_file_system.Stat('dir1/file1.html').version
158
159 # Stat an unmodified file.
160 self.assertEqual(self._file_system.Stat('dir1/file1.html'),
161 self._host_file_system.Stat('dir1/file1.html'))
162
163 # Stat an unmodified directory.
164 self.assertEqual(self._file_system.Stat('dir1/unmodified/'),
165 self._host_file_system.Stat('dir1/unmodified/'))
166
167 # Stat a modified directory.
168 self.assertEqual(self._file_system.Stat('dir2/'),
169 StatInfo(version, {'subdir1/': version}))
170 self.assertEqual(self._file_system.Stat('dir2/subdir1/'),
171 StatInfo(version, {'sub2.txt': version,
172 'sub3.txt': old_version}))
173
174 # Stat a modified directory with new files.
175 expected = self._host_file_system.Stat('dir1/')
176 expected.version = version
177 expected.child_versions.update({'file2.html': version,
178 'newsubdir/': version})
179 self.assertEqual(self._file_system.Stat('dir1/'),
180 expected)
181
182 # Stat an added directory.
183 self.assertEqual(self._file_system.Stat('dir1/newsubdir/'),
184 StatInfo(version, {'a.js': version}))
185 self.assertEqual(self._file_system.Stat('dir1/newsubdir/a.js'),
186 StatInfo(version))
187 self.assertEqual(self._file_system.Stat('newdir/'),
188 StatInfo(version, {'1.html': version}))
189 self.assertEqual(self._file_system.Stat('newdir/1.html'),
190 StatInfo(version))
191
192 # Stat files removed in the patch.
193 self.assertRaises(FileNotFoundError, self._file_system.Stat,
194 'dir2/subdir1/sub1.txt')
195 self.assertRaises(FileNotFoundError, self._file_system.Stat,
196 'dir4/one.txt')
197
198 # Stat empty directories.
199 self.assertEqual(self._file_system.Stat('dir3/'),
200 StatInfo(old_version, {}))
201 self.assertEqual(self._file_system.Stat('dir4/'),
202 StatInfo(version, {}))
203 self.assertEqual(self._file_system.Stat('dir5/subdir/'),
204 StatInfo(version, {}))
205
206 # Stat empty (after patch) directory's parent
207 self.assertEqual(self._file_system.Stat('dir5/'),
208 StatInfo(version, {'subdir/': version}))
209
210 # Stat files that don't exist either before or after patching.
211 self.assertRaises(FileNotFoundError, self._file_system.Stat,
212 'not_existing/')
213 self.assertRaises(FileNotFoundError, self._file_system.Stat,
214 'dir1/not_existing/')
215 self.assertRaises(FileNotFoundError, self._file_system.Stat,
216 'dir1/not_existing')
217
not at google - send to devlin 2013/05/07 05:45:40 sweet tests
218 if __name__ == '__main__':
219 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698