Home | History | Annotate | Download | only in tests
      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