@Test
 public void testEmpty() throws Exception {
   AlarmPoint underTest = createAlarm("testEmpty");
   AlarmHistory hist = underTest.history();
   AlarmEvent event1 = hist.firstEvent();
   AlarmEvent event2 = hist.lastEvent();
   assertNull(event1);
   assertNull(event2);
   assertEquals("Activate Counter", 0, hist.activateCounter());
 }
 @Test
 public void testFirstNotLast() throws Exception {
   AlarmPoint underTest = createAlarm("testFirstNotLast");
   underTest.updateCondition(true);
   underTest.updateCondition(false);
   AlarmHistory hist = underTest.history();
   AlarmEvent event1 = hist.firstEvent();
   AlarmEvent event2 = hist.lastEvent();
   assertFalse(event1.equals(event2));
   Assert.assertEquals(AlarmPoint.STATUS_ACTIVATED, event1.newStatus().get().name(null));
   Assert.assertEquals(AlarmPoint.STATUS_NORMAL, event2.newStatus().get().name(null));
 }
  @Test
  public void testCounters() throws Exception {
    AlarmPoint underTest = createAlarm("testCounters");
    AlarmHistory hist = underTest.history();
    Map<String, Integer> counters = hist.counters().get();

    underTest.trigger(AlarmPoint.TRIGGER_ACTIVATE);
    verifyCounters(counters, 1, 0);

    underTest.trigger(AlarmPoint.TRIGGER_DEACTIVATE);
    verifyCounters(counters, 1, 1);

    underTest.trigger(AlarmPoint.TRIGGER_ACTIVATE);
    verifyCounters(counters, 2, 1);

    underTest.trigger(AlarmPoint.TRIGGER_DEACTIVATE);
    verifyCounters(counters, 2, 2);

    underTest.trigger(AlarmPoint.TRIGGER_DEACTIVATE);
    verifyCounters(counters, 2, 2);

    underTest.trigger(AlarmPoint.TRIGGER_ACTIVATE);
    verifyCounters(counters, 3, 2);

    int activateCounters = hist.activateCounter();
    assertEquals(3, activateCounters);

    hist.resetActivateCounter();
    verifyCounters(counters, 0, 2);

    hist.resetAllCounters();
    verifyCounters(counters, 0, 0);
  }
  @Test
  public void testGetPosition() throws Exception {
    AlarmPoint underTest = createAlarm("testGetPosition");
    alarmSystem.addAlarmListener(this);
    AlarmHistory hist = underTest.history();
    underTest.trigger(AlarmPoint.TRIGGER_ACTIVATE);
    underTest.trigger(AlarmPoint.TRIGGER_DEACTIVATE);
    underTest.trigger(AlarmPoint.TRIGGER_ACTIVATE);
    underTest.trigger(AlarmPoint.TRIGGER_DEACTIVATE);
    underTest.trigger(AlarmPoint.TRIGGER_DEACTIVATE);
    underTest.trigger(AlarmPoint.TRIGGER_ACTIVATE);

    assertEquals(5, eventCounter);
    assertEquals(5, hist.allAlarmEvents().get().size());

    AlarmEvent event = hist.eventAt(-1);
    assertNull(event);
    event = hist.eventAt(5);
    assertNull(event);
    event = hist.eventAt(0);
    assertEquals("activation", event.systemName().get());
    event = hist.eventAt(1);
    assertEquals("deactivation", event.systemName().get());
    event = hist.eventAt(2);
    assertEquals("activation", event.systemName().get());
    event = hist.eventAt(3);
    assertEquals("deactivation", event.systemName().get());
    event = hist.eventAt(4);
    assertEquals("activation", event.systemName().get());
  }
  @Test
  public void testSetMaxSize() throws Exception {
    AlarmPoint underTest = createAlarm("testSetMaxSize");
    alarmSystem.addAlarmListener(this);
    AlarmHistory hist = underTest.history();
    assertEquals(0, hist.allAlarmEvents().get().size());
    underTest.trigger(AlarmPoint.TRIGGER_ACTIVATE);
    assertEquals(1, hist.allAlarmEvents().get().size());
    underTest.trigger(AlarmPoint.TRIGGER_DEACTIVATE);
    assertEquals(2, hist.allAlarmEvents().get().size());
    underTest.trigger(AlarmPoint.TRIGGER_ACTIVATE);
    assertEquals(3, hist.allAlarmEvents().get().size());
    underTest.trigger(AlarmPoint.TRIGGER_DEACTIVATE);
    assertEquals(4, hist.allAlarmEvents().get().size());

    int maxsize = hist.maxSize().get();
    assertEquals(30, maxsize);

    hist.maxSize()
        .set(3); // The Qi4j version doesn't intercept the maxSize().set() method and purge the old
    underTest.trigger(AlarmPoint.TRIGGER_ACTIVATE); // so we do another event to purge.
    assertEquals(3, hist.allAlarmEvents().get().size());

    hist.maxSize().set(0);
    underTest.trigger(AlarmPoint.TRIGGER_DEACTIVATE); // so we do another event to purge.
    assertEquals(0, hist.allAlarmEvents().get().size());
    underTest.trigger(AlarmPoint.TRIGGER_ACTIVATE);
    assertEquals(0, hist.allAlarmEvents().get().size());
    underTest.trigger(AlarmPoint.TRIGGER_DEACTIVATE);
    assertEquals(0, hist.allAlarmEvents().get().size());
    hist.maxSize().set(2);
    assertEquals(0, hist.allAlarmEvents().get().size());
    underTest.trigger(AlarmPoint.TRIGGER_ACTIVATE);
    assertEquals(1, hist.allAlarmEvents().get().size());
    underTest.trigger(AlarmPoint.TRIGGER_DEACTIVATE);
    assertEquals(2, hist.allAlarmEvents().get().size());
    underTest.trigger(AlarmPoint.TRIGGER_ACTIVATE);
    assertEquals(2, hist.allAlarmEvents().get().size());
    assertEquals(11, eventCounter);
  }