Skip to content

Commit b4e7a7b

Browse files
committed
Add parseOmeroMetadata Test
* Use `Number` type to handle both `Integer` and `Double`. * Convert `Number` to `Double` using `Number.doubleValue()`. Add test cases in `ZarrReaderTest.java` to verify the fix for `parseOmeroMetadata`. * Add test cases to cover both `Integer` and `Double` values in the metadata.
1 parent 3d1ccf5 commit b4e7a7b

File tree

2 files changed

+90
-8
lines changed

2 files changed

+90
-8
lines changed

src/loci/formats/in/ZarrReader.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
package loci.formats.in;
32

43
/*-
@@ -898,7 +897,7 @@ private void parseImageLabels(String root, Map<String, Object> attr) throws IOEx
898897
for (int p = 0; p < properties.size(); p++) {
899898
Map<String, Object> prop = (Map<String, Object>) properties.get(p);
900899
Integer labelValue = (Integer) prop.get("label-value");
901-
Double area = (Double) prop.get("area (pixels)");
900+
Number area = (Number) prop.get("area (pixels)");
902901
String propClass = (String) prop.get("class");
903902
}
904903
}
@@ -925,17 +924,17 @@ public void parseOmeroMetadata(Map<String, Object> attr) throws IOException, For
925924
for (int i = 0; i < channels.size(); i++) {
926925
Map<String, Object> channel = (Map<String, Object>) channels.get(i);
927926
Boolean channelActive = (Boolean) channel.get("active");
928-
Double channelCoefficient = (Double) channel.get("coefficient");
927+
Number channelCoefficient = (Number) channel.get("coefficient");
929928
String channelColor = (String) channel.get("color");
930929
String channelFamily = (String) channel.get("family");
931930
Boolean channelInverted = (Boolean) channel.get("inverted");
932931
String channelLabel = (String) channel.get("label");
933932
Map<String, Object> window = (Map<String, Object>)channel.get("window");
934933
if (window != null) {
935-
Double windowStart = getDouble(window, "start");
936-
Double windowEnd = getDouble(window, "end");
937-
Double windowMin = getDouble(window, "min");
938-
Double windowMax = getDouble(window, "max");
934+
Number windowStart = getDouble(window, "start");
935+
Number windowEnd = getDouble(window, "end");
936+
Number windowMin = getDouble(window, "min");
937+
Number windowMax = getDouble(window, "max");
939938
}
940939
}
941940
Map<String, Object> rdefs = (Map<String, Object>)omeroMetadata.get("rdefs");
@@ -1107,7 +1106,7 @@ public static String getRowString(int rowIndex) {
11071106
return sb.reverse().toString();
11081107
}
11091108

1110-
private Double getDouble(Map<String, Object> src, String key) {
1109+
private Number getDouble(Map<String, Object> src, String key) {
11111110
Number val = (Number) src.get(key);
11121111
if (val == null) {
11131112
return null;

test/loci/formats/utests/ZarrReaderTest.java

+83
Original file line numberDiff line numberDiff line change
@@ -205,4 +205,87 @@ public void testResolutionCount() {
205205
assertEquals(3, reader.getSeriesCount());
206206
}
207207

208+
@Test
209+
public void testParseOmeroMetadataWithIntegerValues() {
210+
Map<String, Object> omeroMetadata = new HashMap<>();
211+
omeroMetadata.put("id", 1);
212+
omeroMetadata.put("name", "Test Image");
213+
omeroMetadata.put("version", "0.1");
214+
215+
ArrayList<Object> channels = new ArrayList<>();
216+
Map<String, Object> channel = new HashMap<>();
217+
channel.put("active", true);
218+
channel.put("coefficient", 1);
219+
channel.put("color", "FFFFFF");
220+
channel.put("family", "linear");
221+
channel.put("inverted", false);
222+
channel.put("label", "Channel 1");
223+
224+
Map<String, Object> window = new HashMap<>();
225+
window.put("start", 0);
226+
window.put("end", 255);
227+
window.put("min", 0);
228+
window.put("max", 255);
229+
channel.put("window", window);
230+
231+
channels.add(channel);
232+
omeroMetadata.put("channels", channels);
233+
234+
Map<String, Object> rdefs = new HashMap<>();
235+
rdefs.put("defaultT", 0);
236+
rdefs.put("defaultZ", 0);
237+
rdefs.put("model", "color");
238+
omeroMetadata.put("rdefs", rdefs);
239+
240+
Map<String, Object> test = new HashMap<>();
241+
test.put("omero", omeroMetadata);
242+
243+
try {
244+
reader.parseOmeroMetadata(test);
245+
} catch (IOException | FormatException e) {
246+
fail("Unexpected exception while parsing Omero metadata with Integer values");
247+
}
248+
}
249+
250+
@Test
251+
public void testParseOmeroMetadataWithDoubleValues() {
252+
Map<String, Object> omeroMetadata = new HashMap<>();
253+
omeroMetadata.put("id", 1);
254+
omeroMetadata.put("name", "Test Image");
255+
omeroMetadata.put("version", "0.1");
256+
257+
ArrayList<Object> channels = new ArrayList<>();
258+
Map<String, Object> channel = new HashMap<>();
259+
channel.put("active", true);
260+
channel.put("coefficient", 1.0);
261+
channel.put("color", "FFFFFF");
262+
channel.put("family", "linear");
263+
channel.put("inverted", false);
264+
channel.put("label", "Channel 1");
265+
266+
Map<String, Object> window = new HashMap<>();
267+
window.put("start", 0.0);
268+
window.put("end", 255.0);
269+
window.put("min", 0.0);
270+
window.put("max", 255.0);
271+
channel.put("window", window);
272+
273+
channels.add(channel);
274+
omeroMetadata.put("channels", channels);
275+
276+
Map<String, Object> rdefs = new HashMap<>();
277+
rdefs.put("defaultT", 0);
278+
rdefs.put("defaultZ", 0);
279+
rdefs.put("model", "color");
280+
omeroMetadata.put("rdefs", rdefs);
281+
282+
Map<String, Object> test = new HashMap<>();
283+
test.put("omero", omeroMetadata);
284+
285+
try {
286+
reader.parseOmeroMetadata(test);
287+
} catch (IOException | FormatException e) {
288+
fail("Unexpected exception while parsing Omero metadata with Double values");
289+
}
290+
}
208291
}

0 commit comments

Comments
 (0)