11package dev .zarr .zarrjava ;
22
3+ import com .fasterxml .jackson .databind .JsonNode ;
4+ import com .fasterxml .jackson .databind .ObjectMapper ;
35import dev .zarr .zarrjava .store .FilesystemStore ;
46import dev .zarr .zarrjava .store .StoreHandle ;
5- import dev .zarr .zarrjava .v2 .Array ;
6- import dev .zarr .zarrjava .v2 .ArrayMetadata ;
7- import dev .zarr .zarrjava .v2 .DataType ;
8- import dev .zarr .zarrjava .v2 .Group ;
9- import dev .zarr .zarrjava .v2 .Node ;
7+ import dev .zarr .zarrjava .v2 .*;
108import org .junit .jupiter .api .Assertions ;
119import org .junit .jupiter .api .Test ;
1210import org .junit .jupiter .params .ParameterizedTest ;
1311import org .junit .jupiter .params .provider .CsvSource ;
12+ import org .junit .jupiter .params .provider .MethodSource ;
1413import org .junit .jupiter .params .provider .ValueSource ;
1514
15+ import java .io .BufferedReader ;
1616import java .io .IOException ;
1717import java .nio .file .Files ;
1818import java .nio .file .NoSuchFileException ;
1919import java .nio .file .Path ;
2020import java .nio .file .Paths ;
21+ import java .util .function .Function ;
22+ import java .util .stream .Collectors ;
23+ import java .util .stream .Stream ;
24+
25+ import static dev .zarr .zarrjava .core .Node .ZARRAY ;
2126
2227public class ZarrV2Test extends ZarrTest {
2328 @ ParameterizedTest
@@ -255,4 +260,32 @@ public void testCreateGroup() throws ZarrException, IOException {
255260 Group .create (storeHandleString );
256261 Assertions .assertTrue (Files .exists (Paths .get (storeHandleString ).resolve (".zgroup" )));
257262 }
263+
264+
265+ static Stream <Function <ArrayMetadataBuilder , ArrayMetadataBuilder >> compressorBuilder () {
266+ return Stream .of (
267+ ArrayMetadataBuilder ::withBloscCompressor ,
268+ ArrayMetadataBuilder ::withZlibCompressor ,
269+ b -> b
270+ );
271+ }
272+
273+ @ ParameterizedTest
274+ @ MethodSource ("compressorBuilder" )
275+ public void testZarrJsonFormat (Function <ArrayMetadataBuilder , ArrayMetadataBuilder > compressorBuilder ) throws ZarrException , IOException {
276+ // regression test: ensure that 'id' keyword of codecs is only written once.
277+ StoreHandle storeHandle = new FilesystemStore (TESTOUTPUT ).resolve ("testZarrJsonFormatV2" ).resolve (String .valueOf (compressorBuilder .hashCode ()));
278+ ArrayMetadataBuilder builder = Array .metadataBuilder ()
279+ .withShape (10 , 10 )
280+ .withDataType (DataType .UINT8 )
281+ .withChunks (6 , 6 );
282+ builder = compressorBuilder .apply (builder );
283+ Array .create (storeHandle , builder .build ());
284+
285+ try (BufferedReader reader = Files .newBufferedReader (storeHandle .resolve (ZARRAY ).toPath ())) {
286+ String jsonInString = reader .lines ().collect (Collectors .joining (System .lineSeparator ()));
287+ JsonNode JSON = new ObjectMapper ().readTree (jsonInString );
288+ Assertions .assertEquals (JSON .toPrettyString (), jsonInString );
289+ }
290+ }
258291}
0 commit comments