CompositePropertyUpdateCallback implements PropertyUpdateCallback { @Override public void propertyUpdated(String nodePath, String propertyRelativePath, PropertyDefinition pd, @Nullable PropertyState before, @Nullable PropertyState after) { for (PropertyUpdateCallback callback : callbacks) { callback.propertyUpdated(nodePath, propertyRelativePath, pd, before, after); } } CompositePropertyUpdateCallback(@NotNull Collection<PropertyUpdateCallback> callbacks); @Override void propertyUpdated(String nodePath, String propertyRelativePath, PropertyDefinition pd,
                                @Nullable PropertyState before, @Nullable PropertyState after); @Override void done();  }
@Test public void propertyUpdated() { List<PropertyUpdateCallback> delegates = new LinkedList<>(); delegates.add(mock(PropertyUpdateCallback.class)); delegates.add(mock(PropertyUpdateCallback.class)); CompositePropertyUpdateCallback compositePropertyUpdateCallback = new CompositePropertyUpdateCallback(delegates); String path = "/foo"; String relativePath = "bar"; PropertyDefinition pd = mock(PropertyDefinition.class); PropertyState before = mock(PropertyState.class); PropertyState after = mock(PropertyState.class); compositePropertyUpdateCallback.propertyUpdated(path, relativePath, pd, before, after); }