- @Override
- public void onDataTreeChanged(final Collection<DataTreeModification<T>> changes) {
- synchronized (accumulatedChanges) {
- accumulatedChanges.addAll(changes);
- if (expChangeCount <= accumulatedChanges.size()) {
- future.set(List.copyOf(accumulatedChanges));
+ @SafeVarargs
+ public final void verifyModifications(final Matcher<T>... inOrder) {
+ final var matchers = new ArrayDeque<>(Arrays.asList(inOrder));
+ final var changes = listener.awaitChanges(matchers.size());
+
+ while (!changes.isEmpty()) {
+ final var mod = changes.pop();
+ final var matcher = matchers.pop();
+ if (!matcher.apply(mod)) {
+ final var rootNode = mod.getRootNode();
+ fail("Received unexpected notification: type: %s, path: %s, before: %s, after: %s".formatted(
+ rootNode.modificationType(), mod.getRootPath().path(), rootNode.dataBefore(),
+ rootNode.dataAfter()));
+ return;