@Test
  public void testFormattedRecordsReturnsAnEmptyStringWhenThereIsNoRecord() {
    final ShortTermMemoryHandler handler;

    handler = new ShortTermMemoryHandler(1, Level.INFO, null);
    assertEquals("", handler.formattedRecords());
  }
  @Test
  public void testRecordsReturnsAnEmptyArrayWhenNoRecordHasBeenAdded() {
    final ShortTermMemoryHandler handler;

    handler = new ShortTermMemoryHandler(1, Level.FINEST, null);
    assertNotNull(handler.records());
    assertEquals(0, handler.records().length);
  }
  @Test
  public void testRecordsIsEmptyWhenAddedRecordIsLowerThanTheMinimumLevel() {
    final ShortTermMemoryHandler handler;
    final LogRecord theLogRecord;

    handler = new ShortTermMemoryHandler(1, Level.INFO, null);
    theLogRecord = new LogRecord(Level.FINE, "");
    handler.publish(theLogRecord);
    assertNotNull(handler.records());
    assertEquals(0, handler.records().length);
  }
  @Test
  public void testRecordsReturnsTheAddedRecordWhenASingleOneIsPublished() {
    final ShortTermMemoryHandler handler;
    final LogRecord theLogRecord;

    handler = new ShortTermMemoryHandler(1, Level.FINEST, null);
    theLogRecord = new LogRecord(Level.INFO, "");
    handler.publish(theLogRecord);
    assertNotNull(handler.records());
    assertEquals(1, handler.records().length);
    assertEquals(theLogRecord, handler.records()[0]);
  }
  @Test
  public void testFormattedRecords() {
    final ShortTermMemoryHandler handler;
    final LogRecord firstLogRecord;
    final LogRecord secondLogRecord;
    final Formatter formatter;

    formatter =
        new Formatter() {
          @Override
          public String format(LogRecord record) {
            return "[FORMATTED] " + record.getMessage();
          }
        };
    handler = new ShortTermMemoryHandler(2, Level.INFO, formatter);
    firstLogRecord = new LogRecord(Level.INFO, "First log message");
    secondLogRecord = new LogRecord(Level.INFO, "Second log message");
    handler.publish(firstLogRecord);
    handler.publish(secondLogRecord);
    assertEquals(
        "[FORMATTED] First log message\n" + "[FORMATTED] Second log message\n",
        handler.formattedRecords());
  }
  @Test
  public void
      testRecordsOnlyReturnsTheLastTwoRecordsWhenThreeRecordsArePublishedAndCapacityIsExceeded() {
    final ShortTermMemoryHandler handler;
    final LogRecord firstLogRecord;
    final LogRecord secondLogRecord;
    final LogRecord thirdLogRecord;

    handler = new ShortTermMemoryHandler(2, Level.FINEST, null);
    firstLogRecord = new LogRecord(Level.INFO, "");
    secondLogRecord = new LogRecord(Level.INFO, "");
    thirdLogRecord = new LogRecord(Level.INFO, "");
    handler.publish(firstLogRecord);
    handler.publish(secondLogRecord);
    handler.publish(thirdLogRecord);
    assertNotNull(handler.records());
    assertEquals(2, handler.records().length);
    assertEquals(secondLogRecord, handler.records()[0]);
    assertEquals(thirdLogRecord, handler.records()[1]);
  }
  @Test
  public void testAfterCloseAllRecordsAreCleared() {
    final ShortTermMemoryHandler handler;
    final LogRecord firstLogRecord;
    final LogRecord secondLogRecord;

    handler = new ShortTermMemoryHandler(2, Level.FINEST, null);
    firstLogRecord = new LogRecord(Level.INFO, "");
    secondLogRecord = new LogRecord(Level.INFO, "");
    handler.publish(firstLogRecord);
    handler.publish(secondLogRecord);
    handler.close();
    assertNotNull(handler.records());
    assertEquals(0, handler.records().length);
  }