@Test
  public void focusingOnNullDoesntChangeFocus() throws Exception {
    listener.focusOn(panel);
    listener.focusOn(null);

    assertEquals(panel, listener.getFocusedPanel());
    assertEquals(FocusGainedEvent.class, panelEvents.last().getClass());
  }
  @Test
  public void focusIsLostWhenChangingFocus() throws Exception {
    MockPanel panel2 = new MockPanel();

    listener.focusOn(panel);
    listener.focusOn(panel2);

    assertEquals(panel2, listener.getFocusedPanel());
    assertEquals(FocusLostEvent.class, panelEvents.last().getClass());
    assertEquals(FocusGainedEvent.class, panel2.mockEventHandler.last().getClass());
  }
  @Test
  public void focuedPanelReceivesReleaseKeyEvents() throws Exception {
    listener.focusOn(panel);

    final KeyEvent releasedEvent = new KeyEvent(component, 1, 2, 3, KeyEvent.VK_B, 'c');
    listener.keyReleased(releasedEvent);
    limelight.ui.events.KeyReleasedEvent keyEvent1 =
        (limelight.ui.events.KeyReleasedEvent) panelEvents.last();
    assertSame(panel, keyEvent1.getSource());
    assertEquals(limelight.ui.events.KeyEvent.KEY_B, keyEvent1.getKeyCode());
  }
  @Test
  public void focuedPanelReceivesPressKeyEvents() throws Exception {
    listener.focusOn(panel);

    final KeyEvent pressedEvent = new KeyEvent(component, 1, 2, 3, KeyEvent.VK_A, 'b');
    listener.keyPressed(pressedEvent);
    limelight.ui.events.KeyPressedEvent keyEvent =
        (limelight.ui.events.KeyPressedEvent) panelEvents.last();
    assertSame(panel, keyEvent.getSource());
    assertEquals(limelight.ui.events.KeyEvent.KEY_A, keyEvent.getKeyCode());
  }
  @Test
  public void focuedPanelReceivesTypedKeyEvents() throws Exception {
    listener.focusOn(panel);

    final KeyEvent typedEvent = new KeyEvent(component, 1, 2, 3, 4, 'a');
    listener.keyTyped(typedEvent);
    limelight.ui.events.CharTypedEvent charEvent =
        (limelight.ui.events.CharTypedEvent) panelEvents.last();
    assertEquals(panel, charEvent.getSource());
    assertEquals('a', charEvent.getChar());
  }