Skip to content

Commit e86881e

Browse files
stefanhahmannclaude
andcommitted
Add OmeroMetadataAccessTest
Locks down how omero metadata (channel labels, default channel / timepoint, render windows) is read from both v0.4 and v0.5 OME-Zarr fixtures, guarding against backend regressions. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 3b40559 commit e86881e

1 file changed

Lines changed: 77 additions & 0 deletions

File tree

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package sc.fiji.ome.zarr.pyramid;
2+
3+
import dev.zarr.zarrjava.ZarrException;
4+
import dev.zarr.zarrjava.experimental.ome.MultiscaleImage;
5+
import dev.zarr.zarrjava.experimental.ome.metadata.OmeroChannel;
6+
import dev.zarr.zarrjava.experimental.ome.metadata.OmeroMetadata;
7+
import dev.zarr.zarrjava.experimental.ome.metadata.OmeroRdefs;
8+
import dev.zarr.zarrjava.experimental.ome.metadata.OmeroWindow;
9+
import dev.zarr.zarrjava.store.FilesystemStore;
10+
import dev.zarr.zarrjava.store.StoreHandle;
11+
import org.junit.jupiter.params.ParameterizedTest;
12+
import org.junit.jupiter.params.provider.MethodSource;
13+
import sc.fiji.ome.zarr.util.ZarrTestUtils;
14+
15+
import java.io.IOException;
16+
import java.net.URISyntaxException;
17+
import java.nio.file.Path;
18+
import java.util.List;
19+
import java.util.stream.Stream;
20+
21+
import static org.junit.jupiter.api.Assertions.*;
22+
23+
class OmeroMetadataAccessTest
24+
{
25+
static Stream< String > omeZarr5dExamples()
26+
{
27+
return Stream.of(
28+
"sc/fiji/ome/zarr/util/5d_testing/5d_dataset_v4.ome.zarr",
29+
"sc/fiji/ome/zarr/util/5d_testing/5d_dataset_v5.ome.zarr"
30+
);
31+
}
32+
33+
@ParameterizedTest
34+
@MethodSource( "omeZarr5dExamples" )
35+
void testCanAccessOmeroMetadataWithExperimentalOme( final String resource ) throws URISyntaxException, IOException, ZarrException
36+
{
37+
final Path path = ZarrTestUtils.resourcePath( resource );
38+
final FilesystemStore store = new FilesystemStore( path.toString() );
39+
final StoreHandle handle = store.resolve();
40+
final MultiscaleImage multiscaleImage = MultiscaleImage.open( handle );
41+
42+
final OmeroMetadata omero = multiscaleImage.getOmeroMetadata();
43+
44+
assertNotNull( omero );
45+
assertEquals( Integer.valueOf( 1 ), omero.id );
46+
assertEquals( "0.4", omero.version );
47+
48+
final OmeroRdefs rdefs = omero.rdefs;
49+
assertNotNull( rdefs );
50+
assertEquals( Integer.valueOf( 1 ), rdefs.defaultT );
51+
assertEquals( Integer.valueOf( 71 ), rdefs.defaultZ );
52+
assertEquals( "color", rdefs.model );
53+
54+
final List< OmeroChannel > channels = omero.channels;
55+
assertNotNull( channels );
56+
assertEquals( 3, channels.size() );
57+
58+
final OmeroChannel channel0 = channels.get( 0 );
59+
assertEquals( "lynEGFP", channel0.label );
60+
assertEquals( "00FF00", channel0.color );
61+
assertWindow( channel0.window, 0.0, 255.0, 3.0, 246.0 );
62+
63+
final OmeroChannel channel1 = channels.get( 1 );
64+
assertEquals( "NLStdTomato", channel1.label );
65+
assertEquals( "FF0000", channel1.color );
66+
assertWindow( channel1.window, 0.0, 255.0, 6.0, 133.0 );
67+
}
68+
69+
private void assertWindow( final OmeroWindow window, final double min, final double max, final double start, final double end )
70+
{
71+
assertNotNull( window );
72+
assertEquals( min, window.min );
73+
assertEquals( max, window.max );
74+
assertEquals( start, window.start );
75+
assertEquals( end, window.end );
76+
}
77+
}

0 commit comments

Comments
 (0)