@@ -262,6 +262,44 @@ def testSaveFields(self):
262
262
for f in myFields :
263
263
assert f == importedFields .field (f .name ())
264
264
265
+ def testRenameAttributes (self ):
266
+ layer = QgsVectorLayer ("Point" , "test" , "memory" )
267
+ provider = layer .dataProvider ()
268
+
269
+ res = provider .addAttributes ([QgsField ("name" , QVariant .String , ),
270
+ QgsField ("age" , QVariant .Int ),
271
+ QgsField ("size" , QVariant .Double )])
272
+ layer .updateFields ()
273
+ assert res , "Failed to add attributes"
274
+ ft = QgsFeature ()
275
+ ft .setGeometry (QgsGeometry .fromPoint (QgsPoint (10 , 10 )))
276
+ ft .setAttributes (["Johny" ,
277
+ 20 ,
278
+ 0.3 ])
279
+ res , t = provider .addFeatures ([ft ])
280
+
281
+ # bad rename
282
+ self .assertFalse (provider .renameAttributes ({- 1 : 'not_a_field' }))
283
+ self .assertFalse (provider .renameAttributes ({100 : 'not_a_field' }))
284
+ # already exists
285
+ self .assertFalse (provider .renameAttributes ({1 : 'name' }))
286
+
287
+ # rename one field
288
+ self .assertTrue (provider .renameAttributes ({1 : 'this_is_the_new_age' }))
289
+ self .assertEqual (provider .fields ().at (1 ).name (), 'this_is_the_new_age' )
290
+ layer .updateFields ()
291
+ fet = next (layer .getFeatures ())
292
+ self .assertEqual (fet .fields ()[1 ].name (), 'this_is_the_new_age' )
293
+
294
+ # rename two fields
295
+ self .assertTrue (provider .renameAttributes ({1 : 'mapinfo_is_the_stone_age' , 2 : 'super_size' }))
296
+ self .assertEqual (provider .fields ().at (1 ).name (), 'mapinfo_is_the_stone_age' )
297
+ self .assertEqual (provider .fields ().at (2 ).name (), 'super_size' )
298
+ layer .updateFields ()
299
+ fet = next (layer .getFeatures ())
300
+ self .assertEqual (fet .fields ()[1 ].name (), 'mapinfo_is_the_stone_age' )
301
+ self .assertEqual (fet .fields ()[2 ].name (), 'super_size' )
302
+
265
303
266
304
class TestPyQgsMemoryProviderIndexed (unittest .TestCase , ProviderTestCase ):
267
305
0 commit comments