Skip to content

Commit

Permalink
Add parseOmeroMetadata Test
Browse files Browse the repository at this point in the history
* 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.
  • Loading branch information
dominikl committed Dec 5, 2024
1 parent 3d1ccf5 commit b4e7a7b
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 8 deletions.
15 changes: 7 additions & 8 deletions src/loci/formats/in/ZarrReader.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

package loci.formats.in;

/*-
Expand Down Expand Up @@ -898,7 +897,7 @@ private void parseImageLabels(String root, Map<String, Object> attr) throws IOEx
for (int p = 0; p < properties.size(); p++) {
Map<String, Object> prop = (Map<String, Object>) properties.get(p);
Integer labelValue = (Integer) prop.get("label-value");
Double area = (Double) prop.get("area (pixels)");
Number area = (Number) prop.get("area (pixels)");
String propClass = (String) prop.get("class");
}
}
Expand All @@ -925,17 +924,17 @@ public void parseOmeroMetadata(Map<String, Object> attr) throws IOException, For
for (int i = 0; i < channels.size(); i++) {
Map<String, Object> channel = (Map<String, Object>) channels.get(i);
Boolean channelActive = (Boolean) channel.get("active");
Double channelCoefficient = (Double) channel.get("coefficient");
Number channelCoefficient = (Number) channel.get("coefficient");
String channelColor = (String) channel.get("color");
String channelFamily = (String) channel.get("family");
Boolean channelInverted = (Boolean) channel.get("inverted");
String channelLabel = (String) channel.get("label");
Map<String, Object> window = (Map<String, Object>)channel.get("window");
if (window != null) {
Double windowStart = getDouble(window, "start");
Double windowEnd = getDouble(window, "end");
Double windowMin = getDouble(window, "min");
Double windowMax = getDouble(window, "max");
Number windowStart = getDouble(window, "start");
Number windowEnd = getDouble(window, "end");
Number windowMin = getDouble(window, "min");
Number windowMax = getDouble(window, "max");
}
}
Map<String, Object> rdefs = (Map<String, Object>)omeroMetadata.get("rdefs");
Expand Down Expand Up @@ -1107,7 +1106,7 @@ public static String getRowString(int rowIndex) {
return sb.reverse().toString();
}

private Double getDouble(Map<String, Object> src, String key) {
private Number getDouble(Map<String, Object> src, String key) {
Number val = (Number) src.get(key);
if (val == null) {
return null;
Expand Down
83 changes: 83 additions & 0 deletions test/loci/formats/utests/ZarrReaderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -205,4 +205,87 @@ public void testResolutionCount() {
assertEquals(3, reader.getSeriesCount());
}

@Test
public void testParseOmeroMetadataWithIntegerValues() {
Map<String, Object> omeroMetadata = new HashMap<>();
omeroMetadata.put("id", 1);
omeroMetadata.put("name", "Test Image");
omeroMetadata.put("version", "0.1");

ArrayList<Object> channels = new ArrayList<>();
Map<String, Object> channel = new HashMap<>();
channel.put("active", true);
channel.put("coefficient", 1);
channel.put("color", "FFFFFF");
channel.put("family", "linear");
channel.put("inverted", false);
channel.put("label", "Channel 1");

Map<String, Object> window = new HashMap<>();
window.put("start", 0);
window.put("end", 255);
window.put("min", 0);
window.put("max", 255);
channel.put("window", window);

channels.add(channel);
omeroMetadata.put("channels", channels);

Map<String, Object> rdefs = new HashMap<>();
rdefs.put("defaultT", 0);
rdefs.put("defaultZ", 0);
rdefs.put("model", "color");
omeroMetadata.put("rdefs", rdefs);

Map<String, Object> test = new HashMap<>();
test.put("omero", omeroMetadata);

try {
reader.parseOmeroMetadata(test);
} catch (IOException | FormatException e) {
fail("Unexpected exception while parsing Omero metadata with Integer values");
}
}

@Test
public void testParseOmeroMetadataWithDoubleValues() {
Map<String, Object> omeroMetadata = new HashMap<>();
omeroMetadata.put("id", 1);
omeroMetadata.put("name", "Test Image");
omeroMetadata.put("version", "0.1");

ArrayList<Object> channels = new ArrayList<>();
Map<String, Object> channel = new HashMap<>();
channel.put("active", true);
channel.put("coefficient", 1.0);
channel.put("color", "FFFFFF");
channel.put("family", "linear");
channel.put("inverted", false);
channel.put("label", "Channel 1");

Map<String, Object> window = new HashMap<>();
window.put("start", 0.0);
window.put("end", 255.0);
window.put("min", 0.0);
window.put("max", 255.0);
channel.put("window", window);

channels.add(channel);
omeroMetadata.put("channels", channels);

Map<String, Object> rdefs = new HashMap<>();
rdefs.put("defaultT", 0);
rdefs.put("defaultZ", 0);
rdefs.put("model", "color");
omeroMetadata.put("rdefs", rdefs);

Map<String, Object> test = new HashMap<>();
test.put("omero", omeroMetadata);

try {
reader.parseOmeroMetadata(test);
} catch (IOException | FormatException e) {
fail("Unexpected exception while parsing Omero metadata with Double values");
}
}
}

0 comments on commit b4e7a7b

Please sign in to comment.