package com.jcwhatever.nucleus.collections.observer.agent; import static org.junit.Assert.assertEquals; import com.jcwhatever.nucleus.collections.java.MapRunnable; import com.jcwhatever.nucleus.mixins.IDisposable; import com.jcwhatever.nucleus.utils.observer.ISubscriber; import com.jcwhatever.nucleus.utils.observer.ISubscriberAgent; import com.jcwhatever.nucleus.utils.observer.SubscriberAgent; import org.junit.Test; import java.util.HashMap; import java.util.Map; import java.util.Set; public class AgentMapTest { @Test public void testMap() { AgentMap<String, ISubscriberAgent> map = new AgentMap<String, ISubscriberAgent>() { Map<String, ISubscriberAgent> internalMap = new HashMap<>(10); @Override protected Map<String, ISubscriberAgent> map() { return internalMap; } }; DisposableAgent agent1 = new DisposableAgent() {}; DisposableAgent agent2 = new DisposableAgent() {}; DisposableAgent agent3 = new DisposableAgent() {}; new MapRunnable<>(map, "a", "b", "c", agent1, agent2, agent3).run(); map.clear(); map.put("test", agent1); assertEquals(1, map.size()); agent1.dispose(); assertEquals(0, map.size()); } private static class DisposableAgent extends SubscriberAgent implements IDisposable { @Override public boolean isDisposed() { return false; } @Override public void dispose() { Set<ISubscriber> subscribers = getSubscribers(); for (ISubscriber subscriber : subscribers) { subscriber.unsubscribe(this); } } } }