@@ -245,6 +245,81 @@ def test_metadata():
245
245
md .get_metadata ()
246
246
247
247
248
+ def test_metadata_list_interface ():
249
+ md = GiftiMetaData (key = 'value' )
250
+ with pytest .warns (FutureWarning ):
251
+ mdlist = md .data
252
+ assert len (mdlist ) == 1
253
+ assert mdlist [0 ].name == 'key'
254
+ assert mdlist [0 ].value == 'value'
255
+
256
+ # Modify elements in-place
257
+ mdlist [0 ].name = 'foo'
258
+ assert mdlist [0 ].name == 'foo'
259
+ assert 'foo' in md
260
+ assert 'key' not in md
261
+ assert md ['foo' ] == 'value'
262
+ mdlist [0 ].value = 'bar'
263
+ assert mdlist [0 ].value == 'bar'
264
+ assert md ['foo' ] == 'bar'
265
+
266
+ # Append new NVPair
267
+ nvpair = GiftiNVPairs ('key' , 'value' )
268
+ mdlist .append (nvpair )
269
+ assert len (mdlist ) == 2
270
+ assert mdlist [1 ].name == 'key'
271
+ assert mdlist [1 ].value == 'value'
272
+ assert len (md ) == 2
273
+ assert md == {'foo' : 'bar' , 'key' : 'value' }
274
+
275
+ # Clearing empties both
276
+ mdlist .clear ()
277
+ assert len (mdlist ) == 0
278
+ assert len (md ) == 0
279
+
280
+ # Extension adds multiple keys
281
+ foobar = GiftiNVPairs ('foo' , 'bar' )
282
+ mdlist .extend ([nvpair , foobar ])
283
+ assert len (mdlist ) == 2
284
+ assert len (md ) == 2
285
+ assert md == {'key' : 'value' , 'foo' : 'bar' }
286
+
287
+ # Insertion updates list order, though we don't attempt to preserve it in the dict
288
+ lastone = GiftiNVPairs ('last' , 'one' )
289
+ mdlist .insert (1 , lastone )
290
+ assert len (mdlist ) == 3
291
+ assert len (md ) == 3
292
+ assert mdlist [1 ].name == 'last'
293
+ assert mdlist [1 ].value == 'one'
294
+ assert md == {'key' : 'value' , 'foo' : 'bar' , 'last' : 'one' }
295
+
296
+ # Popping returns a pair
297
+ mypair = mdlist .pop (0 )
298
+ assert isinstance (mypair , GiftiNVPairs )
299
+ assert mypair .name == 'key'
300
+ assert mypair .value == 'value'
301
+ assert len (mdlist ) == 2
302
+ assert len (md ) == 2
303
+ assert 'key' not in md
304
+ assert md == {'foo' : 'bar' , 'last' : 'one' }
305
+ # Modifying the pair now does not affect md
306
+ mypair .name = 'completelynew'
307
+ mypair .value = 'strings'
308
+ assert 'completelynew' not in md
309
+ assert md == {'foo' : 'bar' , 'last' : 'one' }
310
+ # Check popping from the end (lastone inserted before foobar)
311
+ lastpair = mdlist .pop ()
312
+ assert len (mdlist ) == 1
313
+ assert len (md ) == 1
314
+ assert md == {'last' : 'one' }
315
+
316
+ # And let's remove an old pair with a new object
317
+ lastoneagain = GiftiNVPairs ('last' , 'one' )
318
+ mdlist .remove (lastoneagain )
319
+ assert len (mdlist ) == 0
320
+ assert len (md ) == 0
321
+
322
+
248
323
def test_gifti_label_rgba ():
249
324
rgba = np .random .rand (4 )
250
325
kwargs = dict (zip (['red' , 'green' , 'blue' , 'alpha' ], rgba ))
0 commit comments