public static void deepEquals(@NonNull Node expected, @NonNull Node actual) {
assertEquals(expected.getName(), actual.getName());
assertEquals(expected.getObjectId(), actual.getObjectId());
assertEquals(expected.getType(), actual.getType());
assertNotNull(expected.getMetadataId());
assertNotNull(actual.getMetadataId());
assertEquals(expected.getMetadataId().orNull(), actual.getMetadataId().orNull());
assertNotNull(expected.bounds());
assertNotNull(actual.bounds());
equalsPrecise(expected.bounds().orNull(), actual.bounds().orNull());
Map<String, Object> expectedExtraData = expected.getExtraData();
Map<String, Object> actualExtraData = actual.getExtraData();
assertNotNull(expectedExtraData);
assertNotNull(actualExtraData);
assertDeepEquals(expectedExtraData, actualExtraData);
}