1 #!/usr/bin/env python 2 # Copyright (c) 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 os 7 import sys 8 import unittest 9 10 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) 11 BUILD_TOOLS_DIR = os.path.dirname(SCRIPT_DIR) 12 13 sys.path.append(BUILD_TOOLS_DIR) 14 import verify_filelist 15 16 17 def Verify(platform, rules_contents, directory_list): 18 rules = verify_filelist.Rules('test', platform, rules_contents) 19 rules.VerifyDirectoryList(directory_list) 20 21 22 class VerifyFilelistTestCase(unittest.TestCase): 23 def testBasic(self): 24 rules = """\ 25 foo/file1 26 foo/file2 27 foo/file3 28 bar/baz/other 29 """ 30 dirlist = ['foo/file1', 'foo/file2', 'foo/file3', 'bar/baz/other'] 31 Verify('linux', rules, dirlist) 32 33 def testGlob(self): 34 rules = 'foo/*' 35 dirlist = ['foo/file1', 'foo/file2', 'foo/file3/and/subdir'] 36 Verify('linux', rules, dirlist) 37 38 def testPlatformVar(self): 39 rules = 'dir/${PLATFORM}/blah' 40 dirlist = ['dir/linux/blah'] 41 Verify('linux', rules, dirlist) 42 43 def testPlatformVarGlob(self): 44 rules = 'dir/${PLATFORM}/*' 45 dirlist = ['dir/linux/file1', 'dir/linux/file2'] 46 Verify('linux', rules, dirlist) 47 48 def testPlatformRule(self): 49 rules = """\ 50 [linux]dir/linux/only 51 all/platforms 52 """ 53 linux_dirlist = ['dir/linux/only', 'all/platforms'] 54 other_dirlist = ['all/platforms'] 55 Verify('linux', rules, linux_dirlist) 56 Verify('mac', rules, other_dirlist) 57 58 def testMultiPlatformRule(self): 59 rules = """\ 60 [linux,win]dir/no/macs 61 all/platforms 62 """ 63 nonmac_dirlist = ['dir/no/macs', 'all/platforms'] 64 mac_dirlist = ['all/platforms'] 65 Verify('linux', rules, nonmac_dirlist) 66 Verify('win', rules, nonmac_dirlist) 67 Verify('mac', rules, mac_dirlist) 68 69 def testPlatformRuleBadPlatform(self): 70 rules = '[frob]bad/platform' 71 self.assertRaises(verify_filelist.ParseException, Verify, 72 'linux', rules, []) 73 74 def testMissingFile(self): 75 rules = """\ 76 foo/file1 77 foo/missing 78 """ 79 dirlist = ['foo/file1'] 80 self.assertRaises(verify_filelist.VerifyException, Verify, 81 'linux', rules, dirlist) 82 83 def testExtraFile(self): 84 rules = 'foo/file1' 85 dirlist = ['foo/file1', 'foo/extra_file'] 86 self.assertRaises(verify_filelist.VerifyException, Verify, 87 'linux', rules, dirlist) 88 89 def testEmptyGlob(self): 90 rules = 'foo/*' 91 dirlist = ['foo'] # Directory existing is not enough! 92 self.assertRaises(verify_filelist.VerifyException, Verify, 93 'linux', rules, dirlist) 94 95 def testBadGlob(self): 96 rules = '*/foo/bar' 97 dirlist = [] 98 self.assertRaises(verify_filelist.ParseException, Verify, 99 'linux', rules, dirlist) 100 101 def testUnknownPlatform(self): 102 rules = 'foo' 103 dirlist = ['foo'] 104 for platform in ('linux', 'mac', 'win'): 105 Verify(platform, rules, dirlist) 106 self.assertRaises(verify_filelist.ParseException, Verify, 107 'foobar', rules, dirlist) 108 109 def testUnexpectedPlatformFile(self): 110 rules = '[mac,win]foo/file1' 111 dirlist = ['foo/file1'] 112 self.assertRaises(verify_filelist.VerifyException, Verify, 113 'linux', rules, dirlist) 114 115 def testWindowsPaths(self): 116 if os.path.sep != '/': 117 rules = 'foo/bar/baz' 118 dirlist = ['foo\\bar\\baz'] 119 Verify('win', rules, dirlist) 120 else: 121 rules = 'foo/bar/baz\\foo' 122 dirlist = ['foo/bar/baz\\foo'] 123 Verify('linux', rules, dirlist) 124 125 126 if __name__ == '__main__': 127 unittest.main() 128