From 23354d6568f250e58283d7698519a4f99f7b9534 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Wed, 5 Jun 2019 12:56:39 +0100 Subject: [PATCH] Use predicates to match events. --- .../contact/ContactManagerImplTest.java | 26 ++++++----------- .../bramble/test/PredicateMatcher.java | 28 +++++++++++++++++++ 2 files changed, 36 insertions(+), 18 deletions(-) create mode 100644 bramble-core/src/test/java/org/briarproject/bramble/test/PredicateMatcher.java diff --git a/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java index 543822a3ea..48928cefb0 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactManagerImplTest.java @@ -23,15 +23,14 @@ import org.briarproject.bramble.api.rendezvous.event.RendezvousConnectionOpenedE import org.briarproject.bramble.api.rendezvous.event.RendezvousFailedEvent; import org.briarproject.bramble.api.transport.KeyManager; import org.briarproject.bramble.test.BrambleMockTestCase; -import org.briarproject.bramble.test.CaptureArgumentAction; import org.briarproject.bramble.test.DbExpectations; +import org.briarproject.bramble.test.PredicateMatcher; import org.jmock.Expectations; import org.junit.Before; import org.junit.Test; import java.util.Collection; import java.util.Random; -import java.util.concurrent.atomic.AtomicReference; import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; @@ -332,20 +331,14 @@ public class ContactManagerImplTest extends BrambleMockTestCase { @Test public void testFailedStateIsNotReplaced() throws Exception { Transaction txn = new Transaction(null, true); - AtomicReference<PendingContactStateChangedEvent> captureFirstEvent = - new AtomicReference<>(); - AtomicReference<PendingContactStateChangedEvent> captureSecondEvent = - new AtomicReference<>(); context.checking(new Expectations() {{ - oneOf(eventBus).broadcast(with(any( - PendingContactStateChangedEvent.class))); - will(new CaptureArgumentAction<>(captureFirstEvent, - PendingContactStateChangedEvent.class, 0)); - oneOf(eventBus).broadcast(with(any( - PendingContactStateChangedEvent.class))); - will(new CaptureArgumentAction<>(captureSecondEvent, - PendingContactStateChangedEvent.class, 0)); + oneOf(eventBus).broadcast(with(new PredicateMatcher<>( + PendingContactStateChangedEvent.class, e -> + e.getPendingContactState() == ADDING_CONTACT))); + oneOf(eventBus).broadcast(with(new PredicateMatcher<>( + PendingContactStateChangedEvent.class, e -> + e.getPendingContactState() == FAILED))); }}); // A rendezvous connection is opened, then the pending contact expires, @@ -356,10 +349,7 @@ public class ContactManagerImplTest extends BrambleMockTestCase { pendingContact.getId())); contactManager.eventOccurred(new RendezvousConnectionClosedEvent( pendingContact.getId(), false)); - - assertEquals(ADDING_CONTACT, - captureFirstEvent.get().getPendingContactState()); - assertEquals(FAILED, captureSecondEvent.get().getPendingContactState()); + context.assertIsSatisfied(); context.checking(new DbExpectations() {{ oneOf(db).transactionWithResult(with(true), withDbCallable(txn)); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/PredicateMatcher.java b/bramble-core/src/test/java/org/briarproject/bramble/test/PredicateMatcher.java new file mode 100644 index 0000000000..b08f15b2aa --- /dev/null +++ b/bramble-core/src/test/java/org/briarproject/bramble/test/PredicateMatcher.java @@ -0,0 +1,28 @@ +package org.briarproject.bramble.test; + +import org.briarproject.bramble.api.Predicate; +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; + +public class PredicateMatcher<T> extends BaseMatcher<T> { + + private final Class<T> matchedClass; + private final Predicate<T> predicate; + + public PredicateMatcher(Class<T> matchedClass, Predicate<T> predicate) { + this.matchedClass = matchedClass; + this.predicate = predicate; + } + + @Override + public boolean matches(Object item) { + if (matchedClass.isInstance(item)) + return predicate.test(matchedClass.cast(item)); + return false; + } + + @Override + public void describeTo(Description description) { + description.appendText("matches an item against a predicate"); + } +} -- GitLab