Skip to content

Commit 2ac55ea

Browse files
committed
Add new getItemDefinition to layerObj SWIG bindings and include tests
1 parent 0260296 commit 2ac55ea

3 files changed

Lines changed: 101 additions & 2 deletions

File tree

mapscript/python/tests/cases/layer_test.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,76 @@ def testLayerConstructorMapArg(self):
5858
assert layer.map is not None, layer.map
5959

6060

61+
class LayerItemDefinitionTestCase(MapLayerTestCase):
62+
63+
def setUp(self):
64+
MapTestCase.setUp(self)
65+
self.layer = self.map.getLayerByName('POINT')
66+
self.layer.open()
67+
68+
def tearDown(self):
69+
self.layer.close()
70+
71+
def testLayerGetItemDefinition(self):
72+
"""test getting layer item information for the first item"""
73+
74+
gml_item = self.layer.getItemDefinition(0)
75+
assert gml_item.name == "FID"
76+
assert gml_item.type == "Integer"
77+
assert gml_item.alias is None
78+
assert gml_item.encode == 1
79+
assert gml_item.minOccurs == 0
80+
assert gml_item.outputByDefault == 1
81+
assert gml_item.precision == 0
82+
assert gml_item.template is None
83+
assert gml_item.visible == 0
84+
assert gml_item.width == 10
85+
86+
def testLayerGetItemDefinition2(self):
87+
"""test getting layer item information for the second item"""
88+
89+
gml_item = self.layer.getItemDefinition(1)
90+
assert gml_item.name == "FNAME"
91+
assert gml_item.type == "Character"
92+
assert gml_item.alias is None
93+
assert gml_item.encode == 1
94+
assert gml_item.minOccurs == 0
95+
assert gml_item.outputByDefault == 1
96+
assert gml_item.precision == 0
97+
assert gml_item.template is None
98+
assert gml_item.visible == 0
99+
assert gml_item.width == 10
100+
101+
def testLayerGetMissingItemDefinition(self):
102+
"""test getting item information for a non-existent index"""
103+
gml_item = self.layer.getItemDefinition(100)
104+
assert gml_item is None
105+
106+
def testLayerGetItemDefinitionClosedLayer(self):
107+
"""item definition will be None for a closed layer"""
108+
self.layer.close()
109+
gml_item = self.layer.getItemDefinition(0)
110+
assert gml_item is None
111+
112+
def testLayerGetNonDefinedItemDefinition(self):
113+
"""test getting layer item information for a layer with gml_types auto"""
114+
115+
layer = self.map.getLayerByName('POLYGON')
116+
layer.open()
117+
gml_item = layer.getItemDefinition(0)
118+
assert gml_item.name == "FID"
119+
assert gml_item.type is None
120+
assert gml_item.alias is None
121+
assert gml_item.encode == 1
122+
assert gml_item.minOccurs == 0
123+
assert gml_item.outputByDefault == 1
124+
assert gml_item.precision == 0
125+
assert gml_item.template is None
126+
assert gml_item.visible == 0
127+
assert gml_item.width == 0
128+
layer.close()
129+
130+
61131
class LayerCloningTestCase(MapLayerTestCase):
62132

63133
def testLayerCloning(self):

mapscript/swiginc/layer.i

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -685,5 +685,31 @@
685685
self->_geomtransform.type = MS_GEOMTRANSFORM_NONE;
686686
self->_geomtransform.string = NULL;
687687
}
688-
}
688+
}
689+
690+
%feature("autodoc", "3");
691+
%feature("docstring") "Returns the requested item's field definition.
692+
A layer must be open to retrieve an item definition.
693+
A field definition object includes the following properties:
694+
name, type, alias, encode, minOccurs, outputByDefault, precision
695+
template, visible, and width.
696+
The numitems property contains the number of items
697+
available, and the first item is index zero."
698+
699+
gmlItemObj *getItemDefinition(int i)
700+
{
701+
702+
if (i >= 0 && i < self->numitems) {
703+
gmlItemListObj *item_list;
704+
item_list = msGMLGetItems(self, "G");
705+
gmlItemObj *item = item_list->items + i;
706+
return item;
707+
}
708+
else {
709+
return NULL;
710+
}
711+
712+
}
713+
714+
689715
}

tests/test.map

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ MAP
140140
END
141141
STATUS OFF # DEFAULT
142142
DATA "point"
143+
METADATA
144+
"gml_types" "auto"
145+
END
143146
CLASSITEM "FNAME"
144147
LABELITEM "FNAME"
145148
CLASS
@@ -173,7 +176,7 @@ MAP
173176
END
174177
END
175178
END
176-
179+
177180
LAYER
178181
NAME "INLINE"
179182
TYPE POINT

0 commit comments

Comments
 (0)