package com.jcwhatever.nucleus.utils.observer.event; import static org.junit.Assert.assertEquals; import com.jcwhatever.nucleus.utils.observer.SubscriberRunnable; import org.junit.Test; import java.util.ArrayList; import java.util.List; import javax.annotation.Nullable; public class EventSubscriberTest { @Test public void basicTest() throws Exception { final List<String> callResults = new ArrayList<>(10); EventSubscriber<String> subscriber = new EventSubscriber<String>() { @Override public void onEvent(@Nullable Object caller, String event) { assertEquals(EventSubscriberTest.this, caller); callResults.add(event); } }; SubscriberRunnable subscriberTest = new SubscriberRunnable(subscriber); subscriberTest.run(); EventAgent agent = new EventAgent() {}; assertEquals(0, subscriber.getAgents().size()); subscriber.subscribe(agent); // ensure agent is added to subscriber assertEquals(1, subscriber.getAgents().size()); // ensure subscriber added itself to agent assertEquals(1, agent.getSubscribers().size()); // test event call agent.call(this, "testEvent"); // ensure the event was called on the subscriber assertEquals(1, callResults.size()); assertEquals("testEvent", callResults.get(0)); callResults.clear(); // test unregister subscriber.unsubscribe(agent); // ensure the agent was removed from the subscriber assertEquals(0, subscriber.getAgents().size()); // ensure subscriber removed itself from the agent assertEquals(0, agent.getSubscribers().size()); // test event call agent.call(this, "testEvent"); // ensure the event was NOT called on the subscriber assertEquals(0, callResults.size()); } }