1 #!/usr/bin/env python 2 # Copyright 2013 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 6 import unittest 7 8 from test_file_system import TestFileSystem 9 10 file_system = TestFileSystem({ 11 'file.txt': '', 12 'templates': { 13 'README': '', 14 'public': { 15 'apps': { 16 '404.html': '', 17 'a11y.html': '' 18 }, 19 'extensions': { 20 '404.html': '', 21 'cookies.html': '' 22 }, 23 'redirects.json': 'redirect' 24 }, 25 'json': { 26 'manifest.json': 'manifest' 27 } 28 } 29 }) 30 31 class FileSystemTest(unittest.TestCase): 32 def testWalk(self): 33 expected_files = [ 34 '^/file.txt', 35 'templates/README', 36 'templates/public/apps/404.html', 37 'templates/public/apps/a11y.html', 38 'templates/public/extensions/404.html', 39 'templates/public/extensions/cookies.html', 40 'templates/public/redirects.json', 41 'templates/json/manifest.json' 42 ] 43 44 expected_dirs = [ 45 '^/templates/', 46 'templates/public/', 47 'templates/public/apps/', 48 'templates/public/extensions/', 49 'templates/json/' 50 ] 51 52 all_files = [] 53 all_dirs = [] 54 for root, dirs, files in file_system.Walk(''): 55 if not root: root = '^' 56 all_files += [root + '/' + name for name in files] 57 all_dirs += [root + '/' + name for name in dirs] 58 59 self.assertEqual(sorted(expected_files), sorted(all_files)) 60 self.assertEqual(sorted(expected_dirs), sorted(all_dirs)) 61 62 def testWalkDepth(self): 63 all_dirs = [] 64 all_files = [] 65 for root, dirs, files in file_system.Walk('', depth=0): 66 all_dirs.extend(dirs) 67 all_files.extend(files) 68 self.assertEqual([], all_dirs) 69 self.assertEqual([], all_files) 70 71 for root, dirs, files in file_system.Walk('', depth=1): 72 all_dirs.extend(dirs) 73 all_files.extend(files) 74 self.assertEqual(['templates/'], all_dirs) 75 self.assertEqual(['file.txt'], all_files) 76 77 all_dirs = [] 78 all_files = [] 79 for root, dirs, files in file_system.Walk('', depth=2): 80 all_dirs.extend(dirs) 81 all_files.extend(files) 82 self.assertEqual(sorted(['templates/', 'public/', 'json/']), 83 sorted(all_dirs)) 84 self.assertEqual(sorted(['file.txt', 'README']), sorted(all_files)) 85 86 87 def testSubWalk(self): 88 expected_files = set([ 89 '/redirects.json', 90 'apps/404.html', 91 'apps/a11y.html', 92 'extensions/404.html', 93 'extensions/cookies.html' 94 ]) 95 96 all_files = set() 97 for root, dirs, files in file_system.Walk('templates/public/'): 98 all_files.update(root + '/' + name for name in files) 99 100 self.assertEqual(expected_files, all_files) 101 102 def testExists(self): 103 def exists(path): 104 return file_system.Exists(path).Get() 105 106 # Root directory. 107 self.assertTrue(exists('')) 108 109 # Directories (are not files). 110 self.assertFalse(exists('templates')) 111 self.assertTrue(exists('templates/')) 112 self.assertFalse(exists('templates/public')) 113 self.assertTrue(exists('templates/public/')) 114 self.assertFalse(exists('templates/public/apps')) 115 self.assertTrue(exists('templates/public/apps/')) 116 117 # Files (are not directories). 118 self.assertTrue(exists('file.txt')) 119 self.assertFalse(exists('file.txt/')) 120 self.assertTrue(exists('templates/README')) 121 self.assertFalse(exists('templates/README/')) 122 self.assertTrue(exists('templates/public/redirects.json')) 123 self.assertFalse(exists('templates/public/redirects.json/')) 124 self.assertTrue(exists('templates/public/apps/a11y.html')) 125 self.assertFalse(exists('templates/public/apps/a11y.html/')) 126 127 128 if __name__ == '__main__': 129 unittest.main() 130