@@ -146,12 +146,22 @@ def test_hierarchy(self):
146
146
assert 'c/' not in store
147
147
assert 'c/e' not in store
148
148
assert 'c/e/' not in store
149
+ assert 'c/d/x' not in store
150
+
151
+ # check __getitem__
152
+ with assert_raises (KeyError ):
153
+ store ['c' ]
154
+ with assert_raises (KeyError ):
155
+ store ['c/e' ]
156
+ with assert_raises (KeyError ):
157
+ store ['c/d/x' ]
149
158
150
159
# test listdir (optional)
151
160
if hasattr (store , 'listdir' ):
152
161
eq ({'a' , 'b' , 'c' }, set (store .listdir ()))
153
162
eq ({'d' , 'e' }, set (store .listdir ('c' )))
154
163
eq ({'f' , 'g' }, set (store .listdir ('c/e' )))
164
+ # TODO further listdir tests
155
165
156
166
# test getsize (optional)
157
167
if hasattr (store , 'getsize' ):
@@ -163,6 +173,7 @@ def test_hierarchy(self):
163
173
eq (6 , store .getsize ('c/e' ))
164
174
eq (3 , store .getsize ('c/e/f' ))
165
175
eq (3 , store .getsize ('c/e/g' ))
176
+ # TODO further getsize tests
166
177
167
178
# test rmdir (optional)
168
179
if hasattr (store , 'rmdir' ):
@@ -339,7 +350,7 @@ def test_init_group_overwrite(self):
339
350
order = 'F' )
340
351
)
341
352
342
- # don't overwrite (default)
353
+ # don't overwrite array (default)
343
354
with assert_raises (ValueError ):
344
355
init_group (store )
345
356
@@ -354,6 +365,10 @@ def test_init_group_overwrite(self):
354
365
meta = decode_group_metadata (store [group_meta_key ])
355
366
eq (ZARR_FORMAT , meta ['zarr_format' ])
356
367
368
+ # don't overwrite group
369
+ with assert_raises (ValueError ):
370
+ init_group (store )
371
+
357
372
def test_init_group_overwrite_path (self ):
358
373
# setup
359
374
path = 'foo/bar'
@@ -398,11 +413,52 @@ def create_store(self):
398
413
return dict ()
399
414
400
415
416
+ def setdel_hierarchy_checks (store ):
417
+ # these tests are for stores that are aware of hierarchy levels; this
418
+ # behaviour is not stricly required by Zarr but these tests are included
419
+ # to define behaviour of DictStore and DirectoryStore classes
420
+
421
+ # check __setitem__ and __delitem__ blocked by leaf
422
+
423
+ store ['a/b' ] = b'aaa'
424
+ with assert_raises (KeyError ):
425
+ store ['a/b/c' ] = b'xxx'
426
+ with assert_raises (KeyError ):
427
+ del store ['a/b/c' ]
428
+
429
+ store ['d' ] = b'ddd'
430
+ with assert_raises (KeyError ):
431
+ store ['d/e/f' ] = b'xxx'
432
+ with assert_raises (KeyError ):
433
+ del store ['d/e/f' ]
434
+
435
+ # test __setitem__ overwrite level
436
+ store ['x/y/z' ] = b'xxx'
437
+ store ['x/y' ] = b'yyy'
438
+ eq (b'yyy' , store ['x/y' ])
439
+ assert 'x/y/z' not in store
440
+ store ['x' ] = b'zzz'
441
+ eq (b'zzz' , store ['x' ])
442
+ assert 'x/y' not in store
443
+
444
+ # test __delitem__ overwrite level
445
+ store ['r/s/t' ] = b'xxx'
446
+ del store ['r/s' ]
447
+ assert 'r/s/t' not in store
448
+ store ['r/s' ] = b'xxx'
449
+ del store ['r' ]
450
+ assert 'r/s' not in store
451
+
452
+
401
453
class TestDictStore (StoreTests , unittest .TestCase ):
402
454
403
455
def create_store (self ):
404
456
return DictStore ()
405
457
458
+ def test_setdel (self ):
459
+ store = self .create_store ()
460
+ setdel_hierarchy_checks (store )
461
+
406
462
407
463
def rmtree_if_exists (path , rmtree = shutil .rmtree , isdir = os .path .isdir ):
408
464
if isdir (path ):
@@ -446,6 +502,10 @@ def test_pickle_ext(self):
446
502
store2 ['xxx' ] = b'yyy'
447
503
eq (b'yyy' , store ['xxx' ])
448
504
505
+ def test_setdel (self ):
506
+ store = self .create_store ()
507
+ setdel_hierarchy_checks (store )
508
+
449
509
450
510
class TestZipStore (StoreTests , unittest .TestCase ):
451
511
0 commit comments