1 package org.djutils.stats.summarizers.event;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertTrue;
5 import static org.junit.Assert.fail;
6
7 import org.djutils.event.Event;
8 import org.djutils.event.EventInterface;
9 import org.djutils.event.EventListenerInterface;
10 import org.djutils.event.EventType;
11 import org.djutils.metadata.MetaData;
12 import org.junit.Test;
13
14
15
16
17
18
19
20
21
22
23
24 public class EventBasedCounterTest
25 {
26
27 private static final EventType COUNT_EVENT = new EventType("CountEvent", MetaData.NO_META_DATA);
28
29
30 @Test
31 public void testEventBasedCounter()
32 {
33 String description = "counter description";
34 EventBasedCounter counter = new EventBasedCounter(description);
35 assertEquals(description, counter.toString());
36 assertEquals(description, counter.getDescription());
37 assertEquals(counter, counter.getSourceId());
38
39 assertEquals(0L, counter.getN());
40 assertEquals(0L, counter.getCount());
41
42 counter.notify(new Event(COUNT_EVENT, "EventBasedCounterTest", 2));
43 assertEquals(1L, counter.getN());
44 assertEquals(2L, counter.getCount());
45
46 counter.initialize();
47 assertEquals(0L, counter.getN());
48 assertEquals(0L, counter.getCount());
49
50 CounterEventListener cel = new CounterEventListener();
51 counter.addListener(cel, StatisticsEvents.OBSERVATION_ADDED_EVENT);
52 assertEquals(0, cel.getCountEvents());
53
54
55 try
56 {
57 counter.notify(new Event(COUNT_EVENT, "EventBasedCounterTest", "abc"));
58 fail("Wrong payload to EventBasedCounter should have triggreed an exception");
59 }
60 catch (RuntimeException exception)
61 {
62
63 }
64
65 LoggingEventListener nListener = new LoggingEventListener();
66 counter.addListener(nListener, StatisticsEvents.N_EVENT);
67 LoggingEventListener countListener = new LoggingEventListener();
68 counter.addListener(countListener, StatisticsEvents.COUNT_EVENT);
69
70 long value = 0;
71 for (int i = 0; i < 100; i++)
72 {
73 counter.notify(new Event(COUNT_EVENT, "EventBasedCounterTest", 2 * i));
74 value += 2 * i;
75 }
76 assertEquals(100, counter.getN());
77 assertEquals(value, counter.getCount());
78 assertEquals(100, cel.getCountEvents());
79 assertEquals(100, nListener.getNumberOfEvents());
80 assertEquals(100, countListener.getNumberOfEvents());
81 assertEquals(counter, nListener.getLastEvent().getSourceId());
82 assertEquals(counter, countListener.getLastEvent().getSourceId());
83 assertEquals(100L, nListener.getLastEvent().getContent());
84 assertEquals(value, countListener.getLastEvent().getContent());
85 }
86
87
88 class CounterEventListener implements EventListenerInterface
89 {
90
91 private static final long serialVersionUID = 1L;
92
93
94 private int countEvents = 0;
95
96 @Override
97 public void notify(final EventInterface event)
98 {
99 assertTrue(event.getType().equals(StatisticsEvents.OBSERVATION_ADDED_EVENT));
100 assertTrue("Content of the event has a wrong type, not Long: " + event.getContent().getClass(),
101 event.getContent() instanceof Long);
102 assertTrue("SourceId of the event has a wrong type, not EventBasedCounter: " + event.getSourceId().getClass(),
103 event.getSourceId() instanceof EventBasedCounter);
104 this.countEvents++;
105 }
106
107
108
109
110 public int getCountEvents()
111 {
112 return this.countEvents;
113 }
114 }
115 }