package org.sef4j.core.helpers.export.senders; import java.util.Arrays; import java.util.List; import java.util.Map; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.sef4j.core.helpers.export.ExportFragment; import org.sef4j.core.helpers.export.ExportFragmentList; import org.sef4j.core.helpers.proptree.DummyCount; import org.sef4j.core.helpers.proptree.changes.DummyCountPropTreeValueProvider; import org.sef4j.core.helpers.proptree.model.PropTreeNode; import org.sef4j.core.helpers.senders.InMemoryEventSender; public class ExportFragmentsPollingEventProviderTest { private PropTreeNode rootNode = PropTreeNode.newRoot(); private PropTreeNode fooNode = rootNode.getOrCreateChild("foo"); private PropTreeNode fooBarNode = fooNode.getOrCreateChild("bar"); private DummyCount fooCount = fooNode.getOrCreateProp("dummyCount", DummyCount.FACTORY); private DummyCount fooBarCount = fooBarNode.getOrCreateProp("dummyCount", DummyCount.FACTORY); private DummyCountPropTreeValueProvider dummyCountChangeCollector = new DummyCountPropTreeValueProvider(rootNode); private InMemoryEventSender<ExportFragmentList<DummyCount>> inMemoryEventSender = new InMemoryEventSender<ExportFragmentList<DummyCount>>(); private ExportFragmentsPollingEventProvider<DummyCount> sut = new ExportFragmentsPollingEventProvider<DummyCount>("test", Arrays.asList(dummyCountChangeCollector)); @Before public void setup() { sut.addEventListener(inMemoryEventSender); } @Test public void testPoll() throws Exception { // Prepare fooCount.incrCount1(); fooBarCount.incrCount2(); // Perform sut.poll(); // Post-check List<ExportFragmentList<DummyCount>> events = inMemoryEventSender.clearAndGet(); Assert.assertTrue(events.size() >= 1); ExportFragmentList<DummyCount> event0 = events.get(0); Map<?,ExportFragment<DummyCount>> changes = event0.getIdentifiableFragments(); Assert.assertNotNull(changes); DummyCount fooChange = changes.get("foo").getValue(); Assert.assertNotNull(fooChange); assertCount(1, 0, fooChange); DummyCount fooBarChange = changes.get("foo/bar").getValue(); Assert.assertNotNull(fooBarChange); assertCount(0, 1, fooBarChange); } private static void assertCount(int expectedCount1, long expectedCount2, DummyCount actual) { Assert.assertEquals(expectedCount1, actual.getCount1()); Assert.assertEquals(expectedCount2, actual.getCount2()); } }