@@ -412,6 +412,35 @@ def test_dtypes(dtype_str: str) -> None:
412412 # return type for vlen types may vary depending on numpy version
413413 assert dt .byte_count is None
414414
415+ def default_metadata_dict (** kwargs ) -> dict [str , Any ]:
416+ d = {
417+ "zarr_format" : 3 ,
418+ "node_type" : "array" ,
419+ "shape" : (1 ,),
420+ "chunk_grid" : {"name" : "regular" , "configuration" : {"chunk_shape" : (1 ,)}},
421+ "data_type" : "float64" ,
422+ "chunk_key_encoding" : {"name" : "default" , "separator" : "." },
423+ "codecs" : [{"name" : "bytes" }],
424+ "fill_value" : 0 ,
425+ }
426+ for k ,v in kwargs .items ():
427+ d [k ]= v
428+ return d
415429
416430def test_fail_on_invalid_value () -> None :
417- pass
431+ ArrayV3Metadata .from_dict (default_metadata_dict ())
432+ with pytest .raises (ValueError , match = re .escape ("Unexpected zarr metadata keys: ['unknown']" )):
433+ ArrayV3Metadata .from_dict (default_metadata_dict (unknown = "value" ))
434+ with pytest .raises (ValueError , match = re .escape ("Named configuration expects keys 'name' and 'configuration'. Got ['name', 'unknown']." )):
435+ ArrayV3Metadata .from_dict (default_metadata_dict (codecs = [{"name" :"bytes" ,"unknown" : "value" }]))
436+
437+
438+ def test_string_codecs () -> None :
439+ expected = ArrayV3Metadata .from_dict (default_metadata_dict (data_type = "bool" , codecs = [{"name" : "bytes" }]))
440+ result1 = ArrayV3Metadata .from_dict (default_metadata_dict (data_type = "bool" ,codecs = ["bytes" ]))
441+ assert result1 .codecs == expected .codecs
442+ result2 = ArrayV3Metadata .from_dict (default_metadata_dict (data_type = "bool" ,codecs = "bytes" ))
443+ assert result2 .codecs == expected .codecs
444+ ArrayV3Metadata .from_dict (default_metadata_dict (data_type = "int16" , codecs = ["bytes" ]))
445+ with pytest .raises (ValueError , match = "Expected bytes codec to specify argument endian for data_type=int16" ):
446+ ArrayV3Metadata .from_dict (default_metadata_dict (data_type = "int16" , codecs = ["bytes" ]))
0 commit comments