/******************************************************************************* * 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.plugin.java.plain.client.wizard; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.gwtmockito.GwtMockitoTestRunner; import org.eclipse.che.ide.api.data.tree.Node; import org.eclipse.che.ide.api.project.MutableProjectConfig; import org.eclipse.che.ide.api.project.type.wizard.ProjectWizardRegistrar; import org.eclipse.che.ide.api.resources.Resource; import org.eclipse.che.ide.api.wizard.Wizard; import org.eclipse.che.ide.resource.Path; import org.eclipse.che.ide.resources.tree.ResourceNode; import org.eclipse.che.plugin.java.plain.client.wizard.selector.SelectNodePresenter; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.eclipse.che.ide.ext.java.shared.Constants.SOURCE_FOLDER; import static org.eclipse.che.plugin.java.plain.shared.PlainJavaProjectConstants.DEFAULT_SOURCE_FOLDER_VALUE; import static org.eclipse.che.plugin.java.plain.shared.PlainJavaProjectConstants.LIBRARY_FOLDER; import static org.hamcrest.CoreMatchers.hasItems; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; 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; /** * @author Valeriy Svydenko */ @RunWith(GwtMockitoTestRunner.class) public class PlainJavaPagePresenterTest { @Mock private PlainJavaPageView view; @Mock private MutableProjectConfig dataObject; @Mock private AcceptsOneWidget container; @Mock private Wizard.UpdateDelegate updateDelegate; @Mock private SelectNodePresenter selectNodePresenter; @InjectMocks private PlainJavaPagePresenter page; private Map<String, List<String>> attributes = new HashMap<>(); @Before public void setUp() throws Exception { Map<String, String> context = new HashMap<>(); context.put(ProjectWizardRegistrar.WIZARD_MODE_KEY, "create"); page.setContext(context); when(dataObject.getAttributes()).thenReturn(attributes); when(dataObject.getName()).thenReturn("name"); when(view.getSourceFolder()).thenReturn("src"); } @Test public void ActionDelegateShouldBeSet() throws Exception { verify(view).setDelegate(page); } @Test public void pageShouldBeInitialized() throws Exception { page.init(dataObject); assertTrue(dataObject.getAttributes().size() == 1); assertEquals(DEFAULT_SOURCE_FOLDER_VALUE, dataObject.getAttributes().get(SOURCE_FOLDER).get(0)); } @Test public void pageIsNotReadyIfSourceFolderValueIsNotDefine() throws Exception { page.init(dataObject); attributes.clear(); assertFalse(page.isCompleted()); } @Test public void pageShouldBeCompleted() throws Exception { page.init(dataObject); assertTrue(page.isCompleted()); } @Test public void pageShouldBeUpdated() throws Exception { page.setUpdateDelegate(updateDelegate); page.init(dataObject); page.go(container); verify(container).setWidget(view); verify(updateDelegate).updateControls(); verify(view).changeBrowseBtnVisibleState(false); verify(view).changeSourceFolderFieldState(true); verify(view).setSourceFolder(DEFAULT_SOURCE_FOLDER_VALUE); verify(view).showSourceFolderMissingIndicator(false); } @Test public void pageStateShouldBeUpdateIfAttributeWasChanged() throws Exception { when(view.getLibraryFolder()).thenReturn("lib1, lib2"); page.setUpdateDelegate(updateDelegate); page.init(dataObject); page.onCoordinatesChanged(); verify(view, times(2)).getSourceFolder(); verify(updateDelegate).updateControls(); verify(view).showSourceFolderMissingIndicator(false); } @Test public void severalSourceFoldersShouldBeSet() throws Exception { when(view.getLibraryFolder()).thenReturn("lib1, lib2"); when(view.getSourceFolder()).thenReturn("src1, src2"); page.setUpdateDelegate(updateDelegate); page.init(dataObject); page.onCoordinatesChanged(); verify(view, times(2)).getSourceFolder(); verify(updateDelegate).updateControls(); verify(view).showSourceFolderMissingIndicator(false); assertEquals(2, dataObject.getAttributes().get(LIBRARY_FOLDER).size()); assertEquals(2, dataObject.getAttributes().get(SOURCE_FOLDER).size()); assertThat(dataObject.getAttributes().get(LIBRARY_FOLDER), hasItems("lib1", "lib2")); assertThat(dataObject.getAttributes().get(SOURCE_FOLDER), hasItems("src1", "src2")); } @Test public void showSelectWindowWhenBrowseButtonWasClicked() throws Exception { page.init(dataObject); page.onBrowseSourceButtonClicked(); verify(selectNodePresenter).show(page, "name"); } @Test public void selectedNodeShouldBeWithRelativePath() throws Exception { when(view.getLibraryFolder()).thenReturn("lib1, lib2"); when(view.getSourceFolder()).thenReturn("src1, src2"); List<Node> selectedNodes = new ArrayList<>(); ResourceNode selectedNode1 = mock(ResourceNode.class); ResourceNode selectedNode2 = mock(ResourceNode.class); Resource resource1 = mock(Resource.class); Resource resource2 = mock(Resource.class); selectedNodes.add(selectedNode1); selectedNodes.add(selectedNode2); when(selectedNode1.getData()).thenReturn(resource1); when(resource1.getLocation()).thenReturn(Path.valueOf("projectName/folder1/folder2")); when(selectedNode2.getData()).thenReturn(resource2); when(resource2.getLocation()).thenReturn(Path.valueOf("projectName/folder")); when(dataObject.getName()).thenReturn("projectName"); page.setUpdateDelegate(updateDelegate); page.init(dataObject); page.onNodeSelected(selectedNodes); verify(view).setLibraryFolder(eq("folder1/folder2, folder")); } }