Django

Code

Show
Ignore:
Timestamp:
06/17/07 17:18:54 (2 years ago)
Author:
clong
Message:

per-object-permissions: Merged to trunk [5486] NOTE: Not fully tested, will be working on this over the next few weeks.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/per-object-permissions/tests/runtests.py

    r4242 r5488  
    44import unittest 
    55 
     6import django.contrib as contrib 
     7CONTRIB_DIR_NAME = 'django.contrib' 
    68MODEL_TESTS_DIR_NAME = 'modeltests' 
    79REGRESSION_TESTS_DIR_NAME = 'regressiontests' 
     10 
    811TEST_DATABASE_NAME = 'django_test_db' 
    912TEST_TEMPLATE_DIR = 'templates' 
    1013 
     14CONTRIB_DIR = os.path.dirname(contrib.__file__) 
    1115MODEL_TEST_DIR = os.path.join(os.path.dirname(__file__), MODEL_TESTS_DIR_NAME) 
    1216REGRESSION_TEST_DIR = os.path.join(os.path.dirname(__file__), REGRESSION_TESTS_DIR_NAME) 
     
    2529def get_test_models(): 
    2630    models = [] 
    27     for loc, dirpath in (MODEL_TESTS_DIR_NAME, MODEL_TEST_DIR), (REGRESSION_TESTS_DIR_NAME, REGRESSION_TEST_DIR)
     31    for loc, dirpath in (MODEL_TESTS_DIR_NAME, MODEL_TEST_DIR), (REGRESSION_TESTS_DIR_NAME, REGRESSION_TEST_DIR), (CONTRIB_DIR_NAME, CONTRIB_DIR)
    2832        for f in os.listdir(dirpath): 
    2933            if f.startswith('__init__') or f.startswith('.') or f.startswith('sql') or f.startswith('invalid'): 
     
    3438def get_invalid_models(): 
    3539    models = [] 
    36     for loc, dirpath in (MODEL_TESTS_DIR_NAME, MODEL_TEST_DIR), (REGRESSION_TESTS_DIR_NAME, REGRESSION_TEST_DIR)
     40    for loc, dirpath in (MODEL_TESTS_DIR_NAME, MODEL_TEST_DIR), (REGRESSION_TESTS_DIR_NAME, REGRESSION_TEST_DIR), (CONTRIB_DIR_NAME, CONTRIB_DIR)
    3741        for f in os.listdir(dirpath): 
    3842            if f.startswith('__init__') or f.startswith('.') or f.startswith('sql'): 
     
    7882    old_template_dirs = settings.TEMPLATE_DIRS 
    7983    old_use_i18n = settings.USE_I18N 
     84    old_middleware_classes = settings.MIDDLEWARE_CLASSES 
    8085 
    81     # Redirect some settings for the duration of these tests 
     86    # Redirect some settings for the duration of these tests. 
    8287    settings.TEST_DATABASE_NAME = TEST_DATABASE_NAME 
    8388    settings.INSTALLED_APPS = ALWAYS_INSTALLED_APPS 
     
    8590    settings.TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), TEST_TEMPLATE_DIR),) 
    8691    settings.USE_I18N = True 
     92    settings.MIDDLEWARE_CLASSES = ( 
     93        'django.contrib.sessions.middleware.SessionMiddleware', 
     94        'django.contrib.auth.middleware.AuthenticationMiddleware', 
     95        'django.middleware.common.CommonMiddleware', 
     96    ) 
    8797 
    8898    # Load all the ALWAYS_INSTALLED_APPS. 
     
    92102    get_apps() 
    93103 
    94     # Load all the test model apps 
     104    # Load all the test model apps. 
    95105    test_models = [] 
    96106    for model_dir, model_name in get_test_models(): 
     
    104114                    print "Importing model %s" % model_name 
    105115                mod = load_app(model_label) 
    106                 settings.INSTALLED_APPS.append(model_label) 
    107                 test_models.append(mod) 
     116                if mod: 
     117                    if model_label not in settings.INSTALLED_APPS: 
     118                        settings.INSTALLED_APPS.append(model_label) 
     119                    test_models.append(mod) 
    108120        except Exception, e: 
    109121            sys.stderr.write("Error while importing %s:" % model_name + ''.join(traceback.format_exception(*sys.exc_info())[1:])) 
    110122            continue 
    111123 
    112     # Add tests for invalid models 
     124    # Add tests for invalid models. 
    113125    extra_tests = [] 
    114126    for model_dir, model_name in get_invalid_models(): 
     
    119131    # Run the test suite, including the extra validation tests. 
    120132    from django.test.simple import run_tests 
    121     run_tests(test_models, verbosity, extra_tests=extra_tests) 
     133    failures = run_tests(test_models, verbosity, extra_tests=extra_tests) 
     134    if failures: 
     135        sys.exit(failures) 
    122136 
    123     # Restore the old settings 
     137    # Restore the old settings. 
    124138    settings.INSTALLED_APPS = old_installed_apps 
    125139    settings.TESTS_DATABASE_NAME = old_test_database_name 
     
    127141    settings.TEMPLATE_DIRS = old_template_dirs 
    128142    settings.USE_I18N = old_use_i18n 
     143    settings.MIDDLEWARE_CLASSES = old_middleware_classes 
    129144 
    130145if __name__ == "__main__": 
     
    140155    if options.settings: 
    141156        os.environ['DJANGO_SETTINGS_MODULE'] = options.settings 
    142  
     157    elif "DJANGO_SETTINGS_MODULE" not in os.environ: 
     158        parser.error("DJANGO_SETTINGS_MODULE is not set in the environment. " 
     159                      "Set it or use --settings.") 
    143160    django_tests(int(options.verbosity), args)