Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

[1.2.X] GeoDjango test suite housekeeping. Moved data into fixtures f…

…or `relatedapp` and `distapp` tests, and made both use Django's `TestCase`; moved functionality out of `GeoDjangoTestSuiteRunner` to allow future re-use in `runtests.py` (refs #10420); compressed test app fixtures and cleaned up imports.

Backport of r14776 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14812 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit d54d7a52a959611124a47b47864ca34f154d1853 1 parent 65b26b3
Justin Bronn jbronn authored
165 django/contrib/gis/tests/__init__.py
View
@@ -1,14 +1,14 @@
-import sys
import unittest
from django.conf import settings
-from django.db.models import get_app
from django.test.simple import build_suite, DjangoTestSuiteRunner
+
def run_tests(*args, **kwargs):
from django.test.simple import run_tests as base_run_tests
return base_run_tests(*args, **kwargs)
+
def run_gis_tests(test_labels, verbosity=1, interactive=True, failfast=False, extra_tests=None):
import warnings
warnings.warn(
@@ -18,94 +18,121 @@ def run_gis_tests(test_labels, verbosity=1, interactive=True, failfast=False, ex
test_runner = GeoDjangoTestSuiteRunner(verbosity=verbosity, interactive=interactive, failfast=failfast)
return test_runner.run_tests(test_labels, extra_tests=extra_tests)
-class GeoDjangoTestSuiteRunner(DjangoTestSuiteRunner):
- def setup_test_environment(self, **kwargs):
- super(GeoDjangoTestSuiteRunner, self).setup_test_environment(**kwargs)
+def geo_apps(namespace=True):
+ """
+ Returns a list of GeoDjango test applications that reside in
+ `django.contrib.gis.tests` that can be used with the current
+ database and the spatial libraries that are installed.
+ """
+ from django.db import connection
+ from django.contrib.gis.geos import GEOS_PREPARE
+ from django.contrib.gis.gdal import HAS_GDAL
- from django.db import connection
- from django.contrib.gis.geos import GEOS_PREPARE
- from django.contrib.gis.gdal import HAS_GDAL
+ apps = ['geoapp', 'relatedapp']
- # Getting and storing the original values of INSTALLED_APPS and
- # the ROOT_URLCONF.
- self.old_installed = getattr(settings, 'INSTALLED_APPS', None)
- self.old_root_urlconf = getattr(settings, 'ROOT_URLCONF', None)
- self.old_site_id = getattr(settings, 'SITE_ID', None)
+ # No distance queries on MySQL.
+ if not connection.ops.mysql:
+ apps.append('distapp')
+
+ # Test geography support with PostGIS 1.5+.
+ if connection.ops.postgis and connection.ops.geography:
+ apps.append('geogapp')
+
+ # The following GeoDjango test apps depend on GDAL support.
+ if HAS_GDAL:
+ # 3D apps use LayerMapping, which uses GDAL.
+ if connection.ops.postgis and GEOS_PREPARE:
+ apps.append('geo3d')
+
+ apps.append('layermap')
+
+ if namespace:
+ return ['django.contrib.gis.tests.%s' % app
+ for app in apps]
+ else:
+ return apps
+
+
+def geodjango_suite():
+ """
+ Returns a TestSuite consisting only of GeoDjango tests that can be run.
+ """
+ import sys
+ from django.db.models import get_app
+
+ suite = unittest.TestSuite()
+
+ # Adding the GEOS tests.
+ from django.contrib.gis.geos import tests as geos_tests
+ suite.addTest(geos_tests.suite())
- # Tests that require use of a spatial database (e.g., creation of models)
- self.geo_apps = ['geoapp', 'relatedapp']
- if connection.ops.postgis and connection.ops.geography:
- # Test geography support with PostGIS 1.5+.
- self.geo_apps.append('geogapp')
+ # Adding the measurment tests.
+ from django.contrib.gis.tests import test_measure
+ suite.addTest(test_measure.suite())
- if HAS_GDAL:
- # The following GeoDjango test apps depend on GDAL support.
- if not connection.ops.mysql:
- self.geo_apps.append('distapp')
+ # Adding GDAL tests, and any test suite that depends on GDAL, to the
+ # suite if GDAL is available.
+ from django.contrib.gis.gdal import HAS_GDAL
+ if HAS_GDAL:
+ from django.contrib.gis.gdal import tests as gdal_tests
+ suite.addTest(gdal_tests.suite())
- # 3D apps use LayerMapping, which uses GDAL.
- if connection.ops.postgis and GEOS_PREPARE:
- self.geo_apps.append('geo3d')
+ from django.contrib.gis.tests import test_spatialrefsys, test_geoforms
+ suite.addTest(test_spatialrefsys.suite())
+ suite.addTest(test_geoforms.suite())
+ else:
+ sys.stderr.write('GDAL not available - no tests requiring GDAL will be run.\n')
- self.geo_apps.append('layermap')
+ # Add GeoIP tests to the suite, if the library and data is available.
+ from django.contrib.gis.utils import HAS_GEOIP
+ if HAS_GEOIP and hasattr(settings, 'GEOIP_PATH'):
+ from django.contrib.gis.tests import test_geoip
+ 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)))
+
+ return suite
+
+
+class GeoDjangoTestSuiteRunner(DjangoTestSuiteRunner):
+
+ def setup_test_environment(self, **kwargs):
+ super(GeoDjangoTestSuiteRunner, self).setup_test_environment(**kwargs)
+
+ # Saving original values of INSTALLED_APPS, ROOT_URLCONF, and SITE_ID.
+ self.old_installed = getattr(settings, 'INSTALLED_APPS', None)
+ self.old_root_urlconf = getattr(settings, 'ROOT_URLCONF', '')
+ self.old_site_id = getattr(settings, 'SITE_ID', None)
# Constructing the new INSTALLED_APPS, and including applications
- # within the GeoDjango test namespace (`self.geo_apps`).
+ # within the GeoDjango test namespace.
new_installed = ['django.contrib.sites',
'django.contrib.sitemaps',
'django.contrib.gis',
]
- new_installed.extend(['django.contrib.gis.tests.%s' % app
- for app in self.geo_apps])
+
+ # Calling out to `geo_apps` to get GeoDjango applications supported
+ # for testing.
+ new_installed.extend(geo_apps())
settings.INSTALLED_APPS = new_installed
- # Setting the URLs.
- settings.ROOT_URLCONF = 'django.contrib.gis.tests.urls'
+ # SITE_ID needs to be set
settings.SITE_ID = 1
+ # ROOT_URLCONF needs to be set, else `AttributeErrors` are raised
+ # when TestCases are torn down that have `urls` defined.
+ settings.ROOT_URLCONF = ''
+
+
def teardown_test_environment(self, **kwargs):
super(GeoDjangoTestSuiteRunner, self).teardown_test_environment(**kwargs)
settings.INSTALLED_APPS = self.old_installed
settings.ROOT_URLCONF = self.old_root_urlconf
settings.SITE_ID = self.old_site_id
+
def build_suite(self, test_labels, extra_tests=None, **kwargs):
- """
- This method is overridden to construct a suite consisting only of tests
- for GeoDjango.
- """
- suite = unittest.TestSuite()
-
- # Adding the GEOS tests.
- from django.contrib.gis.geos import tests as geos_tests
- suite.addTest(geos_tests.suite())
-
- # Adding the measurment tests.
- from django.contrib.gis.tests import test_measure
- suite.addTest(test_measure.suite())
-
- # Adding GDAL tests, and any test suite that depends on GDAL, to the
- # suite if GDAL is available.
- from django.contrib.gis.gdal import HAS_GDAL
- if HAS_GDAL:
- from django.contrib.gis.gdal import tests as gdal_tests
- suite.addTest(gdal_tests.suite())
-
- from django.contrib.gis.tests import test_spatialrefsys, test_geoforms
- suite.addTest(test_spatialrefsys.suite())
- suite.addTest(test_geoforms.suite())
- else:
- sys.stderr.write('GDAL not available - no tests requiring GDAL will be run.\n')
-
- # Add GeoIP tests to the suite, if the library and data is available.
- from django.contrib.gis.utils import HAS_GEOIP
- if HAS_GEOIP and hasattr(settings, 'GEOIP_PATH'):
- from django.contrib.gis.tests import test_geoip
- suite.addTest(test_geoip.suite())
-
- # Finally, adding the suites for each of the GeoDjango test apps.
- for app_name in self.geo_apps:
- suite.addTest(build_suite(get_app(app_name)))
-
- return suite
+ return geodjango_suite()
36 django/contrib/gis/tests/distapp/data.py
View
@@ -1,36 +0,0 @@
-au_cities = (('Wollongong', 150.902, -34.4245),
- ('Shellharbour', 150.87, -34.5789),
- ('Thirroul', 150.924, -34.3147),
- ('Mittagong', 150.449, -34.4509),
- ('Batemans Bay', 150.175, -35.7082),
- ('Canberra', 144.963, -37.8143),
- ('Melbourne', 145.963, -37.8143),
- ('Sydney', 151.26071, -33.887034),
- ('Hobart', 147.33, -42.8827),
- ('Adelaide', 138.6, -34.9258),
- ('Hillsdale', 151.231341, -33.952685),
- )
-
-stx_cities = (('Downtown Houston', -95.363151, 29.763374),
- ('West University Place', -95.448601, 29.713803),
- ('Southside Place', -95.436920, 29.705777),
- ('Bellaire', -95.458732, 29.705614),
- ('Pearland', -95.287303, 29.563568),
- ('Galveston', -94.797489, 29.301336),
- ('Sealy', -96.156952, 29.780918),
- ('San Antonio', -98.493183, 29.424170),
- ('Saint Hedwig', -98.199820, 29.414197),
- )
-
-# Data from U.S. Census ZCTA cartographic boundary file for Texas (`zt48_d00.shp`).
-stx_zips = (('77002', 'POLYGON ((-95.365015 29.772327, -95.362415 29.772327, -95.360915 29.771827, -95.354615 29.771827, -95.351515 29.772527, -95.350915 29.765327, -95.351015 29.762436, -95.350115 29.760328, -95.347515 29.758528, -95.352315 29.753928, -95.356415 29.756328, -95.358215 29.754028, -95.360215 29.756328, -95.363415 29.757128, -95.364014 29.75638, -95.363415 29.753928, -95.360015 29.751828, -95.361815 29.749528, -95.362715 29.750028, -95.367516 29.744128, -95.369316 29.745128, -95.373916 29.744128, -95.380116 29.738028, -95.387916 29.727929, -95.388516 29.729629, -95.387916 29.732129, -95.382916 29.737428, -95.376616 29.742228, -95.372616 29.747228, -95.378601 29.750846, -95.378616 29.752028, -95.378616 29.754428, -95.376016 29.754528, -95.374616 29.759828, -95.373616 29.761128, -95.371916 29.763928, -95.372316 29.768727, -95.365884 29.76791, -95.366015 29.767127, -95.358715 29.765327, -95.358615 29.766327, -95.359115 29.767227, -95.360215 29.767027, -95.362783 29.768267, -95.365315 29.770527, -95.365015 29.772327))'),
- ('77005', 'POLYGON ((-95.447918 29.727275, -95.428017 29.728729, -95.421117 29.729029, -95.418617 29.727629, -95.418517 29.726429, -95.402117 29.726629, -95.402117 29.725729, -95.395316 29.725729, -95.391916 29.726229, -95.389716 29.725829, -95.396517 29.715429, -95.397517 29.715929, -95.400917 29.711429, -95.411417 29.715029, -95.418417 29.714729, -95.418317 29.70623, -95.440818 29.70593, -95.445018 29.70683, -95.446618 29.70763, -95.447418 29.71003, -95.447918 29.727275))'),
- ('77025', 'POLYGON ((-95.418317 29.70623, -95.414717 29.706129, -95.414617 29.70533, -95.418217 29.70533, -95.419817 29.69533, -95.419484 29.694196, -95.417166 29.690901, -95.414517 29.69433, -95.413317 29.69263, -95.412617 29.68973, -95.412817 29.68753, -95.414087 29.685055, -95.419165 29.685428, -95.421617 29.68513, -95.425717 29.67983, -95.425017 29.67923, -95.424517 29.67763, -95.427418 29.67763, -95.438018 29.664631, -95.436713 29.664411, -95.440118 29.662231, -95.439218 29.661031, -95.437718 29.660131, -95.435718 29.659731, -95.431818 29.660331, -95.441418 29.656631, -95.441318 29.656331, -95.441818 29.656131, -95.441718 29.659031, -95.441118 29.661031, -95.446718 29.656431, -95.446518 29.673431, -95.446918 29.69013, -95.447418 29.71003, -95.446618 29.70763, -95.445018 29.70683, -95.440818 29.70593, -95.418317 29.70623))'),
- ('77401', 'POLYGON ((-95.447918 29.727275, -95.447418 29.71003, -95.446918 29.69013, -95.454318 29.68893, -95.475819 29.68903, -95.475819 29.69113, -95.484419 29.69103, -95.484519 29.69903, -95.480419 29.70133, -95.480419 29.69833, -95.474119 29.69833, -95.474119 29.70453, -95.472719 29.71283, -95.468019 29.71293, -95.468219 29.720229, -95.464018 29.720229, -95.464118 29.724529, -95.463018 29.725929, -95.459818 29.726129, -95.459918 29.720329, -95.451418 29.720429, -95.451775 29.726303, -95.451318 29.727029, -95.447918 29.727275))'),
- )
-
-interstates = (('I-25', 'LINESTRING(-104.4780170766108 36.66698791870694, -104.4468522338495 36.79925409393386, -104.46212692626 36.9372149776075, -104.5126119783768 37.08163268820887, -104.5247764602161 37.29300499892048, -104.7084397427668 37.49150259925398, -104.8126599016282 37.69514285621863, -104.8452887035466 37.87613395659479, -104.7160169341003 38.05951763337799, -104.6165437927668 38.30432045855106, -104.6437227858174 38.53979986564737, -104.7596170387259 38.7322907594295, -104.8380078676822 38.89998460604341, -104.8501253693506 39.09980189213358, -104.8791648316464 39.24368776457503, -104.8635041274215 39.3785278162751, -104.8894471170052 39.5929228239605, -104.9721242843344 39.69528482419685, -105.0112104500356 39.7273080432394, -105.0010368577104 39.76677607811571, -104.981835619 39.81466504121967, -104.9858891550477 39.88806911250832, -104.9873548059578 39.98117234571016, -104.9766220487419 40.09796423450692, -104.9818565932953 40.36056530662884, -104.9912746373997 40.74904484447656)'),
- )
-
-stx_interstates = (('I-10', 'LINESTRING(924952.5 4220931.6,925065.3 4220931.6,929568.4 4221057.8)'),
- )
BIN  django/contrib/gis/tests/distapp/fixtures/initial_data.json.gz
View
Binary file not shown
39 django/contrib/gis/tests/distapp/tests.py
View
@@ -1,18 +1,17 @@
-import os, unittest
+import os
from decimal import Decimal
from django.db import connection
from django.db.models import Q
-from django.contrib.gis.gdal import DataSource
from django.contrib.gis.geos import GEOSGeometry, Point, LineString
from django.contrib.gis.measure import D # alias for Distance
from django.contrib.gis.tests.utils import oracle, postgis, spatialite, no_oracle, no_spatialite
+from django.test import TestCase
from models import AustraliaCity, Interstate, SouthTexasInterstate, \
SouthTexasCity, SouthTexasCityFt, CensusZipcode, SouthTexasZipcode
-from data import au_cities, interstates, stx_interstates, stx_cities, stx_zips
-class DistanceTest(unittest.TestCase):
+class DistanceTest(TestCase):
# A point we are testing distances with -- using a WGS84
# coordinate that'll be implicitly transormed to that to
@@ -28,37 +27,12 @@ def get_names(self, qs):
return cities
def test01_init(self):
- "Initialization of distance models."
-
- # Loading up the cities.
- def load_cities(city_model, data_tup):
- for name, x, y in data_tup:
- city_model(name=name, point=Point(x, y, srid=4326)).save()
-
- def load_interstates(imodel, data_tup):
- for name, wkt in data_tup:
- imodel(name=name, path=wkt).save()
-
- load_cities(SouthTexasCity, stx_cities)
- load_cities(SouthTexasCityFt, stx_cities)
- load_cities(AustraliaCity, au_cities)
-
+ "Test initialization of distance models."
self.assertEqual(9, SouthTexasCity.objects.count())
self.assertEqual(9, SouthTexasCityFt.objects.count())
self.assertEqual(11, AustraliaCity.objects.count())
-
- # Loading up the South Texas Zip Codes.
- for name, wkt in stx_zips:
- poly = GEOSGeometry(wkt, srid=4269)
- SouthTexasZipcode(name=name, poly=poly).save()
- CensusZipcode(name=name, poly=poly).save()
self.assertEqual(4, SouthTexasZipcode.objects.count())
self.assertEqual(4, CensusZipcode.objects.count())
-
- # Loading up the Interstates.
- load_interstates(Interstate, interstates)
- load_interstates(SouthTexasInterstate, stx_interstates)
-
self.assertEqual(1, Interstate.objects.count())
self.assertEqual(1, SouthTexasInterstate.objects.count())
@@ -382,8 +356,3 @@ def test09_measurement_null_fields(self):
z = SouthTexasZipcode.objects.distance(htown.point).area().get(name='78212')
self.assertEqual(None, z.distance)
self.assertEqual(None, z.area)
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(DistanceTest))
- return s
11 django/contrib/gis/tests/geo3d/tests.py
View
@@ -1,4 +1,6 @@
-import os, re, unittest
+import os
+import re
+from django.utils.unittest import TestCase
from django.contrib.gis.db.models import Union, Extent3D
from django.contrib.gis.geos import GEOSGeometry, Point, Polygon
from django.contrib.gis.utils import LayerMapping, LayerMapError
@@ -49,7 +51,7 @@ def gen_bbox():
bbox_3d = Polygon(tuple((x, y, z) for (x, y), z in zip(bbox_2d[0].coords, bbox_z)), srid=32140)
return bbox_2d, bbox_3d
-class Geo3DTest(unittest.TestCase):
+class Geo3DTest(TestCase):
"""
Only a subset of the PostGIS routines are 3D-enabled, and this TestCase
tries to test the features that can handle 3D and that are also
@@ -227,8 +229,3 @@ def test07_translate(self):
for ztrans in ztranslations:
for city in City3D.objects.translate(0, 0, ztrans):
self.assertEqual(city_dict[city.name][2] + ztrans, city.translate.z)
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(Geo3DTest))
- return s
97 django/contrib/gis/tests/geoapp/fixtures/initial_data.json
View
0 additions, 97 deletions not shown
BIN  django/contrib/gis/tests/geoapp/fixtures/initial_data.json.gz
View
Binary file not shown
23 django/contrib/gis/tests/geoapp/test_feeds.py
View
@@ -1,11 +1,12 @@
-import unittest
from xml.dom import minidom
+from django.test import TestCase
-from django.test import Client
from models import City
-class GeoFeedTest(unittest.TestCase):
- client = Client()
+
+class GeoFeedTest(TestCase):
+
+ urls = 'django.contrib.gis.tests.geoapp.urls'
def assertChildNodes(self, elem, expected):
"Taken from regressiontests/syndication/tests.py."
@@ -16,9 +17,9 @@ def assertChildNodes(self, elem, expected):
def test_geofeed_rss(self):
"Tests geographic feeds using GeoRSS over RSSv2."
# Uses `GEOSGeometry` in `item_geometry`
- doc1 = minidom.parseString(self.client.get('/geoapp/feeds/rss1/').content)
+ doc1 = minidom.parseString(self.client.get('/feeds/rss1/').content)
# Uses a 2-tuple in `item_geometry`
- doc2 = minidom.parseString(self.client.get('/geoapp/feeds/rss2/').content)
+ doc2 = minidom.parseString(self.client.get('/feeds/rss2/').content)
feed1, feed2 = doc1.firstChild, doc2.firstChild
# Making sure the box got added to the second GeoRSS feed.
@@ -41,8 +42,8 @@ def test_geofeed_rss(self):
def test_geofeed_atom(self):
"Testing geographic feeds using GeoRSS over Atom."
- doc1 = minidom.parseString(self.client.get('/geoapp/feeds/atom1/').content)
- doc2 = minidom.parseString(self.client.get('/geoapp/feeds/atom2/').content)
+ doc1 = minidom.parseString(self.client.get('/feeds/atom1/').content)
+ doc2 = minidom.parseString(self.client.get('/feeds/atom2/').content)
feed1, feed2 = doc1.firstChild, doc2.firstChild
# Making sure the box got added to the second GeoRSS feed.
@@ -60,7 +61,7 @@ def test_geofeed_atom(self):
def test_geofeed_w3c(self):
"Testing geographic feeds using W3C Geo."
- doc = minidom.parseString(self.client.get('/geoapp/feeds/w3cgeo1/').content)
+ doc = minidom.parseString(self.client.get('/feeds/w3cgeo1/').content)
feed = doc.firstChild
# Ensuring the geo namespace was added to the <feed> element.
self.assertEqual(feed.getAttribute(u'xmlns:geo'), u'http://www.w3.org/2003/01/geo/wgs84_pos#')
@@ -73,5 +74,5 @@ def test_geofeed_w3c(self):
self.assertChildNodes(item, ['title', 'link', 'description', 'guid', 'geo:lat', 'geo:lon'])
# Boxes and Polygons aren't allowed in W3C Geo feeds.
- self.assertRaises(ValueError, self.client.get, '/geoapp/feeds/w3cgeo2/') # Box in <channel>
- self.assertRaises(ValueError, self.client.get, '/geoapp/feeds/w3cgeo3/') # Polygons in <entry>
+ self.assertRaises(ValueError, self.client.get, '/feeds/w3cgeo2/') # Box in <channel>
+ self.assertRaises(ValueError, self.client.get, '/feeds/w3cgeo3/') # Polygons in <entry>
25 django/contrib/gis/tests/geoapp/test_sitemaps.py
View
@@ -1,11 +1,14 @@
-import unittest, zipfile, cStringIO
+import cStringIO
from xml.dom import minidom
+import zipfile
+from django.test import TestCase
-from django.test import Client
from models import City, Country
-class GeoSitemapTest(unittest.TestCase):
- client = Client()
+
+class GeoSitemapTest(TestCase):
+
+ urls = 'django.contrib.gis.tests.geoapp.urls'
def assertChildNodes(self, elem, expected):
"Taken from regressiontests/syndication/tests.py."
@@ -16,7 +19,7 @@ def assertChildNodes(self, elem, expected):
def test_geositemap_index(self):
"Tests geographic sitemap index."
# Getting the geo index.
- doc = minidom.parseString(self.client.get('/geoapp/sitemap.xml').content)
+ doc = minidom.parseString(self.client.get('/sitemap.xml').content)
index = doc.firstChild
self.assertEqual(index.getAttribute(u'xmlns'), u'http://www.sitemaps.org/schemas/sitemap/0.9')
self.assertEqual(3, len(index.getElementsByTagName('sitemap')))
@@ -24,13 +27,13 @@ def test_geositemap_index(self):
def test_geositemap_kml(self):
"Tests KML/KMZ geographic sitemaps."
for kml_type in ('kml', 'kmz'):
- doc = minidom.parseString(self.client.get('/geoapp/sitemaps/%s.xml' % kml_type).content)
+ doc = minidom.parseString(self.client.get('/sitemaps/%s.xml' % kml_type).content)
# Ensuring the right sitemaps namespaces are present.
urlset = doc.firstChild
self.assertEqual(urlset.getAttribute(u'xmlns'), u'http://www.sitemaps.org/schemas/sitemap/0.9')
self.assertEqual(urlset.getAttribute(u'xmlns:geo'), u'http://www.google.com/geo/schemas/sitemap/1.0')
-
+
urls = urlset.getElementsByTagName('url')
self.assertEqual(2, len(urls)) # Should only be 2 sitemaps.
for url in urls:
@@ -42,7 +45,7 @@ def test_geositemap_kml(self):
# Getting the relative URL since we don't have a real site.
kml_url = url.getElementsByTagName('loc')[0].childNodes[0].data.split('http://example.com')[1]
-
+
if kml_type == 'kml':
kml_doc = minidom.parseString(self.client.get(kml_url).content)
elif kml_type == 'kmz':
@@ -52,7 +55,7 @@ def test_geositemap_kml(self):
self.assertEqual(1, len(zf.filelist))
self.assertEqual('doc.kml', zf.filelist[0].filename)
kml_doc = minidom.parseString(zf.read('doc.kml'))
-
+
# Ensuring the correct number of placemarks are in the KML doc.
if 'city' in kml_url:
model = City
@@ -64,8 +67,8 @@ def test_geositemap_georss(self):
"Tests GeoRSS geographic sitemaps."
from feeds import feed_dict
- doc = minidom.parseString(self.client.get('/geoapp/sitemaps/georss.xml').content)
-
+ doc = minidom.parseString(self.client.get('/sitemaps/georss.xml').content)
+
# Ensuring the right sitemaps namespaces are present.
urlset = doc.firstChild
self.assertEqual(urlset.getAttribute(u'xmlns'), u'http://www.sitemaps.org/schemas/sitemap/0.9')
15 django/contrib/gis/tests/geoapp/tests.py
View
@@ -1,10 +1,11 @@
-import re, os, unittest
+import re
from django.db import connection
from django.contrib.gis import gdal
-from django.contrib.gis.geos import *
+from django.contrib.gis.geos import fromstr, GEOSGeometry, \
+ Point, LineString, LinearRing, Polygon, GeometryCollection
from django.contrib.gis.measure import Distance
from django.contrib.gis.tests.utils import \
- no_mysql, no_oracle, no_postgis, no_spatialite, \
+ no_mysql, no_oracle, no_spatialite, \
mysql, oracle, postgis, spatialite
from django.test import TestCase
@@ -732,11 +733,3 @@ def test29_force_rhr(self):
from test_feeds import GeoFeedTest
from test_regress import GeoRegressionTests
from test_sitemaps import GeoSitemapTest
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(GeoModelTest))
- s.addTest(unittest.makeSuite(GeoFeedTest))
- s.addTest(unittest.makeSuite(GeoSitemapTest))
- s.addTest(unittest.makeSuite(GeoRegressionTests))
- return s
8 django/contrib/gis/tests/layermap/tests.py
View
@@ -10,7 +10,7 @@
from models import City, County, CountyFeat, Interstate, ICity1, ICity2, State, city_mapping, co_mapping, cofeat_mapping, inter_mapping
-shp_path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', 'data'))
+shp_path = os.path.realpath(os.path.join(os.path.dirname(__file__), os.pardir, 'data'))
city_shp = os.path.join(shp_path, 'cities', 'cities.shp')
co_shp = os.path.join(shp_path, 'counties', 'counties.shp')
inter_shp = os.path.join(shp_path, 'interstates', 'interstates.shp')
@@ -265,8 +265,4 @@ def test06_model_inheritance(self):
self.assertEqual(6, ICity1.objects.count())
self.assertEqual(3, ICity2.objects.count())
-
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(LayerMapTest))
- return s
+
BIN  django/contrib/gis/tests/relatedapp/fixtures/initial_data.json.gz
View
Binary file not shown
87 django/contrib/gis/tests/relatedapp/tests.py
View
@@ -1,23 +1,13 @@
-import os, unittest
-from django.contrib.gis.geos import *
+from django.test import TestCase
+
+from django.contrib.gis.geos import GEOSGeometry, Point, MultiPoint
from django.contrib.gis.db.models import Collect, Count, Extent, F, Union
from django.contrib.gis.geometry.backend import Geometry
-from django.contrib.gis.tests.utils import mysql, oracle, postgis, spatialite, no_mysql, no_oracle, no_spatialite
-from django.conf import settings
-from models import City, Location, DirectoryEntry, Parcel, Book, Author, Article
-
-cities = (('Aurora', 'TX', -97.516111, 33.058333),
- ('Roswell', 'NM', -104.528056, 33.387222),
- ('Kecksburg', 'PA', -79.460734, 40.18476),
- )
+from django.contrib.gis.tests.utils import mysql, oracle, no_mysql, no_oracle, no_spatialite
-class RelatedGeoModelTest(unittest.TestCase):
+from models import City, Location, DirectoryEntry, Parcel, Book, Author, Article
- def test01_setup(self):
- "Setting up for related model tests."
- for name, state, lon, lat in cities:
- loc = Location.objects.create(point=Point(lon, lat))
- c = City.objects.create(name=name, state=state, location=loc)
+class RelatedGeoModelTest(TestCase):
def test02_select_related(self):
"Testing `select_related` on geographic models (see #7126)."
@@ -25,6 +15,13 @@ def test02_select_related(self):
qs2 = City.objects.select_related()
qs3 = City.objects.select_related('location')
+ # Reference data for what's in the fixtures.
+ cities = (
+ ('Aurora', 'TX', -97.516111, 33.058333),
+ ('Roswell', 'NM', -104.528056, 33.387222),
+ ('Kecksburg', 'PA', -79.460734, 40.18476),
+ )
+
for qs in (qs1, qs2, qs3):
for ref, c in zip(cities, qs):
nm, st, lon, lat = ref
@@ -63,11 +60,11 @@ def test04a_related_extent_aggregate(self):
# This combines the Extent and Union aggregates into one query
aggs = City.objects.aggregate(Extent('location__point'))
- # One for all locations, one that excludes Roswell.
- all_extent = (-104.528060913086, 33.0583305358887,-79.4607315063477, 40.1847610473633)
- txpa_extent = (-97.51611328125, 33.0583305358887,-79.4607315063477, 40.1847610473633)
+ # One for all locations, one that excludes New Mexico (Roswell).
+ all_extent = (-104.528056, 29.763374, -79.460734, 40.18476)
+ txpa_extent = (-97.516111, 29.763374, -79.460734, 40.18476)
e1 = City.objects.extent(field_name='location__point')
- e2 = City.objects.exclude(name='Roswell').extent(field_name='location__point')
+ e2 = City.objects.exclude(state='NM').extent(field_name='location__point')
e3 = aggs['location__point__extent']
# The tolerance value is to four decimal places because of differences
@@ -83,10 +80,12 @@ def test04b_related_union_aggregate(self):
aggs = City.objects.aggregate(Union('location__point'))
# These are the points that are components of the aggregate geographic
- # union that is returned.
+ # union that is returned. Each point # corresponds to City PK.
p1 = Point(-104.528056, 33.387222)
p2 = Point(-97.516111, 33.058333)
p3 = Point(-79.460734, 40.18476)
+ p4 = Point(-96.801611, 32.782057)
+ p5 = Point(-95.363151, 29.763374)
# Creating the reference union geometry depending on the spatial backend,
# as Oracle will have a different internal ordering of the component
@@ -94,14 +93,15 @@ def test04b_related_union_aggregate(self):
# query that includes limiting information in the WHERE clause (in other
# words a `.filter()` precedes the call to `.unionagg()`).
if oracle:
- ref_u1 = MultiPoint(p3, p1, p2, srid=4326)
+ ref_u1 = MultiPoint(p4, p5, p3, p1, p2, srid=4326)
ref_u2 = MultiPoint(p3, p2, srid=4326)
else:
- ref_u1 = MultiPoint(p1, p2, p3, srid=4326)
+ # Looks like PostGIS points by longitude value.
+ ref_u1 = MultiPoint(p1, p2, p4, p5, p3, srid=4326)
ref_u2 = MultiPoint(p2, p3, srid=4326)
u1 = City.objects.unionagg(field_name='location__point')
- u2 = City.objects.exclude(name='Roswell').unionagg(field_name='location__point')
+ u2 = City.objects.exclude(name__in=('Roswell', 'Houston', 'Dallas', 'Fort Worth')).unionagg(field_name='location__point')
u3 = aggs['location__point__union']
self.assertEqual(ref_u1, u1)
@@ -187,17 +187,10 @@ def test08_defer_only(self):
def test09_pk_relations(self):
"Ensuring correct primary key column is selected across relations. See #10757."
- # Adding two more cities, but this time making sure that their location
- # ID values do not match their City ID values.
- loc1 = Location.objects.create(point='POINT (-95.363151 29.763374)')
- loc2 = Location.objects.create(point='POINT (-96.801611 32.782057)')
- dallas = City.objects.create(name='Dallas', state='TX', location=loc2)
- houston = City.objects.create(name='Houston', state='TX', location=loc1)
-
# The expected ID values -- notice the last two location IDs
- # are out of order. We want to make sure that the related
- # location ID column is selected instead of ID column for
- # the city.
+ # are out of order. Dallas and Houston have location IDs that differ
+ # from their PKs -- this is done to ensure that the related location
+ # ID column is selected instead of ID column for the city.
city_ids = (1, 2, 3, 4, 5)
loc_ids = (1, 2, 3, 5, 4)
ids_qs = City.objects.order_by('id').values('id', 'location__id')
@@ -232,10 +225,8 @@ def test11_geoquery_pickle(self):
@no_oracle
def test12a_count(self):
"Testing `Count` aggregate use with the `GeoManager` on geo-fields."
- # Creating a new City, 'Fort Worth', that uses the same location
- # as Dallas.
+ # The City, 'Fort Worth' uses the same location as Dallas.
dallas = City.objects.get(name='Dallas')
- ftworth = City.objects.create(name='Fort Worth', state='TX', location=dallas.location)
# Count annotation should be 2 for the Dallas location now.
loc = Location.objects.annotate(num_cities=Count('city')).get(id=dallas.location.id)
@@ -243,18 +234,9 @@ def test12a_count(self):
def test12b_count(self):
"Testing `Count` aggregate use with the `GeoManager` on non geo-fields. See #11087."
- # Creating some data for the Book/Author non-geo models that
- # use GeoManager. See #11087.
- tp = Author.objects.create(name='Trevor Paglen')
- Book.objects.create(title='Torture Taxi', author=tp)
- Book.objects.create(title='I Could Tell You But Then You Would Have to be Destroyed by Me', author=tp)
- Book.objects.create(title='Blank Spots on the Map', author=tp)
- wp = Author.objects.create(name='William Patry')
- Book.objects.create(title='Patry on Copyright', author=wp)
-
# Should only be one author (Trevor Paglen) returned by this query, and
- # the annotation should have 3 for the number of books. Also testing
- # with a `GeoValuesQuerySet` (see #11489).
+ # the annotation should have 3 for the number of books, see #11087.
+ # Also testing with a `GeoValuesQuerySet`, see #11489.
qs = Author.objects.annotate(num_books=Count('books')).filter(num_books__gt=1)
vqs = Author.objects.values('name').annotate(num_books=Count('books')).filter(num_books__gt=1)
self.assertEqual(1, len(qs))
@@ -280,7 +262,7 @@ def test14_collect(self):
# SELECT AsText(ST_Collect("relatedapp_location"."point")) FROM "relatedapp_city" LEFT OUTER JOIN
# "relatedapp_location" ON ("relatedapp_city"."location_id" = "relatedapp_location"."id")
# WHERE "relatedapp_city"."state" = 'TX';
- ref_geom = fromstr('MULTIPOINT(-97.516111 33.058333,-96.801611 32.782057,-95.363151 29.763374,-96.801611 32.782057)')
+ ref_geom = GEOSGeometry('MULTIPOINT(-97.516111 33.058333,-96.801611 32.782057,-95.363151 29.763374,-96.801611 32.782057)')
c1 = City.objects.filter(state='TX').collect(field_name='location__point')
c2 = City.objects.filter(state='TX').aggregate(Collect('location__point'))['location__point__collect']
@@ -298,10 +280,5 @@ def test15_invalid_select_related(self):
# keyword. The TypeError is swallowed if QuerySet is actually
# evaluated as list generation swallows TypeError in CPython.
sql = str(qs.query)
-
- # TODO: Related tests for KML, GML, and distance lookups.
-def suite():
- s = unittest.TestSuite()
- s.addTest(unittest.makeSuite(RelatedGeoModelTest))
- return s
+ # TODO: Related tests for KML, GML, and distance lookups.
6 django/contrib/gis/tests/urls.py
View
@@ -1,6 +0,0 @@
-from django.conf.urls.defaults import *
-
-urlpatterns = patterns('',
- (r'^geoapp/', include('django.contrib.gis.tests.geoapp.urls')),
- )
-
Please sign in to comment.
Something went wrong with that request. Please try again.