Author: jbronn
Date: 2010-12-21 17:43:04 -0600 (Tue, 21 Dec 2010)
New Revision: 15014

Modified:
   django/branches/releases/1.2.X/django/contrib/gis/tests/__init__.py
   django/branches/releases/1.2.X/tests/runtests.py
Log:
[1.2.X] Fixed #10420 -- GeoDjango tests are run as part of Django tests when 
using spatial database backends with `runtests.py`.

Backport of r15013 from trunk.

Modified: django/branches/releases/1.2.X/django/contrib/gis/tests/__init__.py
===================================================================
--- django/branches/releases/1.2.X/django/contrib/gis/tests/__init__.py 
2010-12-21 23:42:12 UTC (rev 15013)
+++ django/branches/releases/1.2.X/django/contrib/gis/tests/__init__.py 
2010-12-21 23:43:04 UTC (rev 15014)
@@ -19,7 +19,7 @@
     return test_runner.run_tests(test_labels, extra_tests=extra_tests)
 
 
-def geo_apps(namespace=True):
+def geo_apps(namespace=True, runtests=False):
     """
     Returns a list of GeoDjango test applications that reside in
     `django.contrib.gis.tests` that can be used with the current
@@ -47,14 +47,16 @@
 
         apps.append('layermap')
 
-    if namespace:
+    if runtests:
+        return [('django.contrib.gis.tests', app) for app in apps]
+    elif namespace:
         return ['django.contrib.gis.tests.%s' % app
                 for app in apps]
     else:
         return apps
 
 
-def geodjango_suite():
+def geodjango_suite(apps=True):
     """
     Returns a TestSuite consisting only of GeoDjango tests that can be run.
     """
@@ -91,8 +93,9 @@
         suite.addTest(test_geoip.suite())
 
     # Finally, adding the suites for each of the GeoDjango test apps.
-    for app_name in geo_apps(namespace=False):
-        suite.addTest(build_suite(get_app(app_name)))
+    if apps:
+        for app_name in geo_apps(namespace=False):
+            suite.addTest(build_suite(get_app(app_name)))
 
     return suite
 

Modified: django/branches/releases/1.2.X/tests/runtests.py
===================================================================
--- django/branches/releases/1.2.X/tests/runtests.py    2010-12-21 23:42:12 UTC 
(rev 15013)
+++ django/branches/releases/1.2.X/tests/runtests.py    2010-12-21 23:43:04 UTC 
(rev 15014)
@@ -30,6 +30,12 @@
     'django.contrib.admindocs',
 ]
 
+def geodjango(settings):
+    # All databases must have spatial backends to run GeoDjango tests.
+    spatial_dbs = [name for name, db_dict in settings.DATABASES.items()
+                   if db_dict['ENGINE'].startswith('django.contrib.gis')]
+    return len(spatial_dbs) == len(settings.DATABASES)
+
 def get_test_models():
     models = []
     for loc, dirpath in (MODEL_TESTS_DIR_NAME, MODEL_TEST_DIR), 
(REGRESSION_TESTS_DIR_NAME, REGRESSION_TEST_DIR), (CONTRIB_DIR_NAME, 
CONTRIB_DIR):
@@ -124,7 +130,15 @@
 
     # Load all the test model apps.
     test_labels_set = set([label.split('.')[0] for label in test_labels])
-    for model_dir, model_name in get_test_models():
+    test_models = get_test_models()
+
+    # If GeoDjango, then we'll want to add in the test applications
+    # that are a part of its test suite.
+    if geodjango(settings):
+        from django.contrib.gis.tests import geo_apps
+        test_models.extend(geo_apps(runtests=True))
+
+    for model_dir, model_name in test_models:
         model_label = '.'.join([model_dir, model_name])
         # if the model was named on the command line, or
         # no models were named (i.e., run all), import
@@ -162,6 +176,12 @@
             except ValueError:
                 pass
 
+    # If GeoDjango is used, add it's tests that aren't a part of
+    # an application (e.g., GEOS, GDAL, Distance objects).
+    if geodjango(settings):
+        from django.contrib.gis.tests import geodjango_suite
+        extra_tests.append(geodjango_suite(apps=False))
+
     # Run the test suite, including the extra validation tests.
     from django.test.utils import get_runner
     if not hasattr(settings, 'TEST_RUNNER'):

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-upda...@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to