@Test
  public void runCommand_close_shouldCallListener() throws MraidCommandException {
    Map<String, String> params = new HashMap<String, String>();

    subjectBanner.runCommand(MraidJavascriptCommand.CLOSE, params);

    verify(mockBridgeListener).onClose();
  }
  public void runCommand_requiresClick_clicked_shouldNotThrowException()
      throws MraidCommandException {
    subjectBanner.setClicked(true);
    Map<String, String> params = new HashMap<String, String>();
    params.put("uri", "http://valid-url");

    subjectBanner.runCommand(MraidJavascriptCommand.PLAY_VIDEO, params);
  }
  @Test
  public void runCommand_interstitial_requiresClick_clicked_shouldNotThrowException()
      throws MraidCommandException {
    subjectInterstitial.setClicked(true);
    Map<String, String> params = new HashMap<String, String>();
    params.put("url", "http://valid-url");

    subjectInterstitial.runCommand(MraidJavascriptCommand.OPEN, params);
  }
  @Test(expected = MraidCommandException.class)
  public void runCommand_interstitial_requiresClick_notClicked_shouldThrowException()
      throws MraidCommandException {
    subjectInterstitial.setClicked(false);
    Map<String, String> params = new HashMap<String, String>();
    params.put("uri", "http://valid-url");

    subjectInterstitial.runCommand(MraidJavascriptCommand.OPEN, params);
  }
  @Test
  public void runCommand_expand_shouldCallListener() throws MraidCommandException {
    subjectBanner.setClicked(true);
    Map<String, String> params = new HashMap<String, String>();
    params.put("shouldUseCustomClose", "true");

    subjectBanner.runCommand(MraidJavascriptCommand.EXPAND, params);

    verify(mockBridgeListener).onExpand(null, true);
  }
  @Test
  public void runCommand_createCalendarEvent_shouldCallListener() throws MraidCommandException {
    subjectBanner.setClicked(true);
    Map<String, String> params = new HashMap<String, String>();
    params.put("eventName", "Dinner at my house");

    subjectBanner.runCommand(MraidJavascriptCommand.CREATE_CALENDAR_EVENT, params);

    verify(mockNativeCommandHandler)
        .createCalendarEvent(any(Context.class), anyMapOf(String.class, String.class));
  }
  @Test(expected = MraidCommandException.class)
  public void runCommand_requiresClick_notClicked_shouldThrowException()
      throws MraidCommandException {
    subjectBanner = new MraidBridge(mockAdReport, PlacementType.INLINE);
    subjectBanner.attachView(mockBannerWebView);
    subjectBanner.setClicked(false);
    Map<String, String> params = new HashMap<String, String>();
    params.put("uri", "http://valid-url");

    subjectBanner.runCommand(MraidJavascriptCommand.PLAY_VIDEO, params);
  }
  @Test
  public void runCommand_storePicture_shouldCallListener() throws MraidCommandException {
    subjectBanner.setClicked(true);
    Map<String, String> params = new HashMap<String, String>();
    params.put("uri", "http://valid-url");

    subjectBanner.runCommand(MraidJavascriptCommand.STORE_PICTURE, params);

    verify(mockNativeCommandHandler)
        .storePicture(
            any(Context.class), eq("http://valid-url"), any(MraidCommandFailureListener.class));
  }
  @Test
  public void runCommand_playVideo_shouldCallListener() throws MraidCommandException {
    subjectBanner.setClicked(true);
    Map<String, String> params = new HashMap<String, String>();
    params.put("uri", "http://valid-url");

    subjectBanner.runCommand(MraidJavascriptCommand.PLAY_VIDEO, params);

    ArgumentCaptor<URI> uriCaptor = ArgumentCaptor.forClass(URI.class);
    verify(mockBridgeListener).onPlayVideo(uriCaptor.capture());
    assertThat(uriCaptor.getValue().toString()).isEqualTo("http://valid-url");
  }
  @Test
  public void runCommand_expand_withUrl_shouldCallListener() throws MraidCommandException {
    subjectBanner.setClicked(true);
    Map<String, String> params = new HashMap<String, String>();
    params.put("url", "http://valid-url");
    params.put("shouldUseCustomClose", "true");

    subjectBanner.runCommand(MraidJavascriptCommand.EXPAND, params);

    ArgumentCaptor<URI> uriCaptor = ArgumentCaptor.forClass(URI.class);
    verify(mockBridgeListener).onExpand(uriCaptor.capture(), eq(true));
    assertThat(uriCaptor.getValue().toString()).isEqualTo("http://valid-url");
  }