| #!/usr/bin/env python |
| # Copyright (c) 2012 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 |
| from file_system import FileNotFoundError, StatInfo |
| from test_file_system import TestFileSystem, _MoveTo |
| import unittest |
| |
| |
| _TEST_DATA = { |
| '404.html': '404.html contents', |
| 'apps': { |
| 'a11y.html': 'a11y.html contents', |
| 'about_apps.html': 'about_apps.html contents', |
| 'fakedir': { |
| 'file.html': 'file.html contents' |
| } |
| }, |
| 'extensions': { |
| 'activeTab.html': 'activeTab.html contents', |
| 'alarms.html': 'alarms.html contents' |
| } |
| } |
| |
| |
| def _Get(fn): |
| '''Returns a function which calls Future.Get on the result of |fn|. |
| ''' |
| return lambda *args: fn(*args).Get() |
| |
| |
| class TestFileSystemTest(unittest.TestCase): |
| def testEmptyFileSystem(self): |
| self._TestMetasyntacticPaths(TestFileSystem({})) |
| |
| def testNonemptyFileNotFoundErrors(self): |
| fs = TestFileSystem(deepcopy(_TEST_DATA)) |
| self._TestMetasyntacticPaths(fs) |
| self.assertRaises(FileNotFoundError, _Get(fs.Read), ['404.html/']) |
| self.assertRaises(FileNotFoundError, _Get(fs.Read), ['apps/foo/']) |
| self.assertRaises(FileNotFoundError, _Get(fs.Read), ['apps/foo.html']) |
| self.assertRaises(FileNotFoundError, _Get(fs.Read), ['apps/foo.html']) |
| self.assertRaises(FileNotFoundError, _Get(fs.Read), ['apps/foo/', |
| 'apps/foo.html']) |
| self.assertRaises(FileNotFoundError, _Get(fs.Read), ['apps/foo/', |
| 'apps/a11y.html']) |
| |
| def _TestMetasyntacticPaths(self, fs): |
| self.assertRaises(FileNotFoundError, _Get(fs.Read), ['foo']) |
| self.assertRaises(FileNotFoundError, _Get(fs.Read), ['bar/']) |
| self.assertRaises(FileNotFoundError, _Get(fs.Read), ['bar/baz']) |
| self.assertRaises(FileNotFoundError, _Get(fs.Read), ['foo', |
| 'bar/', |
| 'bar/baz']) |
| self.assertRaises(FileNotFoundError, fs.Stat, 'foo') |
| self.assertRaises(FileNotFoundError, fs.Stat, 'bar/') |
| self.assertRaises(FileNotFoundError, fs.Stat, 'bar/baz') |
| |
| def testNonemptySuccess(self): |
| fs = TestFileSystem(deepcopy(_TEST_DATA)) |
| self.assertEqual('404.html contents', fs.ReadSingle('404.html').Get()) |
| self.assertEqual('404.html contents', fs.ReadSingle('/404.html').Get()) |
| self.assertEqual('a11y.html contents', |
| fs.ReadSingle('apps/a11y.html').Get()) |
| self.assertEqual(['404.html', 'apps/', 'extensions/'], |
| sorted(fs.ReadSingle('/').Get())) |
| self.assertEqual(['a11y.html', 'about_apps.html', 'fakedir/'], |
| sorted(fs.ReadSingle('apps/').Get())) |
| self.assertEqual(['a11y.html', 'about_apps.html', 'fakedir/'], |
| sorted(fs.ReadSingle('/apps/').Get())) |
| |
| def testReadFiles(self): |
| fs = TestFileSystem(deepcopy(_TEST_DATA)) |
| self.assertEqual('404.html contents', |
| fs.ReadSingle('404.html').Get()) |
| self.assertEqual('404.html contents', |
| fs.ReadSingle('/404.html').Get()) |
| self.assertEqual('a11y.html contents', |
| fs.ReadSingle('apps/a11y.html').Get()) |
| self.assertEqual('a11y.html contents', |
| fs.ReadSingle('/apps/a11y.html').Get()) |
| self.assertEqual('file.html contents', |
| fs.ReadSingle('apps/fakedir/file.html').Get()) |
| self.assertEqual('file.html contents', |
| fs.ReadSingle('/apps/fakedir/file.html').Get()) |
| |
| def testReadDirs(self): |
| fs = TestFileSystem(deepcopy(_TEST_DATA)) |
| self.assertEqual(['404.html', 'apps/', 'extensions/'], |
| sorted(fs.ReadSingle('/').Get())) |
| self.assertEqual(['a11y.html', 'about_apps.html', 'fakedir/'], |
| sorted(fs.ReadSingle('/apps/').Get())) |
| self.assertEqual(['a11y.html', 'about_apps.html', 'fakedir/'], |
| sorted(fs.ReadSingle('apps/').Get())) |
| self.assertEqual(['file.html'], fs.ReadSingle('/apps/fakedir/').Get()) |
| self.assertEqual(['file.html'], fs.ReadSingle('apps/fakedir/').Get()) |
| |
| def testStat(self): |
| fs = TestFileSystem(deepcopy(_TEST_DATA)) |
| self.assertRaises(FileNotFoundError, fs.Stat, 'foo') |
| self.assertRaises(FileNotFoundError, fs.Stat, '404.html/') |
| self.assertEquals(StatInfo('0'), fs.Stat('404.html')) |
| self.assertEquals(StatInfo('0', child_versions={ |
| 'activeTab.html': '0', |
| 'alarms.html': '0', |
| }), fs.Stat('extensions/')) |
| |
| fs.IncrementStat() |
| self.assertEquals(StatInfo('1'), fs.Stat('404.html')) |
| self.assertEquals(StatInfo('1', child_versions={ |
| 'activeTab.html': '1', |
| 'alarms.html': '1', |
| }), fs.Stat('extensions/')) |
| |
| fs.IncrementStat(path='404.html') |
| self.assertEquals(StatInfo('2'), fs.Stat('404.html')) |
| self.assertEquals(StatInfo('1', child_versions={ |
| 'activeTab.html': '1', |
| 'alarms.html': '1', |
| }), fs.Stat('extensions/')) |
| |
| fs.IncrementStat() |
| self.assertEquals(StatInfo('3'), fs.Stat('404.html')) |
| self.assertEquals(StatInfo('2', child_versions={ |
| 'activeTab.html': '2', |
| 'alarms.html': '2', |
| }), fs.Stat('extensions/')) |
| |
| fs.IncrementStat(path='extensions/') |
| self.assertEquals(StatInfo('3'), fs.Stat('404.html')) |
| self.assertEquals(StatInfo('3', child_versions={ |
| 'activeTab.html': '2', |
| 'alarms.html': '2', |
| }), fs.Stat('extensions/')) |
| |
| fs.IncrementStat(path='extensions/alarms.html') |
| self.assertEquals(StatInfo('3'), fs.Stat('404.html')) |
| self.assertEquals(StatInfo('3', child_versions={ |
| 'activeTab.html': '2', |
| 'alarms.html': '3', |
| }), fs.Stat('extensions/')) |
| |
| def testMoveTo(self): |
| self.assertEqual({'foo': {'a': 'b', 'c': 'd'}}, |
| _MoveTo('foo', {'a': 'b', 'c': 'd'})) |
| self.assertEqual({'foo': {'bar': {'a': 'b', 'c': 'd'}}}, |
| _MoveTo('foo/bar', {'a': 'b', 'c': 'd'})) |
| self.assertEqual({'foo': {'bar': {'baz': {'a': 'b'}}}}, |
| _MoveTo('foo/bar/baz', {'a': 'b'})) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |