/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.command.toolbar.commands.button;
import org.eclipse.che.ide.api.app.AppContext;
import org.eclipse.che.ide.api.command.CommandImpl;
import org.eclipse.che.ide.command.goal.RunGoal;
import org.eclipse.che.ide.ui.menubutton.ItemsProvider.DataChangedHandler;
import org.eclipse.che.ide.ui.menubutton.MenuItem;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.Optional;
import static org.fest.assertions.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/** Tests for {@link ExecuteCommandButtonItemsProvider}. */
@RunWith(MockitoJUnitRunner.class)
public class ExecuteCommandButtonItemsProviderTest {
@Mock
private AppContext appContext;
@Mock
private MenuItemsFactory menuItemsFactory;
@Mock
private RunGoal goal;
@InjectMocks
private ExecuteCommandButtonItemsProvider provider;
@Test
public void shouldReturnDefaultItem() throws Exception {
MenuItem menuItem = mock(MenuItem.class);
provider.setDefaultItem(menuItem);
assertEquals(Optional.of(menuItem), provider.getDefaultItem());
}
@Test
public void testAddCommand() throws Exception {
// given
CommandImpl command1 = mock(CommandImpl.class);
CommandImpl command2 = mock(CommandImpl.class);
CommandItem commandItem1 = mock(CommandItem.class);
CommandItem commandItem2 = mock(CommandItem.class);
when(menuItemsFactory.newCommandItem(eq(command1))).thenReturn(commandItem1);
when(menuItemsFactory.newCommandItem(eq(command2))).thenReturn(commandItem2);
DataChangedHandler dataChangedHandler = mock(DataChangedHandler.class);
provider.setDataChangedHandler(dataChangedHandler);
// when
provider.addCommand(command1);
provider.addCommand(command2);
// then
assertThat(provider.getItems()).hasSize(2).contains(commandItem1, commandItem2);
verify(dataChangedHandler, times(2)).onDataChanged();
}
@Test
public void testRemoveCommand() throws Exception {
// given
CommandImpl command1 = mock(CommandImpl.class);
CommandImpl command2 = mock(CommandImpl.class);
CommandItem commandItem1 = mock(CommandItem.class);
CommandItem commandItem2 = mock(CommandItem.class);
when(menuItemsFactory.newCommandItem(eq(command1))).thenReturn(commandItem1);
when(menuItemsFactory.newCommandItem(eq(command2))).thenReturn(commandItem2);
DataChangedHandler dataChangedHandler = mock(DataChangedHandler.class);
provider.setDataChangedHandler(dataChangedHandler);
provider.addCommand(command1);
provider.addCommand(command2);
// when
provider.removeCommand(command1);
// then
assertThat(provider.getItems()).hasSize(1).containsOnly(commandItem2);
verify(dataChangedHandler, times(3)).onDataChanged();
}
@Test
public void shouldProvideGuideItemOnlyWhenNoCommands() throws Exception {
GuideItem guideItem = mock(GuideItem.class);
when(menuItemsFactory.newGuideItem(goal)).thenReturn(guideItem);
assertThat(provider.getItems()).hasSize(1).containsOnly(guideItem);
}
}