blob: da1eefbeeb0f247f6efae94b329bfbeb3cd00eeb [file] [log] [blame]
#!/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()