| Index: chrome/common/extensions/docs/server2/patched_file_system_test.py
|
| diff --git a/chrome/common/extensions/docs/server2/patched_file_system_test.py b/chrome/common/extensions/docs/server2/patched_file_system_test.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..2a93bff7f6c9e8a2155d0f7fa20e707c0310d928
|
| --- /dev/null
|
| +++ b/chrome/common/extensions/docs/server2/patched_file_system_test.py
|
| @@ -0,0 +1,199 @@
|
| +#!/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
|
| +from test_patcher import TestPatcher
|
| +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 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()
|
|
|