Home | History | Annotate | Download | only in tests
      1 #!/usr/bin/python
      2 
      3 # Copyright 2014 Google Inc.
      4 #
      5 # Use of this source code is governed by a BSD-style license that can be
      6 # found in the LICENSE file.
      7 
      8 """
      9 Test generate_user_config.py.
     10 """
     11 
     12 import argparse
     13 import os
     14 import shutil
     15 import sys
     16 import tempfile
     17 import test_variables
     18 import unittest
     19 import utils
     20 
     21 sys.path.append(test_variables.GYP_GEN_DIR)
     22 
     23 from generate_user_config import generate_user_config as gen_config
     24 
     25 # Name of SkUserConfig file.
     26 USER_CONFIG_NAME = 'SkUserConfig-h.txt'
     27 MISSING_FILENAME = 'missing-filename.xxx'
     28 # Path to unchanging Dummy SkUserConfig file.
     29 FULL_DUMMY_PATH = os.path.join(os.path.dirname(__file__), 'inputs',
     30                                USER_CONFIG_NAME)
     31 REBASELINE_MSG = ('If you\'ve modified generate_user_config.py, run '
     32                   '"generate_user_config_tests.py --rebaseline" to rebaseline')
     33 
     34 def generate_dummy_user_config(original_sk_user_config,
     35                                require_sk_user_config, target_dir):
     36   # Add an arbitrary set of defines
     37   defines = [ 'SK_BUILD_FOR_ANDROID',
     38               'SK_BUILD_FOR_ANDROID_FRAMEWORK',
     39               'SK_SCALAR_IS_FLOAT',
     40               'foo',
     41               'bar' ]
     42   gen_config(original_sk_user_config=original_sk_user_config,
     43              require_sk_user_config=require_sk_user_config,
     44              target_dir=target_dir, ordered_set=defines)
     45 
     46 
     47 class GenUserConfigTest(unittest.TestCase):
     48 
     49   def test_missing_sk_user_config(self):
     50     tmp = tempfile.mkdtemp()
     51     original = os.path.join(tmp, MISSING_FILENAME)
     52     assert not os.path.exists(original)
     53 
     54 
     55     # With require_sk_user_config set to True, an AssertionError will be
     56     # thrown when original_sk_user_config is missing.
     57     with self.assertRaises(AssertionError):
     58       ordered_set = [ 'define' ]
     59       gen_config(original_sk_user_config=original,
     60                  require_sk_user_config=True,
     61                  target_dir=tmp, ordered_set=ordered_set)
     62 
     63     # With require_sk_user_config set to False, it is okay for
     64     # original_sk_user_config to be missing.
     65     generate_dummy_user_config(original_sk_user_config=original,
     66                                require_sk_user_config=False, target_dir=tmp)
     67     actual_name = os.path.join(tmp, MISSING_FILENAME)
     68     utils.compare_to_expectation(actual_name=actual_name,
     69                                  expectation_name=MISSING_FILENAME,
     70                                  assert_true=self.assertTrue,
     71                                  msg=REBASELINE_MSG)
     72 
     73     shutil.rmtree(tmp)
     74 
     75   def test_gen_config(self):
     76     tmp = tempfile.mkdtemp()
     77     generate_dummy_user_config(FULL_DUMMY_PATH, True, tmp)
     78     actual_name = os.path.join(tmp, USER_CONFIG_NAME)
     79     utils.compare_to_expectation(actual_name=actual_name,
     80                         expectation_name=USER_CONFIG_NAME,
     81                         assert_true=self.assertTrue, msg=REBASELINE_MSG)
     82     shutil.rmtree(tmp)
     83 
     84 
     85 def main():
     86   loader = unittest.TestLoader()
     87   suite = loader.loadTestsFromTestCase(GenUserConfigTest)
     88   results = unittest.TextTestRunner(verbosity=2).run(suite)
     89   print repr(results)
     90   if not results.wasSuccessful():
     91     raise Exception('failed one or more unittests')
     92 
     93 
     94 def rebaseline():
     95   generate_dummy_user_config(FULL_DUMMY_PATH, True, utils.EXPECTATIONS_DIR)
     96   generate_dummy_user_config(MISSING_FILENAME, False, utils.EXPECTATIONS_DIR)
     97 
     98 if __name__ == "__main__":
     99   parser = argparse.ArgumentParser()
    100   parser.add_argument('-r', '--rebaseline', help='Rebaseline expectations.',
    101                       action='store_true')
    102   args = parser.parse_args()
    103 
    104   if args.rebaseline:
    105     rebaseline()
    106   else:
    107     main()
    108 
    109