private ReactionRuleCompleteRoom generateReactionRule() {
   es = context.mock(EvacuationState.class);
   EvacuationCellularAutomaton eca = new EvacuationCellularAutomaton();
   context.checking(
       new Expectations() {
         {
           allowing(es).getCellularAutomaton();
           will(returnValue(eca));
         }
       });
   ReactionRuleCompleteRoom rule = new ReactionRuleCompleteRoom();
   rule.setEvacuationState(es);
   return rule;
 }
  @Test
  public void alertedByRoom() {
    Individual i = builder.withAge(0).withReactionTime(7).build();
    IndividualProperty ip = new IndividualProperty(i);
    Room room = mockRoom(i, true, 0);
    RoomCell cell = generateCell(room, i, ip);

    ReactionRuleCompleteRoom rule = generateReactionRule();
    context.checking(
        new Expectations() {
          {
            allowing(es).propertyFor(i);
            will(returnValue(ip));
          }
        });

    rule.execute(cell);
    assertThat(ip.isAlarmed(), is(true));
  }
  @Test
  public void roomNotAlerted() {
    Individual i = builder.withAge(0).withReactionTime(7).buildAndReset();
    IndividualProperty ip = new IndividualProperty(i);
    Room room = mockRoom(i, false, 0);
    RoomCell cell = generateCell(room, i, ip);

    ReactionRuleCompleteRoom rule = generateReactionRule();
    context.checking(
        new Expectations() {
          {
            exactly(1).of(es).getTimeStep();
            will(returnValue(0));
            allowing(es).propertyFor(i);
            will(returnValue(ip));
          }
        });
    rule.execute(cell);
    assertThat(ip.isAlarmed(), is(false));
  }