[mapserver-commits] r7205 - in trunk/mapserver/mapscript/python: . tests/cases

svn at osgeo.org svn at osgeo.org
Sat Dec 22 04:14:02 EST 2007


Author: unicoletti
Date: 2007-12-22 04:13:59 -0500 (Sat, 22 Dec 2007)
New Revision: 7205

Added:
   trunk/mapserver/mapscript/python/tests/cases/parentreference.py
Modified:
   trunk/mapserver/mapscript/python/pymodule.i
   trunk/mapserver/mapscript/python/tests/cases/refcount.py
Log:
#2442: implementation of RFC24, item 3.2

Modified: trunk/mapserver/mapscript/python/pymodule.i
===================================================================
--- trunk/mapserver/mapscript/python/pymodule.i	2007-12-21 22:48:08 UTC (rev 7204)
+++ trunk/mapserver/mapscript/python/pymodule.i	2007-12-22 09:13:59 UTC (rev 7205)
@@ -156,5 +156,55 @@
 MapServerChildError = _mapscript.MapServerChildError
 %}
 
+%feature("pythonappend") layerObj %{if args and len(args)!=0:
+		self.p_map=args[0]
+	else:
+		self.p_map=None%}
 
+%feature("pythonappend") classObj %{if args and len(args)!=0:
+		self.p_layer=args[0]
+	else:
+		self.p_layer=None%}
 
+%feature("shadow") insertClass %{
+	def insertClass(*args):
+        actualIndex=$action(*args)
+        args[1].p_layer=args[0]
+        return actualIndex%}
+
+%feature("shadow") getClass %{
+	def getClass(*args):
+		clazz = $action(*args)
+		if clazz:
+			if args and len(args)!=0:
+				clazz.p_layer=args[0]
+			else:
+				clazz.p_layer=None
+		return clazz%}
+
+%feature("shadow") insertLayer %{
+	def insertLayer(*args):
+        actualIndex=$action(*args)
+        args[1].p_map=args[0]
+        return actualIndex%}
+
+%feature("shadow") getLayer %{
+	def getLayer(*args):
+		layer = $action(*args)
+		if layer:
+			if args and len(args)!=0:
+				layer.p_map=args[0]
+			else:
+				layer.p_map=None
+		return layer%}
+
+%feature("shadow") getLayerByName %{
+	def getLayerByName(*args):
+		layer = $action(*args)
+		if layer:
+			if args and len(args)!=0:
+				layer.p_map=args[0]
+			else:
+				layer.p_map=None
+		return layer%}
+

Added: trunk/mapserver/mapscript/python/tests/cases/parentreference.py
===================================================================
--- trunk/mapserver/mapscript/python/tests/cases/parentreference.py	                        (rev 0)
+++ trunk/mapserver/mapscript/python/tests/cases/parentreference.py	2007-12-22 09:13:59 UTC (rev 7205)
@@ -0,0 +1,131 @@
+# $Id: refcount.py 6521 2007-08-08 20:39:17Z hobu $
+#
+# Project:  MapServer
+# Purpose:  xUnit style Python mapscript tests of Map
+# Author:   Umberto Nicoletti, unicoletti at prometeo.it
+#
+# ===========================================================================
+# Copyright (c) 2004, Sean Gillies
+# 
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+# ===========================================================================
+#
+# Execute this module as a script from mapserver/mapscript/python
+#
+#     python tests/cases/refcount.py -v
+#
+# ===========================================================================
+
+import os, sys, gc
+import unittest
+
+# the testing module helps us import the pre-installed mapscript
+from testing import mapscript, MapTestCase, TESTMAPFILE
+
+# ===========================================================================
+# Test begins now
+
+class ParentReferenceTestCase(unittest.TestCase):
+
+    def initMap(self):
+		self.map=mapscript.mapObj(TESTMAPFILE)
+
+    def testGetLayerObj(self):
+    	self.initMap()
+    	layer = self.map.getLayer(1)
+    	self.map=None
+    	assert str(layer.p_map).find('mapscript.mapObj') != -1
+    	gc.collect()
+    	assert layer.map != None, layer.map
+
+    def testGetLayerObjByName(self):
+    	self.initMap()
+    	layer = self.map.getLayerByName('POLYGON')
+    	self.map=None
+    	assert str(layer.p_map).find('mapscript.mapObj') != -1
+    	gc.collect()
+    	assert layer.map != None, layer.map
+
+    def testLayerObj(self):
+    	self.initMap()
+    	layer = mapscript.layerObj(self.map)
+    	self.map=None
+    	assert str(layer.p_map).find('mapscript.mapObj') != -1
+    	gc.collect()
+    	assert layer.map != None, layer.map
+
+    def testInsertLayerObj(self):
+    	self.initMap()
+    	layer = mapscript.layerObj()
+    	self.map.insertLayer(layer)
+    	self.map=None
+    	assert str(layer.p_map).find('mapscript.mapObj') != -1
+    	gc.collect()
+    	assert layer.map != None, layer.map
+
+    def testGetClassObj(self):
+    	self.initMap()
+    	layer = self.map.getLayer(1)
+    	clazz = layer.getClass(0)
+    	self.map=None
+    	layer=None
+    	assert str(clazz.p_layer).find('mapscript.layerObj') != -1
+    	gc.collect()
+    	assert clazz.layer != None, clazz.layer
+
+    def testClassObj(self):
+    	self.initMap()
+    	layer = mapscript.layerObj(self.map)
+    	clazz = mapscript.classObj(layer)
+    	self.map=None
+    	layer=None
+    	assert str(clazz.p_layer).find('mapscript.layerObj') != -1
+    	gc.collect()
+    	assert clazz.layer != None, clazz.layer
+
+    def testInsertClassObj(self):
+    	self.initMap()
+    	layer = mapscript.layerObj()
+    	clazz = mapscript.classObj()
+    	layer.insertClass(clazz)
+    	self.map=None
+    	layer=None
+    	assert str(clazz.p_layer).find('mapscript.layerObj') != -1
+    	gc.collect()
+    	assert clazz.layer != None, clazz.layer
+
+    def testRemoveClassObj(self):
+    	self.initMap()
+    	layer = self.map.getLayer(1)
+    	clazz = layer.removeClass(0)
+    	if hasattr(clazz,'p_layer'):
+	    	assert clazz.p_layer == None, clazz.p_layer
+    	assert clazz.layer == None, clazz.layer
+    	self.initMap()
+    	position=self.map.getLayer(0).insertClass(clazz)
+    	assert position==0, position
+    	assert clazz.p_layer != None, clazz.p_layer
+    	assert clazz.layer != None, clazz.layer
+    	
+# ===========================================================================
+# Run the tests outside of the main suite
+
+if __name__ == '__main__':
+    unittest.main()
+    

Modified: trunk/mapserver/mapscript/python/tests/cases/refcount.py
===================================================================
--- trunk/mapserver/mapscript/python/tests/cases/refcount.py	2007-12-21 22:48:08 UTC (rev 7204)
+++ trunk/mapserver/mapscript/python/tests/cases/refcount.py	2007-12-22 09:13:59 UTC (rev 7205)
@@ -139,11 +139,12 @@
         index = self.map.insertLayer(layer,0)
         assert index == 0, index
 	self.map=None
-	assert layer.map == None, layer.map
+	assert layer.map != None, layer.map
 	exception=None
 	try:
 		layer.open()
 	except:
+		# must fail because the new layer is missing information
 		assert True
 		exception=True
 	if not exception:



More information about the mapserver-commits mailing list