test_file_system_test.py revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
1#!/usr/bin/env python 2# Copyright (c) 2012 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 6from copy import deepcopy 7from file_system import FileNotFoundError, StatInfo 8from test_file_system import TestFileSystem, _MoveTo 9import unittest 10 11 12_TEST_DATA = { 13 '404.html': '404.html contents', 14 'apps': { 15 'a11y.html': 'a11y.html contents', 16 'about_apps.html': 'about_apps.html contents', 17 'fakedir': { 18 'file.html': 'file.html contents' 19 } 20 }, 21 'extensions': { 22 'activeTab.html': 'activeTab.html contents', 23 'alarms.html': 'alarms.html contents' 24 } 25} 26 27 28def _Get(fn): 29 '''Returns a function which calls Future.Get on the result of |fn|. 30 ''' 31 return lambda *args: fn(*args).Get() 32 33 34class TestFileSystemTest(unittest.TestCase): 35 def testEmptyFileSystem(self): 36 self._TestMetasyntacticPaths(TestFileSystem({})) 37 38 def testNonemptyFileNotFoundErrors(self): 39 fs = TestFileSystem(deepcopy(_TEST_DATA)) 40 self._TestMetasyntacticPaths(fs) 41 self.assertRaises(FileNotFoundError, _Get(fs.Read), ['404.html/']) 42 self.assertRaises(FileNotFoundError, _Get(fs.Read), ['apps/foo/']) 43 self.assertRaises(FileNotFoundError, _Get(fs.Read), ['apps/foo.html']) 44 self.assertRaises(FileNotFoundError, _Get(fs.Read), ['apps/foo.html']) 45 self.assertRaises(FileNotFoundError, _Get(fs.Read), ['apps/foo/', 46 'apps/foo.html']) 47 self.assertRaises(FileNotFoundError, _Get(fs.Read), ['apps/foo/', 48 'apps/a11y.html']) 49 50 def _TestMetasyntacticPaths(self, fs): 51 self.assertRaises(FileNotFoundError, _Get(fs.Read), ['foo']) 52 self.assertRaises(FileNotFoundError, _Get(fs.Read), ['bar/']) 53 self.assertRaises(FileNotFoundError, _Get(fs.Read), ['bar/baz']) 54 self.assertRaises(FileNotFoundError, _Get(fs.Read), ['foo', 55 'bar/', 56 'bar/baz']) 57 self.assertRaises(FileNotFoundError, fs.Stat, 'foo') 58 self.assertRaises(FileNotFoundError, fs.Stat, 'bar/') 59 self.assertRaises(FileNotFoundError, fs.Stat, 'bar/baz') 60 61 def testNonemptySuccess(self): 62 fs = TestFileSystem(deepcopy(_TEST_DATA)) 63 self.assertEqual('404.html contents', fs.ReadSingle('404.html').Get()) 64 self.assertEqual('404.html contents', fs.ReadSingle('/404.html').Get()) 65 self.assertEqual('a11y.html contents', 66 fs.ReadSingle('apps/a11y.html').Get()) 67 self.assertEqual(['404.html', 'apps/', 'extensions/'], 68 sorted(fs.ReadSingle('/').Get())) 69 self.assertEqual(['a11y.html', 'about_apps.html', 'fakedir/'], 70 sorted(fs.ReadSingle('apps/').Get())) 71 self.assertEqual(['a11y.html', 'about_apps.html', 'fakedir/'], 72 sorted(fs.ReadSingle('/apps/').Get())) 73 74 def testReadFiles(self): 75 fs = TestFileSystem(deepcopy(_TEST_DATA)) 76 self.assertEqual('404.html contents', 77 fs.ReadSingle('404.html').Get()) 78 self.assertEqual('404.html contents', 79 fs.ReadSingle('/404.html').Get()) 80 self.assertEqual('a11y.html contents', 81 fs.ReadSingle('apps/a11y.html').Get()) 82 self.assertEqual('a11y.html contents', 83 fs.ReadSingle('/apps/a11y.html').Get()) 84 self.assertEqual('file.html contents', 85 fs.ReadSingle('apps/fakedir/file.html').Get()) 86 self.assertEqual('file.html contents', 87 fs.ReadSingle('/apps/fakedir/file.html').Get()) 88 89 def testReadDirs(self): 90 fs = TestFileSystem(deepcopy(_TEST_DATA)) 91 self.assertEqual(['404.html', 'apps/', 'extensions/'], 92 sorted(fs.ReadSingle('/').Get())) 93 self.assertEqual(['a11y.html', 'about_apps.html', 'fakedir/'], 94 sorted(fs.ReadSingle('/apps/').Get())) 95 self.assertEqual(['a11y.html', 'about_apps.html', 'fakedir/'], 96 sorted(fs.ReadSingle('apps/').Get())) 97 self.assertEqual(['file.html'], fs.ReadSingle('/apps/fakedir/').Get()) 98 self.assertEqual(['file.html'], fs.ReadSingle('apps/fakedir/').Get()) 99 100 def testStat(self): 101 fs = TestFileSystem(deepcopy(_TEST_DATA)) 102 self.assertRaises(FileNotFoundError, fs.Stat, 'foo') 103 self.assertRaises(FileNotFoundError, fs.Stat, '404.html/') 104 self.assertEquals(StatInfo('0'), fs.Stat('404.html')) 105 self.assertEquals(StatInfo('0', child_versions={ 106 'activeTab.html': '0', 107 'alarms.html': '0', 108 }), fs.Stat('extensions/')) 109 110 fs.IncrementStat() 111 self.assertEquals(StatInfo('1'), fs.Stat('404.html')) 112 self.assertEquals(StatInfo('1', child_versions={ 113 'activeTab.html': '1', 114 'alarms.html': '1', 115 }), fs.Stat('extensions/')) 116 117 fs.IncrementStat(path='404.html') 118 self.assertEquals(StatInfo('2'), fs.Stat('404.html')) 119 self.assertEquals(StatInfo('1', child_versions={ 120 'activeTab.html': '1', 121 'alarms.html': '1', 122 }), fs.Stat('extensions/')) 123 124 fs.IncrementStat() 125 self.assertEquals(StatInfo('3'), fs.Stat('404.html')) 126 self.assertEquals(StatInfo('2', child_versions={ 127 'activeTab.html': '2', 128 'alarms.html': '2', 129 }), fs.Stat('extensions/')) 130 131 fs.IncrementStat(path='extensions/') 132 self.assertEquals(StatInfo('3'), fs.Stat('404.html')) 133 self.assertEquals(StatInfo('3', child_versions={ 134 'activeTab.html': '2', 135 'alarms.html': '2', 136 }), fs.Stat('extensions/')) 137 138 fs.IncrementStat(path='extensions/alarms.html') 139 self.assertEquals(StatInfo('3'), fs.Stat('404.html')) 140 self.assertEquals(StatInfo('3', child_versions={ 141 'activeTab.html': '2', 142 'alarms.html': '3', 143 }), fs.Stat('extensions/')) 144 145 def testMoveTo(self): 146 self.assertEqual({'foo': {'a': 'b', 'c': 'd'}}, 147 _MoveTo('foo', {'a': 'b', 'c': 'd'})) 148 self.assertEqual({'foo': {'bar': {'a': 'b', 'c': 'd'}}}, 149 _MoveTo('foo/bar', {'a': 'b', 'c': 'd'})) 150 self.assertEqual({'foo': {'bar': {'baz': {'a': 'b'}}}}, 151 _MoveTo('foo/bar/baz', {'a': 'b'})) 152 153 154if __name__ == '__main__': 155 unittest.main() 156