blob: 813751f8be9dbf924c251801202079b58b8bfa4c [file] [log] [blame]
#!/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
from file_system import FileNotFoundError, StatInfo
from mock_file_system import MockFileSystem
from test_file_system import TestFileSystem
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 MockFileSystemTest(unittest.TestCase):
def testCheckAndReset(self):
fs = MockFileSystem(TestFileSystem(deepcopy(_TEST_DATA)))
self.assertTrue(*fs.CheckAndReset())
self.assertFalse(*fs.CheckAndReset(read_count=1))
self.assertFalse(*fs.CheckAndReset(stat_count=1))
future = fs.ReadSingle('apps/')
self.assertTrue(*fs.CheckAndReset(read_count=1))
future.Get()
self.assertTrue(*fs.CheckAndReset(read_resolve_count=1))
self.assertFalse(*fs.CheckAndReset(read_count=1))
self.assertTrue(*fs.CheckAndReset())
future = fs.ReadSingle('apps/')
self.assertFalse(*fs.CheckAndReset(read_count=2))
future.Get()
self.assertFalse(*fs.CheckAndReset(read_resolve_count=2))
fs.ReadSingle('extensions/').Get()
fs.ReadSingle('extensions/').Get()
self.assertTrue(*fs.CheckAndReset(read_count=2, read_resolve_count=2))
self.assertFalse(*fs.CheckAndReset(read_count=2, read_resolve_count=2))
self.assertTrue(*fs.CheckAndReset())
fs.ReadSingle('404.html').Get()
self.assertTrue(*fs.CheckAndReset(read_count=1, read_resolve_count=1))
future = fs.Read(['notfound.html', 'apps/'])
self.assertTrue(*fs.CheckAndReset(read_count=1))
self.assertRaises(FileNotFoundError, future.Get)
self.assertTrue(*fs.CheckAndReset(read_resolve_count=0))
fs.Stat('404.html')
fs.Stat('404.html')
fs.Stat('apps/')
self.assertFalse(*fs.CheckAndReset(stat_count=42))
self.assertFalse(*fs.CheckAndReset(stat_count=42))
self.assertTrue(*fs.CheckAndReset())
fs.ReadSingle('404.html').Get()
fs.Stat('404.html')
fs.Stat('apps/')
self.assertTrue(
*fs.CheckAndReset(read_count=1, read_resolve_count=1, stat_count=2))
self.assertTrue(*fs.CheckAndReset())
def testUpdates(self):
fs = MockFileSystem(TestFileSystem(deepcopy(_TEST_DATA)))
self.assertEqual(StatInfo('0', child_versions={
'404.html': '0',
'apps/': '0',
'extensions/': '0'
}), fs.Stat(''))
self.assertEqual(StatInfo('0'), fs.Stat('404.html'))
self.assertEqual(StatInfo('0', child_versions={
'a11y.html': '0',
'about_apps.html': '0',
'fakedir/': '0',
}), fs.Stat('apps/'))
self.assertEqual('404.html contents', fs.ReadSingle('404.html').Get())
fs.Update({
'404.html': 'New version!'
})
self.assertEqual(StatInfo('1', child_versions={
'404.html': '1',
'apps/': '0',
'extensions/': '0'
}), fs.Stat(''))
self.assertEqual(StatInfo('1'), fs.Stat('404.html'))
self.assertEqual(StatInfo('0', child_versions={
'a11y.html': '0',
'about_apps.html': '0',
'fakedir/': '0',
}), fs.Stat('apps/'))
self.assertEqual('New version!', fs.ReadSingle('404.html').Get())
fs.Update({
'404.html': 'Newer version!',
'apps': {
'fakedir': {
'file.html': 'yo'
}
}
})
self.assertEqual(StatInfo('2', child_versions={
'404.html': '2',
'apps/': '2',
'extensions/': '0'
}), fs.Stat(''))
self.assertEqual(StatInfo('2'), fs.Stat('404.html'))
self.assertEqual(StatInfo('2', child_versions={
'a11y.html': '0',
'about_apps.html': '0',
'fakedir/': '2',
}), fs.Stat('apps/'))
self.assertEqual(StatInfo('0'), fs.Stat('apps/a11y.html'))
self.assertEqual(StatInfo('2', child_versions={
'file.html': '2'
}), fs.Stat('apps/fakedir/'))
self.assertEqual(StatInfo('2'), fs.Stat('apps/fakedir/file.html'))
self.assertEqual(StatInfo('0', child_versions={
'activeTab.html': '0',
'alarms.html': '0'
}), fs.Stat('extensions/'))
self.assertEqual('Newer version!', fs.ReadSingle('404.html').Get())
self.assertEqual('yo', fs.ReadSingle('apps/fakedir/file.html').Get())
if __name__ == '__main__':
unittest.main()