@@ -275,6 +275,21 @@ def testLengthPrecisionFromUri(self):
275
275
self .assertEqual (myMemoryLayer .fields ().field ('size' ).length (), 12 )
276
276
self .assertEqual (myMemoryLayer .fields ().field ('size' ).precision (), 9 )
277
277
278
+ myMemoryLayer = QgsVectorLayer (
279
+ ('Point?crs=epsg:4326&field=size:double(-1,-1)&index=yes' ),
280
+ 'test' ,
281
+ 'memory' )
282
+
283
+ self .assertEqual (myMemoryLayer .fields ().field ('size' ).length (), - 1 )
284
+ self .assertEqual (myMemoryLayer .fields ().field ('size' ).precision (), - 1 )
285
+
286
+ myMemoryLayer = QgsVectorLayer (
287
+ ('Point?crs=epsg:4326&field=size:string(-1)&index=yes' ),
288
+ 'test' ,
289
+ 'memory' )
290
+
291
+ self .assertEqual (myMemoryLayer .fields ().field ('size' ).length (), - 1 )
292
+
278
293
def testFromUriWithEncodedField (self ):
279
294
"""Test we can construct the mem provider from a uri when a field name is encoded"""
280
295
layer = QgsVectorLayer (
@@ -419,6 +434,8 @@ def testCreateMemoryLayer(self):
419
434
for i in range (len (fields )):
420
435
self .assertEqual (layer .fields ()[i ].name (), fields [i ].name ())
421
436
self .assertEqual (layer .fields ()[i ].type (), fields [i ].type ())
437
+ self .assertEqual (layer .fields ()[i ].length (), fields [i ].length ())
438
+ self .assertEqual (layer .fields ()[i ].precision (), fields [i ].precision (), fields [i ].name ())
422
439
423
440
# unsupported field type
424
441
fields = QgsFields ()
@@ -429,6 +446,22 @@ def testCreateMemoryLayer(self):
429
446
self .assertEqual (layer .fields ()[0 ].name (), 'rect' )
430
447
self .assertEqual (layer .fields ()[0 ].type (), QVariant .String ) # should be mapped to string
431
448
449
+ # field precision
450
+ fields = QgsFields ()
451
+ fields .append (QgsField ("string" , QVariant .String , len = 10 ))
452
+ fields .append (QgsField ("long" , QVariant .LongLong , len = 6 ))
453
+ fields .append (QgsField ("double" , QVariant .Double , len = 10 , prec = 7 ))
454
+ fields .append (QgsField ("double2" , QVariant .Double , len = - 1 , prec = - 1 ))
455
+ layer = QgsMemoryProviderUtils .createMemoryLayer ('my name' , fields )
456
+ self .assertTrue (layer .isValid ())
457
+ self .assertFalse (layer .fields ().isEmpty ())
458
+ self .assertEqual (len (layer .fields ()), len (fields ))
459
+ for i in range (len (fields )):
460
+ self .assertEqual (layer .fields ()[i ].name (), fields [i ].name ())
461
+ self .assertEqual (layer .fields ()[i ].type (), fields [i ].type ())
462
+ self .assertEqual (layer .fields ()[i ].length (), fields [i ].length ())
463
+ self .assertEqual (layer .fields ()[i ].precision (), fields [i ].precision ())
464
+
432
465
def testThreadSafetyWithIndex (self ):
433
466
layer = QgsVectorLayer ('Point?crs=epsg:4326&index=yes&field=pk:integer&field=cnt:int8&field=name:string(0)&field=name2:string(0)&field=num_char:string&key=pk' ,
434
467
'test' , 'memory' )
0 commit comments